parseACMEServer sets up an ACME server handler from Caddyfile tokens. acme_server [<matcher>] { ca <id> lifetime <duration> resolvers <addresses...> challenges <challenges...> allow_wildcard_names allow { domains <domains...> ip_ranges <addresses...> } deny { domai
(h httpcaddyfile.Helper)
| 43 | // sign_with_root |
| 44 | // } |
| 45 | func parseACMEServer(h httpcaddyfile.Helper) ([]httpcaddyfile.ConfigValue, error) { |
| 46 | h.Next() // consume directive name |
| 47 | matcherSet, err := h.ExtractMatcherSet() |
| 48 | if err != nil { |
| 49 | return nil, err |
| 50 | } |
| 51 | h.Next() // consume the directive name again (matcher parsing resets) |
| 52 | |
| 53 | // no inline args allowed |
| 54 | if h.NextArg() { |
| 55 | return nil, h.ArgErr() |
| 56 | } |
| 57 | |
| 58 | var acmeServer Handler |
| 59 | var ca *caddypki.CA |
| 60 | |
| 61 | for h.NextBlock(0) { |
| 62 | switch h.Val() { |
| 63 | case "ca": |
| 64 | if !h.AllArgs(&acmeServer.CA) { |
| 65 | return nil, h.ArgErr() |
| 66 | } |
| 67 | if ca == nil { |
| 68 | ca = new(caddypki.CA) |
| 69 | } |
| 70 | ca.ID = acmeServer.CA |
| 71 | case "lifetime": |
| 72 | if !h.NextArg() { |
| 73 | return nil, h.ArgErr() |
| 74 | } |
| 75 | dur, err := caddy.ParseDuration(h.Val()) |
| 76 | if err != nil { |
| 77 | return nil, err |
| 78 | } |
| 79 | acmeServer.Lifetime = caddy.Duration(dur) |
| 80 | case "resolvers": |
| 81 | acmeServer.Resolvers = h.RemainingArgs() |
| 82 | if len(acmeServer.Resolvers) == 0 { |
| 83 | return nil, h.Errf("must specify at least one resolver address") |
| 84 | } |
| 85 | case "challenges": |
| 86 | acmeServer.Challenges = append(acmeServer.Challenges, stringToChallenges(h.RemainingArgs())...) |
| 87 | case "allow_wildcard_names": |
| 88 | if acmeServer.Policy == nil { |
| 89 | acmeServer.Policy = &Policy{} |
| 90 | } |
| 91 | acmeServer.Policy.AllowWildcardNames = true |
| 92 | case "allow": |
| 93 | r := &RuleSet{} |
| 94 | for nesting := h.Nesting(); h.NextBlock(nesting); { |
| 95 | if h.CountRemainingArgs() == 0 { |
| 96 | return nil, h.ArgErr() // TODO: |
| 97 | } |
| 98 | switch h.Val() { |
| 99 | case "domains": |
| 100 | r.Domains = append(r.Domains, h.RemainingArgs()...) |
| 101 | case "ip_ranges": |
| 102 | r.IPRanges = append(r.IPRanges, h.RemainingArgs()...) |
nothing calls this directly
no test coverage detected