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:
Ryan Malloy 2025-12-07 10:37:16 -07:00
parent b5fa007d6e
commit 0b0fb53c9c

View File

@ -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)
) )