From d6ce1b196e4b7e7e1e9431ae6aa39bb3eb4b8f77 Mon Sep 17 00:00:00 2001 From: Thumbscrew Date: Sat, 12 Mar 2022 22:07:14 +0000 Subject: [PATCH] add initial module files add first function for creating an access token --- .gitignore | 1 + PSMatrix.psd1 | 134 ++++++++++++++++++++++++++++++++ PSMatrix.psm1 | 14 ++++ README.md | 2 +- public/Get-MatrixLoginToken.ps1 | 45 +++++++++++ 5 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 PSMatrix.psd1 create mode 100644 PSMatrix.psm1 create mode 100644 public/Get-MatrixLoginToken.ps1 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..600d2d3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode \ No newline at end of file diff --git a/PSMatrix.psd1 b/PSMatrix.psd1 new file mode 100644 index 0000000..6f8409b --- /dev/null +++ b/PSMatrix.psd1 @@ -0,0 +1,134 @@ +# +# Module manifest for module 'PSMatrix' +# +# Generated by: james +# +# Generated on: 12/03/2022 +# + +@{ + +# Script module or binary module file associated with this manifest. +# RootModule = '' + +# Version number of this module. +ModuleVersion = '0.0.1' + +# Supported PSEditions +# CompatiblePSEditions = @() + +# ID used to uniquely identify this module +GUID = 'ed1fd437-5e51-4916-90ed-c31ae7deb50b' + +# Author of this module +Author = 'Thumbscrew' + +# Company or vendor of this module +CompanyName = 'Unknown' + +# Copyright statement for this module +# Copyright = '(c) Thumbscrew. All rights reserved.' + +# Description of the functionality provided by this module +# Description = '' + +# Minimum version of the PowerShell engine required by this module +PowerShellVersion = '7.0' + +# Name of the PowerShell host required by this module +# PowerShellHostName = '' + +# Minimum version of the PowerShell host required by this module +# PowerShellHostVersion = '' + +# Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# DotNetFrameworkVersion = '' + +# Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only. +# ClrVersion = '' + +# Processor architecture (None, X86, Amd64) required by this module +# ProcessorArchitecture = '' + +# Modules that must be imported into the global environment prior to importing this module +# RequiredModules = @() + +# Assemblies that must be loaded prior to importing this module +# RequiredAssemblies = @() + +# Script files (.ps1) that are run in the caller's environment prior to importing this module. +# ScriptsToProcess = @() + +# Type files (.ps1xml) to be loaded when importing this module +# TypesToProcess = @() + +# Format files (.ps1xml) to be loaded when importing this module +# FormatsToProcess = @() + +# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess +# NestedModules = @() + +# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. +FunctionsToExport = @( + 'Get-MatrixLoginToken' +) + +# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. +CmdletsToExport = @() + +# Variables to export from this module +VariablesToExport = '*' + +# Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export. +AliasesToExport = @() + +# DSC resources to export from this module +# DscResourcesToExport = @() + +# List of all modules packaged with this module +# ModuleList = @() + +# List of all files packaged with this module +# FileList = @() + +# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. +PrivateData = @{ + + PSData = @{ + + # Tags applied to this module. These help with module discovery in online galleries. + # Tags = @() + + # A URL to the license for this module. + # LicenseUri = '' + + # A URL to the main website for this project. + ProjectUri = 'https://github.com/Thumbscrew/PSMatrix' + + # A URL to an icon representing this module. + # IconUri = '' + + # ReleaseNotes of this module + # ReleaseNotes = '' + + # Prerelease string of this module + # Prerelease = '' + + # Flag to indicate whether the module requires explicit user acceptance for install/update/save + # RequireLicenseAcceptance = $false + + # External dependent modules of this module + # ExternalModuleDependencies = @() + + } # End of PSData hashtable + +} # End of PrivateData hashtable + +# HelpInfo URI of this module +# HelpInfoURI = '' + +# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix. +# DefaultCommandPrefix = '' + +} + diff --git a/PSMatrix.psm1 b/PSMatrix.psm1 new file mode 100644 index 0000000..4e1576a --- /dev/null +++ b/PSMatrix.psm1 @@ -0,0 +1,14 @@ +# Get public and private function definition files. +$Public = @( Get-ChildItem -Path $PSScriptRoot\public\*.ps1 -Recurse ) +$Private = @( Get-ChildItem -Path $PSScriptRoot\private\*.ps1 -Recurse ) + +# Dot source the files +Foreach ($import in @($Public + $Private)) { + Try { + . $import.fullname + } Catch { + Write-Error -Message "Failed to import function $($import.fullname): $_" + } +} + +Export-ModuleMember -Function '*' -Alias '*' \ No newline at end of file diff --git a/README.md b/README.md index aceaaa5..2f70fea 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # PSMatrix -PowerShell module for interacting with the Matrix API +PowerShell module for interacting with the Matrix API \ No newline at end of file diff --git a/public/Get-MatrixLoginToken.ps1 b/public/Get-MatrixLoginToken.ps1 new file mode 100644 index 0000000..66f0ed2 --- /dev/null +++ b/public/Get-MatrixLoginToken.ps1 @@ -0,0 +1,45 @@ +<# + .Synopsis + Login and retrieve an Access token. + + .Description + Login and retrieve an Access token from _matrix/client/v3/login. See https://spec.matrix.org/v1.2/client-server-api/#post_matrixclientv3login. + + .Parameter ServerUrl + URL for the Matrix server to log into, for example "https://matrix.example.com". + + .Parameter Credentials + PSCredentials Object that contains the Matrix Username and Password for the user you wish to log in with. + + .Example + # Create a PSCredentials Object + $creds = Get-Credential + $token = Get-LoginToken -ServerUrl "https://matrix.example.com" -Credentials $creds +#> +function Get-MatrixLoginToken { + param( + [Parameter(Mandatory)] + [string]$ServerUrl, + + [Parameter(Mandatory)] + [PSCredential]$Credentials + ) + + $apiPath = "_matrix/client/v3/login" + $apiMethod = "Post" + + $reqBody = @{ + identifier = @{ + type = "m.id.user" + user = $Credentials.UserName + } + type = "m.login.password" + password = $Credentials.Password | ConvertFrom-SecureString -AsPlainText + } | ConvertTo-Json + + $res = Invoke-RestMethod -Uri "$ServerUrl/$apiPath" -Method $apiMethod -Body $reqBody + + $token = $res.access_token | ConvertTo-SecureString + + return $res.access_token +} \ No newline at end of file