Private/New-LMHeader.ps1
Function New-LMHeader { [CmdletBinding()] Param ( [Parameter(Mandatory)] $Auth, [Parameter(Mandatory)] [String]$Method, [Parameter(Mandatory)] [String]$ResourcePath, $Data, [Int]$Version = 3, [String]$ContentType = "application/json" ) # Use TLS 1.2 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # Get current time in milliseconds... $Epoch = [Math]::Round((New-TimeSpan -start (Get-Date -Date "1/1/1970") -end (Get-Date).ToUniversalTime()).TotalMilliseconds) # Concatenate general request details... If($Method -eq "GET" -or $Method -eq "DELETE"){ $RequestVars = $Method + $Epoch + $ResourcePath } Else{ $RequestVars = $Method + $Epoch + $Data + $ResourcePath } # Construct signature... $Hmac = New-Object System.Security.Cryptography.HMACSHA256 $Hmac.Key = [Text.Encoding]::UTF8.GetBytes([System.Net.NetworkCredential]::new("", $Auth.Key).Password) $SignatureBytes = $Hmac.ComputeHash([Text.Encoding]::UTF8.GetBytes($RequestVars)) $SignatureHex = [System.BitConverter]::ToString($SignatureBytes) -replace '-' $Signature = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($SignatureHex.ToLower())) # Construct headers... $LMAuth = 'LMv1 ' + $Auth.Id + ':' + $Signature + ':' + $Epoch $Header = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $Header.Add("Authorization",$LMAuth) $Header.Add("Content-Type", $ContentType) $Header.Add("X-Version",$Version) Return $Header } |