Skip to content

Commit

Permalink
fix: respect caddyfile provider config (#50)
Browse files Browse the repository at this point in the history
Adds the new config properties
  • Loading branch information
aymanbagabas authored Jul 31, 2024
1 parent 2fb61f5 commit c006998
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 10 deletions.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ To use this module for the ACME DNS challenge, [configure the ACME issuer in you
"region": "us-east-1", // optional
"access_key_id": "AKI...", // optional
"secret_access_key": "wJa...", // optional
"session_token": "TOKEN..." // optional
"session_token": "TOKEN...", // optional
"max_wait_dur": 60, // propagation wait duration (optional)
"wait_for_propagation": false // wait for records to propagate (optional)
}
}
}
Expand All @@ -52,6 +54,8 @@ tls {
secret_access_key "wJa..." // optional
session_token "TOKEN..." // optional
region "us-east-1" // optional
max_wait_dur 60, // propagation wait duration (optional)
wait_for_propagation false // wait for records to propagate (optional)
}
}
```
Expand Down
54 changes: 45 additions & 9 deletions route53.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package route53

import (
"strconv"
"time"

"github.com/libdns/route53"

Expand Down Expand Up @@ -29,39 +30,67 @@ func (Provider) CaddyModule() caddy.ModuleInfo {
// Provision implements the Provisioner interface to initialize the AWS Client
func (p *Provider) Provision(ctx caddy.Context) error {
repl := caddy.NewReplacer()
p.Provider.Profile = repl.ReplaceAll(p.Provider.Profile, "")
p.Provider.AWSProfile = repl.ReplaceAll(p.Provider.AWSProfile, "")
p.Provider.AccessKeyId = repl.ReplaceAll(p.Provider.AccessKeyId, "")
p.Provider.SecretAccessKey = repl.ReplaceAll(p.Provider.SecretAccessKey, "")
p.Provider.Token = repl.ReplaceAll(p.Provider.Token, "")
p.Provider.SessionToken = repl.ReplaceAll(p.Provider.SessionToken, "")
p.Provider.Region = repl.ReplaceAll(p.Provider.Region, "")
return nil
}

// UnmarshalCaddyfile sets up the DNS provider from Caddyfile tokens. Syntax:
//
// route53 {
// max_retries <int>
// aws_profile <string>
// access_key_id <string>
// secret_access_key <string>
// token <string>
// region <string>
// }
//
// route53 {
// region <string>
// profile <string>
// access_key_id <string>
// secret_access_key <string>
// session_token <string>
// max_retries <int>
// max_wait_dur <int>
// wait_for_propagation <bool>
// }
func (p *Provider) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
for d.Next() {
if d.NextArg() {
return d.ArgErr()
}
for nesting := d.Nesting(); d.NextBlock(nesting); {
switch d.Val() {
case "wait_for_propagation":
if d.NextArg() {
if wait, err := strconv.ParseBool(d.Val()); err == nil {
p.Provider.WaitForPropagation = wait
}
}
if d.NextArg() {
return d.ArgErr()
}
case "max_wait_dur":
if d.NextArg() {
if dur, err := strconv.ParseInt(d.Val(), 10, 64); err == nil {
p.Provider.MaxWaitDur = time.Duration(dur)
}
}
if d.NextArg() {
return d.ArgErr()
}
case "max_retries":
if d.NextArg() {
p.Provider.MaxRetries, _ = strconv.Atoi(d.Val())
}
if d.NextArg() {
return d.ArgErr()
}
case "profile":
if d.NextArg() {
p.Provider.Profile = d.Val()
}
if d.NextArg() {
return d.ArgErr()
}
case "aws_profile":
if d.NextArg() {
p.Provider.AWSProfile = d.Val()
Expand All @@ -83,6 +112,13 @@ func (p *Provider) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
if d.NextArg() {
return d.ArgErr()
}
case "session_token":
if d.NextArg() {
p.Provider.SessionToken = d.Val()
}
if d.NextArg() {
return d.ArgErr()
}
case "token":
if d.NextArg() {
p.Provider.Token = d.Val()
Expand Down

0 comments on commit c006998

Please sign in to comment.