Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork6
Go library to handle acme-dns client communication and persistent account storage.
License
nrdcg/goacmedns
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
A Go library to handleacme-dns client communication and persistent account storage.
You may also be interested in a Python equivalentpyacmedns.
Once you haveinstalled Go 1.21+ you can installgoacmedns
withgo install
:
go install github.com/nrdcg/goacmedns/cmd/goacmedns@latest
The following is a short example of using the library to update a TXT record served by anacme-dns
instance.
package mainimport ("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)}}
When usinggoacmedns
with an ACME client hookit may be desirable to do the initial ACME-DNS account creation and CNAME delegation ahead of time.
Thegoacmedns
command line utility provides an easy way to do this:
go install github.com/nrdcg/goacmedns/cmd/goacmedns@latestgoacmedns -api http://10.0.0.1:4443 -domain example.com -allowFrom 192.168.100.1/24,1.2.3.4/32,2002:c0a8:2a00::0/40 -storage /tmp/example.storage.json
This will register an account forexample.com
that is only usable from the specified CIDR-allowFrom
networks with the ACME-DNS server athttp://10.0.0.1:4443
,saving the account details in/tmp/example.storage.json
and printing the required CNAME record for theexample.com
DNS zone to stdout.
About
Go library to handle acme-dns client communication and persistent account storage.
Topics
Resources
License
Code of conduct
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors3
Uh oh!
There was an error while loading.Please reload this page.