DnsPlugins/Zonomi.ps1

function Add-DnsTxtZonomi {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory,Position=0)]
        [string]$RecordName,
        [Parameter(Mandatory,Position=1)]
        [string]$TxtValue,
        [Parameter(Mandatory,Position=2)]
        [string]$ZonomiApiKey,
        [Parameter(ValueFromRemainingArguments)]
        $ExtraParams
    )

    $ApiUri = "https://zonomi.com/app/dns/dyndns.jsp"
    $AuthHeader = @{"Authorization" = "redrata apikey=$ZonomiApiKey"}

    # Query existing TXT records
    $ApiParams = @{
        "action" = "QUERY";
        "name" = $RecordName;
        "type" = "TXT"
    }
    try {
        [xml]$XmlData = (Invoke-WebRequest $ApiUri -Headers $AuthHeader -Body $ApiParams `
            @script:UseBasic).Content
    } catch { throw }


    # Add any existing TXT records to the API command
    $ApiParams.Clear()
    $XmlData.SelectNodes("//record/@content") | % {$i=1} {
        $ApiParams.Add("action[$i]", "SET")
        $ApiParams.Add("name[$i]", $RecordName)
        $ApiParams.Add("value[$i]", $_.Value)
        $ApiParams.Add("type[$i]", "TXT")
        $i++
    }

    # Add the new TXT record to the API command
    $ApiParams.Add("action[$i]", "SET")
    $ApiParams.Add("name[$i]", $RecordName)
    $ApiParams.Add("value[$i]", $TxtValue)
    $ApiParams.Add("type[$i]", "TXT")

    # Run the API command
    Invoke-WebRequest $ApiUri -Headers $AuthHeader -Body $ApiParams @Script:UseBasic | Out-Null

    <#
    .SYNOPSIS
        Add a DNS TXT record to Zonomi
 
    .DESCRIPTION
        Uses the Zonomi DNS API (https://zonomi.com/app/dns/dyndns.jsp) to add a DNS TXT record
 
    .PARAMETER RecordName
        The fully qualified name of the TXT record.
 
    .PARAMETER TxtValue
        The value of the TXT record.
 
    .PARAMETER ZonomiApiKey
        Your Zonomi DNS API key.
 
    .PARAMETER ExtraParams
        This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports.
 
    .EXAMPLE
        Add-DnsTxtExample '_acme-challenge.site1.example.com' 'asdfqwer12345678' 'abcdefghijklmnopqrstuvwxyz'
 
        Adds a TXT record for the specified site with the specified value.
    #>

}


function Remove-DnsTxtZonomi {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory,Position=0)]
        [string]$RecordName,
        [Parameter(Mandatory,Position=1)]
        [string]$TxtValue,
        [Parameter(Mandatory,Position=2)]
        [string]$ZonomiApiKey,
        [Parameter(ValueFromRemainingArguments)]
        $ExtraParams
    )

    $ApiUri = "https://zonomi.com/app/dns/dyndns.jsp"
    $AuthHeader = @{"Authorization" = "redrata apikey=$ZonomiApiKey"}

    # Add the TXT record to the API command
    $ApiParams = @{
        "action" = "DELETE";
        "name" = $RecordName;
        "value" = $TxtValue;
        "type" = "TXT"
    }

    # Run the API command
    Invoke-WebRequest $ApiUri -Headers $AuthHeader -Body $ApiParams @Script:UseBasic | Out-Null

    <#
    .SYNOPSIS
        Remove a DNS TXT record from Zonomi
 
    .DESCRIPTION
        Uses the Zonomi DNS API (https://zonomi.com/app/dns/dyndns.jsp) to remove a DNS TXT record
 
    .PARAMETER RecordName
        The fully qualified name of the TXT record.
 
    .PARAMETER TxtValue
        The value of the TXT record.
 
    .PARAMETER ZonomiApiKey
        Your Zonomi DNS API key.
 
    .PARAMETER ExtraParams
        This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports.
 
    .EXAMPLE
        Remove-DnsTxtExample '_acme-challenge.site1.example.com' 'asdfqwer12345678' 'abcdefghijklmnopqrstuvwxyz'
 
        Removes a TXT record for the specified site with the specified value.
    #>

}

function Save-DnsTxtZonomi {
    [CmdletBinding()]
    param(
        [Parameter(ValueFromRemainingArguments)]
        $ExtraParams
    )

    # Nothing to do

    <#
    .SYNOPSIS
        Not required for Zonomi
 
    .DESCRIPTION
        Not required for Zonomi
 
    .PARAMETER ExtraParams
        This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports.
 
    .EXAMPLE
        Save-DnsTxtExample
 
        Commits changes for pending DNS TXT record modifications.
 
    #>

}