ps/Modules/Alkami.DevOps.TeamCity/Public/Get-AuthHeader.ps1
2023-05-30 22:51:22 -07:00

69 lines
2.2 KiB
PowerShell

function Get-AuthHeader {
<#
.SYNOPSIS
Returns an HTTP Authentication/Authorization Header
.PARAMETER ApiUserUsername
TeamCity User Username to use for building a Basic Auth HTTP Header
.PARAMETER ApiUserPassword
TeamCity User Password to use for building a Basic Auth HTTP Header
.PARAMETER BearerToken
A Bearer Token to use for building a Bearer Token Auth HTTP Header
.PARAMETER GetBearerToken
Call Get-BearerToken function
.PARAMETER TokenFilePath
Path(optional) to file containing the bearer token to use when calling Get-BearerToken
#>
[CmdletBinding()]
[OutputType([string])]
param(
[Parameter(Mandatory = $false)]
[string]$ApiUserUsername = $null,
[Parameter(Mandatory = $false)]
[string]$ApiUserPassword = $null,
[Parameter(Mandatory = $false)]
[string]$BearerToken = $null,
[Parameter(Mandatory = $false)]
[switch]$GetBearerToken,
[Parameter(Mandatory = $false)]
[Alias("Path")]
[string]$TokenFilePath = $null
)
$logLead = Get-LogLeadName
$authHeaderPatternBearer = "Bearer {0}"
if ($GetBearerToken) {
Write-Host "$logLead : Getting token"
$splat = @{}
if ($null -ne $TokenFilePath) {
Write-Host "$logLead : Passing user supplied path - $TokenFilePath"
$splat.TokenFilePath = $TokenFilePath
}
$gotBearerToken = Get-BearerToken @splat
$authHeaderValue = ($authHeaderPatternBearer -f $gotBearerToken)
} elseif ([string]::IsNullOrEmpty($ApiUserUsername) -or [string]::IsNullOrEmpty($ApiUserPassword)) {
Write-Host "$logLead : Using supplied token"
$authHeaderValue = ($authHeaderPatternBearer -f $BearerToken)
} else {
Write-Host "$logLead : Using auth pair"
$authorizationPair = "$($apiUserUsername):$($apiUserPassword)"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($authorizationPair))
$authHeaderValue = "Basic $encodedCredentials"
}
$headers = @{
Authorization = $authHeaderValue
Accept = "application/json"
}
Write-Host "$logLead : Header creation complete"
return $headers
}