Skip to content

Commit 6a02999

Browse files
committed
caddytls: Add Caddyfile support for on-demand permission module (close #6260)
1 parent 9f97df2 commit 6a02999

File tree

3 files changed

+39
-8
lines changed

3 files changed

+39
-8
lines changed

caddyconfig/httpcaddyfile/options.go

+25
Original file line numberDiff line numberDiff line change
@@ -345,9 +345,34 @@ func parseOptOnDemand(d *caddyfile.Dispenser, _ any) (any, error) {
345345
if ond == nil {
346346
ond = new(caddytls.OnDemandConfig)
347347
}
348+
if ond.PermissionRaw != nil {
349+
return nil, d.Err("on-demand TLS permission module (or 'ask') already specified")
350+
}
348351
perm := caddytls.PermissionByHTTP{Endpoint: d.Val()}
349352
ond.PermissionRaw = caddyconfig.JSONModuleObject(perm, "module", "http", nil)
350353

354+
case "permission":
355+
if !d.NextArg() {
356+
return nil, d.ArgErr()
357+
}
358+
if ond == nil {
359+
ond = new(caddytls.OnDemandConfig)
360+
}
361+
if ond.PermissionRaw != nil {
362+
return nil, d.Err("on-demand TLS permission module (or 'ask') already specified")
363+
}
364+
modName := d.Val()
365+
modID := "tls.permission." + modName
366+
unm, err := caddyfile.UnmarshalModule(d, modID)
367+
if err != nil {
368+
return nil, err
369+
}
370+
perm, ok := unm.(caddytls.OnDemandPermission)
371+
if !ok {
372+
return nil, d.Errf("module %s (%T) is not an on-demand TLS permission module", modID, unm)
373+
}
374+
ond.PermissionRaw = caddyconfig.JSONModuleObject(perm, "module", modName, nil)
375+
351376
case "interval":
352377
if !d.NextArg() {
353378
return nil, d.ArgErr()

caddyconfig/httploader.go

+2-8
Original file line numberDiff line numberDiff line change
@@ -181,19 +181,13 @@ func (hl HTTPLoader) makeClient(ctx caddy.Context) (*http.Client, error) {
181181
if err != nil {
182182
return nil, fmt.Errorf("getting server identity credentials: %v", err)
183183
}
184-
if tlsConfig == nil {
185-
tlsConfig = new(tls.Config)
186-
}
187-
tlsConfig.Certificates = certs
184+
tlsConfig = &tls.Config{Certificates: certs}
188185
} else if hl.TLS.ClientCertificateFile != "" && hl.TLS.ClientCertificateKeyFile != "" {
189186
cert, err := tls.LoadX509KeyPair(hl.TLS.ClientCertificateFile, hl.TLS.ClientCertificateKeyFile)
190187
if err != nil {
191188
return nil, err
192189
}
193-
if tlsConfig == nil {
194-
tlsConfig = new(tls.Config)
195-
}
196-
tlsConfig.Certificates = []tls.Certificate{cert}
190+
tlsConfig = &tls.Config{Certificates: []tls.Certificate{cert}}
197191
}
198192

199193
// trusted server certs

modules/caddytls/ondemand.go

+12
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"go.uber.org/zap"
2929

3030
"github.com/caddyserver/caddy/v2"
31+
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
3132
)
3233

3334
func init() {
@@ -117,6 +118,17 @@ func (PermissionByHTTP) CaddyModule() caddy.ModuleInfo {
117118
}
118119
}
119120

121+
// UnmarshalCaddyfile implements caddyfile.Unmarshaler.
122+
func (p *PermissionByHTTP) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
123+
if !d.Next() {
124+
return nil
125+
}
126+
if !d.AllArgs(&p.Endpoint) {
127+
return d.ArgErr()
128+
}
129+
return nil
130+
}
131+
120132
func (p *PermissionByHTTP) Provision(ctx caddy.Context) error {
121133
p.logger = ctx.Logger()
122134
p.replacer = caddy.NewReplacer()

0 commit comments

Comments
 (0)