Plugins/DuckDNS.ps1
function Get-CurrentPluginType { 'dns-01' } function Add-DnsTxt { [CmdletBinding(DefaultParameterSetName='Secure')] param( [Parameter(Mandatory,Position=0)] [string]$RecordName, [Parameter(Mandatory,Position=1)] [string]$TxtValue, [Parameter(ParameterSetName='Secure',Mandatory,Position=2)] [securestring]$DuckToken, [Parameter(ParameterSetName='DeprecatedInsecure',Mandatory,Position=2)] [string]$DuckTokenInsecure, [Parameter(Mandatory,Position=3)] [string[]]$DuckDomain, [Parameter(ValueFromRemainingArguments)] $ExtraParams ) # get the plaintext version of the token if ('Secure' -eq $PSCmdlet.ParameterSetName) { $DuckTokenInsecure = [pscredential]::new('a',$DuckToken).GetNetworkCredential().Password } Write-Verbose "Adding TXT $TxtValue on DuckDNS for $($DuckDomain -join ',')" $domains = $DuckDomain -join ',' $uri = "https://www.duckdns.org/update?domains=$domains&token=$DuckTokenInsecure&txt=$TxtValue" try { $response = Invoke-RestMethod $uri @script:UseBasic -EA Stop } catch { throw } if ($response -ne 'OK') { throw "Failed to add DuckDNS TXT record." } <# .SYNOPSIS Add a DNS TXT record to DuckDNS .DESCRIPTION Add a DNS TXT record to DuckDNS .PARAMETER RecordName The fully qualified name of the TXT record. .PARAMETER TxtValue The value of the TXT record. .PARAMETER DuckToken The API token for DuckDNS. .PARAMETER DuckTokenInsecure (DEPRECATED) The API token for DuckDNS. .PARAMETER DuckDomains The list of domains associated with this token to update. Domains do not need to include the .duckdns.org part, just the subname. .PARAMETER ExtraParams This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports. .EXAMPLE $token = Read-Host 'Token' -AsSecureString Add-DnsTxt '_acme-challenge.mydomain.duckdns.org' 'txt-value' $token 'mydomain' Adds a TXT record for the specified site with the specified value. #> } function Remove-DnsTxt { [CmdletBinding(DefaultParameterSetName='Secure')] param( [Parameter(Mandatory,Position=0)] [string]$RecordName, [Parameter(Mandatory,Position=1)] [string]$TxtValue, [Parameter(ParameterSetName='Secure',Mandatory,Position=2)] [securestring]$DuckToken, [Parameter(ParameterSetName='DeprecatedInsecure',Mandatory,Position=2)] [string]$DuckTokenInsecure, [Parameter(Mandatory,Position=3)] [string[]]$DuckDomain, [Parameter(ValueFromRemainingArguments)] $ExtraParams ) # get the plaintext version of the token if ('Secure' -eq $PSCmdlet.ParameterSetName) { $DuckTokenInsecure = [pscredential]::new('a',$DuckToken).GetNetworkCredential().Password } Write-Verbose "Clearing TXT on DuckDNS for $($DuckDomain -join ',')" $domains = $DuckDomain -join ',' $uri = "https://www.duckdns.org/update?domains=$domains&token=$DuckTokenInsecure&txt=$TxtValue&clear=true" try { $response = Invoke-RestMethod $uri @script:UseBasic -EA Stop } catch { throw } if ($response -ne 'OK') { throw "Failed to clear DuckDNS TXT record." } <# .SYNOPSIS Remove a DNS TXT record from DuckDNS .DESCRIPTION Remove a DNS TXT record from DuckDNS .PARAMETER RecordName The fully qualified name of the TXT record. .PARAMETER TxtValue The value of the TXT record. .PARAMETER DuckToken The API token for DuckDNS. .PARAMETER DuckTokenInsecure (DEPRECATED) The API token for DuckDNS. .PARAMETER DuckDomains The list of domains associated with this token to update. Domains do not need to include the .duckdns.org part, just the subname. .PARAMETER ExtraParams This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports. .EXAMPLE $token = Read-Host 'Token' -AsSecureString Remove-DnsTxt '_acme-challenge.mydomain.duckdns.org' 'txt-value' $token 'mydomain' Removes a TXT record for the specified site with the specified value. #> } function Save-DnsTxt { [CmdletBinding()] param( [Parameter(ValueFromRemainingArguments)] $ExtraParams ) <# .SYNOPSIS Not required. .DESCRIPTION This provider does not require calling this function to commit changes to DNS records. .PARAMETER ExtraParams This parameter can be ignored and is only used to prevent errors when splatting with more parameters than this function supports. #> } |