functions/configuration/handlers/_keyVaultSecretUriHandler.ps1

# <copyright file="_keyVaultSecretUriHandler.ps1" company="Endjin Limited">
# Copyright (c) Endjin Limited. All rights reserved.
# </copyright>

<#
.SYNOPSIS
Implements the handler for resolving Key Vault SecretUri references.

.DESCRIPTION
Implements the handler for resolving Key Vault SecretUri references.

.PARAMETER ValueToResolve
The Key Vault Secret URI to be resolved.

#>

function _keyVaultSecretUriHandler {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true, Position=0)]
        $ValueToResolve
    )

    # Check whether we have a valid AzPowerShell connection
    _EnsureAzureConnection -AzPowerShell -ErrorAction Stop | Out-Null

    if ($ValueToResolve -notmatch "\?api-version=") {
        $ValueToResolve = "$($ValueToResolve)?api-version=7.3"
    }
    $res = Invoke-AzRestMethod -Uri $ValueToResolve
    if ($res.StatusCode -eq 200) {
        $res.Content |
            ConvertFrom-Json | 
            Select-Object -ExpandProperty value |
            ConvertTo-SecureString -AsPlainText
    }
    else {
        throw "Unable to resolve Key Vault secret: $($res.Content)"
    }
}

# Register this handler with _ResolveDeploymentConfigValues
$script:configHandlers += @{
    name = "KeyVaultSecretUri"
    matcher = "@Microsoft.KeyVault\(SecretUri=(?<valueToResolve>.*)\)"
    handler = "_keyVaultSecretUriHandler"
}