Private/Get-iPilotOAuthToken.ps1
Function Get-iPilotOAuthToken { <# .Synopsis Returns iPilot OAuth token. .Description Helper function for iPilot module to retrieve OAuth access token. .Parameter iPilotAuthUri URL of iPilot API .Parameter APIVersion Version of iPilot API .Parameter Credential Credentials for iPilot API .Example # Get avilable numbers with the status set to Ported using API Version v1 in the contoso.com iPilot domain Get-iPilotOAuthToken -Credential (Get-Credential) #> Param ( [System.String] $ApiUrl = "https://api.nuwave.com", [System.String] $ApiVersion = "v1", [System.String] [Parameter(Mandatory = $true)] $ApiKey, [System.Management.Automation.PSCredential] [Parameter(Mandatory = $true)] $Credential, [Switch] $RefreshToken ) # Force refresh OAuth Token if ($RefreshToken.IsPresent) { $iPilotOAuthToken = $null } # Verbose Switch if($Verbose.IsPresent) { $PreviousVerbosePreference = $VerbosePreference $VerbosePreference = "continue" } #region Get OAuth Token $now = Get-Date if ($iPilotOAuthToken.OAuthTokenExpirationDateTime -ge ($now.ToUniversalTime()) -and $iPilotOAuthToken.Username -eq $Credential.UserName) { Write-Verbose "iPilot OAuth Token has not expired" return $iPilotOAuthToken } else { Write-Verbose "iPilot OAuth Token has expired or is not valid for $($Credential.UserName)" # Build request $iPilotAuthUri = "$ApiUrl/$ApiVersion/oauth2/authorize" $Username = $Credential.UserName $Password = $Credential.GetNetworkCredential().Password $GetiPilotAuthInvokeParams = @{ Uri = $iPilotAuthUri Method = "Post" ContentType = "application/x-www-form-urlencoded" Headers = @{ "x-api-key" = $ApiKey } Body = "username=$Username&password=$Password" } # Make REST call to get OAuth Token Try { $global:iPilotOAuthToken = Invoke-RestMethod @GetiPilotAuthInvokeParams -ErrorAction Stop Write-Verbose "$global:iPilotOAuthToken" } Catch { Write-Error "Failed to authenticate $($Credential.UserName). Error: $($_)." break } # Verify OAuth Token has expiration date if (!($iPilotOAuthToken.expires_at)) { throw "Failed to get OAuth Token from $iPilotAuthUri using $($Credential.UserName)" } # Format Expiration Date & Time $iPilotOAuthTokenExpirationDateTime = (Get-Date 1970/1/1).AddSeconds($iPilotOAuthToken.expires_at) # Append formatted expiration date $iPilotOAuthToken | Add-Member -MemberType NoteProperty -Name OAuthTokenExpirationDateTime -Value $iPilotOAuthTokenExpirationDateTime # Append username $iPilotOAuthToken | Add-Member -MemberType NoteProperty -Name Username -Value $Credential.UserName # Verbose Switch if($Verbose.IsPresent) { $VerbosePreference = $PreviousVerbosePreference } # Return token return $iPilotOAuthToken } } |