74 lines
2.0 KiB
Go
74 lines
2.0 KiB
Go
package websvc
|
|
|
|
import (
|
|
"log/slog"
|
|
"net/http"
|
|
|
|
"github.com/AdguardTeam/golibs/netutil/httputil"
|
|
)
|
|
|
|
// Path pattern constants.
|
|
const (
|
|
PathPatternFrontend = "/"
|
|
PathPatternHealthCheck = "/health-check"
|
|
PathPatternV1SettingsAll = "/api/v1/settings/all"
|
|
PathPatternV1SettingsDNS = "/api/v1/settings/dns"
|
|
PathPatternV1SettingsHTTP = "/api/v1/settings/http"
|
|
PathPatternV1SystemInfo = "/api/v1/system/info"
|
|
)
|
|
|
|
// Route pattern constants.
|
|
const (
|
|
routePatternFrontend = http.MethodGet + " " + PathPatternFrontend
|
|
routePatternGetV1SettingsAll = http.MethodGet + " " + PathPatternV1SettingsAll
|
|
routePatternGetV1SystemInfo = http.MethodGet + " " + PathPatternV1SystemInfo
|
|
routePatternHealthCheck = http.MethodGet + " " + PathPatternHealthCheck
|
|
routePatternPatchV1SettingsDNS = http.MethodPatch + " " + PathPatternV1SettingsDNS
|
|
routePatternPatchV1SettingsHTTP = http.MethodPatch + " " + PathPatternV1SettingsHTTP
|
|
)
|
|
|
|
// route registers all necessary handlers in mux.
|
|
func (svc *Service) route(mux *http.ServeMux) {
|
|
routes := []struct {
|
|
handler http.Handler
|
|
pattern string
|
|
isJSON bool
|
|
}{{
|
|
handler: httputil.HealthCheckHandler,
|
|
pattern: routePatternHealthCheck,
|
|
isJSON: false,
|
|
}, {
|
|
handler: http.FileServer(http.FS(svc.frontend)),
|
|
pattern: routePatternFrontend,
|
|
isJSON: false,
|
|
}, {
|
|
handler: http.HandlerFunc(svc.handleGetSettingsAll),
|
|
pattern: routePatternGetV1SettingsAll,
|
|
isJSON: true,
|
|
}, {
|
|
handler: http.HandlerFunc(svc.handlePatchSettingsDNS),
|
|
pattern: routePatternPatchV1SettingsDNS,
|
|
isJSON: true,
|
|
}, {
|
|
handler: http.HandlerFunc(svc.handlePatchSettingsHTTP),
|
|
pattern: routePatternPatchV1SettingsHTTP,
|
|
isJSON: true,
|
|
}, {
|
|
handler: http.HandlerFunc(svc.handleGetV1SystemInfo),
|
|
pattern: routePatternGetV1SystemInfo,
|
|
isJSON: true,
|
|
}}
|
|
|
|
logMw := httputil.NewLogMiddleware(svc.logger, slog.LevelDebug)
|
|
for _, r := range routes {
|
|
var hdlr http.Handler
|
|
if r.isJSON {
|
|
hdlr = jsonMw(r.handler)
|
|
} else {
|
|
hdlr = r.handler
|
|
}
|
|
|
|
mux.Handle(r.pattern, logMw.Wrap(hdlr))
|
|
}
|
|
}
|