Private/Receive-CheckIDPasswordAgentRequests.ps1

function Receive-CheckIDPasswordAgentRequests {
    [CmdletBinding()]

    Param()

    Process {
        if (!$Script:Hostname) {
            Write-Error -Message "Hostname is not set. Please run Connect-CheckIDPasswordAgent first."
            return
        }

        try {
            $Request = Invoke-RestMethod -Uri "https://$($Script:Hostname)/checkid/beta/password-request/agent/$($Script:AgentID)" -Headers (Get-EntraIDAccessTokenHeader)

            if ($Request.data) {
                $Request.data | ForEach-Object {
                    $item = $_

                    Write-EventLog -LogName "Application" -Source "CheckIDPasswordAgent" -EventId 1104 -EntryType Information -Message "Received request for user $($item.userPrincipalName) with ID $($item.id) - decrypting password" -ErrorAction Continue
                    Write-Verbose "Received request for user $($item.userPrincipalName) with ID $($item.id) - decrypting password"
                    $encryptedBytes = [Convert]::FromBase64String($item.password)
                    $decryptedBytes = $Script:Certificate.Decrypt($encryptedBytes, [System.Security.Cryptography.RSAEncryptionPadding]::Pkcs1)
                    $decryptedMessage = [System.Text.Encoding]::UTF8.GetString($decryptedBytes)

                    if ([string]::IsNullOrEmpty($item.id)) {
                        Write-Warning "Received request with empty ID"
                        Write-EventLog -LogName "Application" -Source "CheckIDPasswordAgent" -EventId 1202 -EntryType Warning -Message "Received request with empty ID" -ErrorAction Continue
                        
                    }
                    else {
                        @{
                            id                           = $item.id
                            clientConnectionId           = $item.clientConnectionId
                            userPrincipalName            = $item.userPrincipalName
                            onPremisesSecurityIdentifier = $item.onPremisesSecurityIdentifier
                            password                     = $decryptedMessage
                        }
                    }
                }
            }
            else {
                Write-Verbose "No requests found for agent $($Script:AgentID)"
            }
        }
        catch {
            Write-EventLog -LogName "Application" -Source "CheckIDPasswordAgent" -EventId 1200 -EntryType Error -Message "Failed to receive requests: $_" -ErrorAction Continue
            Write-Error -Message "Failed to receive requests: $_"
        }
    }
}