Private/Authentication/Acronis/Get-AcronisSession.ps1
function Get-AcronisSession { [CmdletBinding()] param( [Parameter()] [switch]$Force ) begin { try { if (!$script:AcronisCredentials -or $script:AcronisCredentials.Account -ne $Account) { $script:AcronisCredentials = Get-AcronisCredentials } } catch { Write-ModuleLog -Message "Failed to get Acronis credentials" -Level Error -Component 'AcronisSession' -ErrorRecord $_ throw } } process { $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession $ApiBase = "https://dk01-cloud.acronis.com" try { Write-ModuleLog -Message "Logging in as $($script:AcronisCredentials.Username)" -Level Verbose -Component 'AcronisSession' $loginBody = @{ username = $($script:AcronisCredentials.Username); password = $($script:AcronisCredentials.Password) } | ConvertTo-Json $loginJson = Invoke-WebJson -Method 'POST' -Uri "$ApiBase/api/1/login" -Session $session -Body $loginBody -Headers @{ 'X-Acronis-API' = '1'; 'X-Requested-With' = 'XMLHttpRequest' } if ($loginJson.redirect_auth_url) { Write-ModuleLog -Message "Following redirect: $($loginJson.redirect_auth_url)" -Level Verbose -Component 'AcronisSession' $null = Invoke-WebJson -Method 'GET' -Uri ("$ApiBase" + $loginJson.redirect_auth_url) -Session $session } $authorize = Invoke-WebJson -Method 'GET' -Uri "$ApiBase/bc/authorize:ui" -Session $session if ($authorize.redirect_auth_url) { Write-ModuleLog -Message "Following authorize redirect: $($authorize.redirect_auth_url)" -Level Verbose -Component 'AcronisSession' $null = Invoke-WebJson -Method 'GET' -Uri ("$ApiBase" + $authorize.redirect_auth_url) -Session $session } $sessCheck = Invoke-WebJson -Method 'GET' -Uri "$ApiBase/bc/api/gateway/session" -Session $session if (-not $sessCheck) { throw "Session check failed." } Write-ModuleLog -Message "Login and session established." -Level Info -Component 'AcronisSession' return $session } catch { Write-Log "Login failed: $($_.Exception.Message)" 'ERROR' throw } } } |