Files
UnifiCLI/Private/Invoke-UnifiRequest.ps1

59 lines
1.6 KiB
PowerShell

function Invoke-UnifiRequest {
[CmdletBinding()]
param(
[ValidateSet('GET', 'POST', 'PUT', 'DELETE')]
[string]$Method = 'GET',
# For site-scoped endpoints pass just the path after /api/s/{site}, e.g. '/rest/wlanconf'
# For global endpoints pass the full path, e.g. '/api/self/sites'
[Parameter(Mandatory)]
[string]$Endpoint,
[string]$Site,
[object]$Body
)
if (-not $script:UnifiSession -or -not $script:UnifiConfig) {
throw "Not connected. Run Connect-UnifiController first."
}
$baseUrl = $script:UnifiConfig.ControllerUrl
$uri = if ($Site) {
"$baseUrl/api/s/$Site$Endpoint"
} else {
"$baseUrl$Endpoint"
}
$params = @{
Method = $Method
Uri = $uri
WebSession = $script:UnifiSession
}
if ($script:UnifiConfig.SkipCertificateCheck) {
$params.SkipCertificateCheck = $true
}
if ($Method -ne 'GET' -and $script:UnifiConfig.CsrfToken) {
$params.Headers = @{ 'X-Csrf-Token' = $script:UnifiConfig.CsrfToken }
}
if ($Body) {
$params.Body = ($Body | ConvertTo-Json -Depth 10 -Compress)
$params.ContentType = 'application/json'
}
try {
Invoke-RestMethod @params
}
catch [Microsoft.PowerShell.Commands.HttpResponseException] {
$code = $_.Exception.Response.StatusCode.value__
if ($code -eq 401) {
throw "Session expired or unauthorized. Run Connect-UnifiController to re-authenticate."
}
throw "HTTP $code`: $_"
}
}