You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A Go library to handle acme-dns client communication and persistent account storage.
You may also be interested in a Python equivalent pyacmedns.
Installation
Once you have installed Go 1.21+ you can install goacmedns with go install:
go install github.com/nrdcg/goacmedns/cmd/goacmedns@latest
Usage
The following is a short example of using the library to update a TXT record served by an acme-dns instance.
package main
import (
"context""errors""log""github.com/nrdcg/goacmedns""github.com/nrdcg/goacmedns/storage"
)
const (
domain="your.example.org"
)
var (
whitelistedNetworks= []string{"192.168.11.0/24", "[::1]/128"}
)
funcmain() {
// Initialize the client. Point it towards your acme-dns instance.client, err:=goacmedns.NewClient("https://auth.acme-dns.io")
ctx:=context.Background()
// Initialize the storage.// If the file does not exist, it will be automatically created.st:=storage.NewFile("/tmp/storage.json", 0600)
// Check if credentials were previously saved for your domain.account, err:=st.Fetch(ctx, domain)
iferr!=nil {
if!errors.Is(err, storage.ErrDomainNotFound) {
log.Fatal(err)
}
// The account did not exist.// Let's create a new one The whitelisted networks parameter is optional and can be nil.newAcct, err:=client.RegisterAccount(ctx, whitelistedNetworks)
iferr!=nil {
log.Fatal(err)
}
// Save iterr=st.Put(ctx, domain, newAcct)
iferr!=nil {
log.Fatalf("Failed to put account in storage: %v", err)
}
err=st.Save(ctx)
iferr!=nil {
log.Fatalf("Failed to save storage: %v", err)
}
account=newAcct
}
// Update the acme-dns TXT record.err=client.UpdateTXTRecord(ctx, account, "___validation_token_recieved_from_the_ca___")
iferr!=nil {
log.Fatal(err)
}
}
Pre-Registration
When using goacmedns with an ACME client hook
it may be desirable to do the initial ACME-DNS account creation and CNAME delegation ahead of time.
The goacmedns command line utility provides an easy way to do this:
This will register an account for example.com that is only usable from the specified CIDR -allowFrom networks with the ACME-DNS server at https://10.0.0.1:4443,
saving the account details in /tmp/example.storage.json and printing the required CNAME record for the example.com DNS zone to stdout.
About
Go library to handle acme-dns client communication and persistent account storage.