Add Caddyfile support for sip_guardian_admin HTTP handler
Register handler directive with httpcaddyfile and implement UnmarshalCaddyfile to enable Caddyfile configuration syntax.
This commit is contained in:
parent
b5fa007d6e
commit
0b0fb53c9c
32
admin.go
32
admin.go
@ -6,11 +6,21 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/caddyserver/caddy/v2"
|
"github.com/caddyserver/caddy/v2"
|
||||||
|
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
|
||||||
|
"github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile"
|
||||||
"github.com/caddyserver/caddy/v2/modules/caddyhttp"
|
"github.com/caddyserver/caddy/v2/modules/caddyhttp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
caddy.RegisterModule(AdminHandler{})
|
caddy.RegisterModule(AdminHandler{})
|
||||||
|
httpcaddyfile.RegisterHandlerDirective("sip_guardian_admin", parseSIPGuardianAdmin)
|
||||||
|
}
|
||||||
|
|
||||||
|
// parseSIPGuardianAdmin parses the sip_guardian_admin directive
|
||||||
|
func parseSIPGuardianAdmin(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) {
|
||||||
|
var handler AdminHandler
|
||||||
|
err := handler.UnmarshalCaddyfile(h.Dispenser)
|
||||||
|
return &handler, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// AdminHandler provides HTTP endpoints to manage SIP Guardian
|
// AdminHandler provides HTTP endpoints to manage SIP Guardian
|
||||||
@ -160,8 +170,30 @@ func (h *AdminHandler) handleBan(w http.ResponseWriter, r *http.Request, path st
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalCaddyfile implements caddyfile.Unmarshaler for AdminHandler.
|
||||||
|
// Usage in Caddyfile:
|
||||||
|
//
|
||||||
|
// handle /api/sip-guardian/* {
|
||||||
|
// sip_guardian_admin
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Or simply: sip_guardian_admin
|
||||||
|
func (h *AdminHandler) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
||||||
|
// Move past "sip_guardian_admin" token
|
||||||
|
d.Next()
|
||||||
|
|
||||||
|
// This handler doesn't have any configuration options currently
|
||||||
|
// but we need to consume any block if present
|
||||||
|
for nesting := d.Nesting(); d.NextBlock(nesting); {
|
||||||
|
return d.Errf("unknown sip_guardian_admin directive: %s", d.Val())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Interface guards
|
// Interface guards
|
||||||
var (
|
var (
|
||||||
_ caddyhttp.MiddlewareHandler = (*AdminHandler)(nil)
|
_ caddyhttp.MiddlewareHandler = (*AdminHandler)(nil)
|
||||||
_ caddy.Provisioner = (*AdminHandler)(nil)
|
_ caddy.Provisioner = (*AdminHandler)(nil)
|
||||||
|
_ caddyfile.Unmarshaler = (*AdminHandler)(nil)
|
||||||
)
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user