public/Save-NtfyAuthentication.ps1
|
<# .SYNOPSIS Saves authentication information into the proper hashtable(s). .DESCRIPTION Saves authentication information to the proper hashtable(s) for use in Ntfy requests. Payload is the main splat for Invoke-RestMethod, Headers is the headers splat. .PARAMETER Payload Hashtable to the main payload of the Ntfy request. .PARAMETER Headers Hashtable to the headers of the Ntfy request. If not provided, it will be created/modified into the Payload instead. .PARAMETER AccessToken SecureString token to be used for Bearer or Basic authentication. .PARAMETER Credential PSCredential object to be used for Basic authentication. .PARAMETER TokenType Type of token being used for authentication. Valid values are "Bearer" and "Basic". .EXAMPLE $Payload = @{Method='POST'; Body='test'; URI='https://ntfy.sh/test'} $Headers = @{} $AccessToken = ConvertTo-SecureString 'tk_**' -AsPlainText -Force Save-NtfyAuthentication -Payload $Payload -Headers $Headers -AccessToken $AccessToken -TokenType 'Bearer' Invoke-RestMethod @Payload .EXAMPLE $Payload = @{Method='POST'; Body='test'; URI='https://ntfy.sh/test'} $Headers = @{} $Credential = Get-Credential Save-NtfyAuthentication -Payload $Payload -Headers $Headers -Credential $Credential Invoke-RestMethod @Payload .EXAMPLE $Payload = @{Method='POST'; Body='test'; URI='https://ntfy.sh/test'} $AccessToken = ConvertTo-SecureString 'tk_**' -AsPlainText -Force Save-NtfyAuthentication -Payload $Payload -AccessToken $AccessToken -TokenType 'Bearer' Invoke-RestMethod @Payload # Headers parameter is optional and instead will be created or modified within Payload. #> function Save-NtfyAuthentication { [Alias('Save-NtfyAuth')][Alias('sva')] [CmdletBinding(DefaultParameterSetName = "Token")] param ( [Parameter(Mandatory = $true)] [hashtable]$Payload, # ptr [Parameter(Mandatory = $false)] [hashtable]$Headers = $null, # ptr [Parameter(ParameterSetName = "Token")] [SecureString]$AccessToken = $null, [Parameter(ParameterSetName = "Credential")] [PSCredential]$Credential = $null, [Parameter(ParameterSetName = "Token")] [ValidateSet("Bearer","Basic")] [string]$TokenType = "Bearer" ) # Ensure Headers hashtable exists inside the payload when needed function Enable-AuthHeaders { param($HeadersHash, $PayloadHash) if(-not $HeadersHash){ if(-not $PayloadHash.Headers){ Add-ObjectPropSafe -Object $PayloadHash -Key "Headers" -Value @{} } $HeadersHash = $PayloadHash.Headers } return $HeadersHash } switch ($PSCmdlet.ParameterSetName) { "Token" { try { if($PSVersionTable.PSVersion.Major -le 5){ # PS5- Logic $Headers = Enable-AuthHeaders -HeadersHash $Headers -PayloadHash $Payload $Token = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($AccessToken)) switch ($TokenType) { "Bearer" { $Headers["Authorization"] = "Bearer $Token" } "Basic" { $Headers["Authorization"] = "Basic $Token" } } } else { # PS6+ Logic switch ($TokenType) { "Bearer" { $Payload["Token"] = $AccessToken # should remain a SecureString $Payload["Authentication"] = "Bearer" } "Basic" { $Headers = Enable-AuthHeaders -HeadersHash $Headers -PayloadHash $Payload $Headers["Authorization"] = "Basic $(ConvertFrom-SecureString -AsPlainText $AccessToken)" } } } } catch { Write-TerminatingError -Exception $_.Exception ` -Message "Failed to process the -AccessToken for authentication." ` -Category ParserError ` -ErrorId "Ntfy.AccessTokenError" } } "Credential" { try { $Headers = Enable-AuthHeaders -HeadersHash $Headers -PayloadHash $Payload $EncodedAuth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$($Credential.UserName):$($Credential.GetNetworkCredential().Password)")) $Headers["Authorization"] = "Basic $EncodedAuth" } catch { Write-TerminatingError -Exception $_.Exception ` -Message "Failed to process the -Credential for authentication." ` -Category ParserError ` -ErrorId "Ntfy.CredentialError" } } default {} } } Set-Alias -Name sva -Value Save-NtfyAuthentication Set-Alias -Name Save-NtfyAuth -Value Save-NtfyAuthentication |