Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3398502 - Fix ACS PSTN Sip Configuration SDK tests #31991

Merged
merged 3 commits into from
Sep 8, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions sdk/communication/test-resources/test-resources-post.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

# This script is used to set up SIP Configuration domains for Azure Communication Services SIP Routing SDK GA tests

# It is invoked by the https://github.com/Azure/azure-sdk-for-python/blob/main/eng/New-TestResources.ps1
# script after the ARM template, defined in https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/storage/test-resources.json,
# is finished being deployed. The ARM template is responsible for creating the Storage accounts needed for live tests.

param (
[hashtable] $DeploymentOutputs,
[string] $TenantId,
[string] $TestApplicationId,
[string] $TestApplicationSecret
)

# By default stop for any error.
if (!$PSBoundParameters.ContainsKey('ErrorAction')) {
$ErrorActionPreference = 'Stop'
}

function Log($Message) {
Write-Host ('{0} - {1}' -f [DateTime]::Now.ToLongTimeString(), $Message)
}

Log 'Starting sdk\communication\test-resources\test-resources-post.ps1'

$communicationServiceEndpoint = $DeploymentOutputs["COMMUNICATION_SERVICE_ENDPOINT"]

if ($communicationServiceEndpoint -notmatch '\/$') {
Log "adding trailing slash to $communicationServiceEndpoint"
$communicationServiceEndpoint = $communicationServiceEndpoint + "/"
}

$communicationServiceApiKey = $DeploymentOutputs["COMMUNICATION_SERVICE_ACCESS_KEY"]
$testDomain = $DeploymentOutputs["AZURE_TEST_DOMAIN"]

$payload = @"
{"domains": { "$testDomain": {"enabled": true}},"trunks": null,"routes": null}
"@

$utcNow = [DateTimeOffset]::UtcNow.ToString('r', [cultureinfo]::InvariantCulture)
$contentBytes = [Text.Encoding]::UTF8.GetBytes($payload)
$sha256 = [System.Security.Cryptography.HashAlgorithm]::Create('sha256')
$contentHash = $sha256.ComputeHash($contentBytes)
$contentHashBase64String = [Convert]::ToBase64String($contentHash)
$endpointParsedUri = [System.Uri]$communicationServiceEndpoint
$hostAndPort = $endpointParsedUri.Host
$apiVersion = "2023-04-01-preview"
$urlPathAndQuery = $communicationServiceEndpoint + "sip?api-version=$apiVersion"
$stringToSign = "PATCH`n/sip?api-version=$apiVersion`n$utcNow;$hostAndPort;$contentHashBase64String"
/* cspell:disable */
$hasher = New-Object System.Security.Cryptography.HMACSHA256
/* cspell:enable */
$hasher.key = [System.Convert]::FromBase64String($communicationServiceApiKey)
$signatureBytes = $hasher.ComputeHash([Text.Encoding]::ASCII.GetBytes($stringToSign))
$requestSignatureBase64String = [Convert]::ToBase64String($signatureBytes)
$authorizationValue = "HMAC-SHA256 SignedHeaders=date;host;x-ms-content-sha256&Signature=$requestSignatureBase64String"

$headers = @{
"Authorization" = $authorizationValue
"x-ms-content-sha256" = $contentHashBase64String
"Date" = $utcNow
"X-Forwarded-Host" = $hostAndPort
}

try {
Log "Inserting Domains in SipConfig for Communication Livetest Dynamic Resource..."
$response = Invoke-RestMethod -ContentType "application/merge-patch+json" -Uri $urlPathAndQuery -Method PATCH -Headers $headers -UseBasicParsing -Body $payload -Verbose | ConvertTo-Json
Log $response
Log "Inserted Domains in SipConfig for Communication Livetest Dynamic Resource"
}
catch {
Write-Host "Exception while invoking the SIP Config Patch:"
Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
Write-Host "StatusDescription:" $_.Exception.Response
Write-Host "Error Message:" $_.ErrorDetails.Message
}

Log 'Finishing sdk\communication\test-resources\test-resources-post.ps1'