From 0b0fb53c9cbf67836a837c5d9438d462a5c7b00c Mon Sep 17 00:00:00 2001 From: Ryan Malloy Date: Sun, 7 Dec 2025 10:37:16 -0700 Subject: [PATCH] Add Caddyfile support for sip_guardian_admin HTTP handler Register handler directive with httpcaddyfile and implement UnmarshalCaddyfile to enable Caddyfile configuration syntax. --- admin.go | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/admin.go b/admin.go index ccb5e4f..26325ff 100644 --- a/admin.go +++ b/admin.go @@ -6,11 +6,21 @@ import ( "strings" "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" ) func init() { 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 @@ -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 var ( _ caddyhttp.MiddlewareHandler = (*AdminHandler)(nil) _ caddy.Provisioner = (*AdminHandler)(nil) + _ caddyfile.Unmarshaler = (*AdminHandler)(nil) )