Scripts/azure-sign.ps1

param(
    [Parameter(Mandatory)]
    [string]$ProfilePath,

    [Parameter(Mandatory)]
    [string[]]$Files
)

$signingProfile = Get-Content $ProfilePath | ConvertFrom-Json

if ($signingProfile.type -ne 'azure') {
    throw "Profile is not an Azure signing profile"
}

$secureSecret = Get-Content "$($ProfilePath -replace '\.json$')-kvs" | ConvertTo-SecureString

. $PSScriptRoot\common.ps1
$clientSecret = Convert-SecureStringToPlainText -SecureString $secureSecret

$signCommand = @(
    "sign",
    "--azure-key-vault-url", $signingProfile.keyVaultUrl,
    "--azure-key-vault-certificate", $signingProfile.certificateName,
    "--azure-key-vault-tenant-id", $signingProfile.tenantId,
    "--azure-key-vault-client-id", $signingProfile.clientId,
    "--azure-key-vault-client-secret", $clientSecret
)

# Add additional parameters if specified
if ($signingProfile.PSObject.Properties.Name -contains "additionalParams" -and -not [string]::IsNullOrWhiteSpace($signingProfile.additionalParams)) {
    Write-Output "Using additional parameters: $($signingProfile.additionalParams)"
    $additionalParamsArray = $signingProfile.additionalParams -split ' '
    $signCommand += $additionalParamsArray
}

# Add the file to sign
$fileString = $Files -join ' '
$signCommand += $fileString

$command = "& `"$($signingProfile.signToolPath)`" $signCommand"
Invoke-Expression $command

if ($LASTEXITCODE -ne 0) {
    Write-Error "Failed to sign file: $file"
}
else {
    Write-Output "Successfully signed file: $file"
}