webhookd/pkg/api/routes.go
Nicolas Carlier 6b3623f67a feat(api): refactore router
- Simplify router
- Single routes onfiguration file
- Improve HTTP logger
2021-07-11 13:09:44 +02:00

68 lines
1.6 KiB
Go

package api
import (
"github.com/ncarlier/webhookd/pkg/auth"
"github.com/ncarlier/webhookd/pkg/config"
"github.com/ncarlier/webhookd/pkg/logger"
"github.com/ncarlier/webhookd/pkg/middleware"
"github.com/ncarlier/webhookd/pkg/pubkey"
)
var commonMiddlewares = middleware.Middlewares{
middleware.Cors,
middleware.Logger,
middleware.Tracing(nextRequestID),
}
func buildMiddlewares(conf *config.Config) middleware.Middlewares {
var middlewares = commonMiddlewares
if conf.TLS {
middlewares = middlewares.UseAfter(middleware.HSTS)
}
// Load trust store...
trustStore, err := pubkey.NewTrustStore(conf.TrustStoreFile)
if err != nil {
logger.Warning.Printf("unable to load trust store (\"%s\"): %s\n", conf.TrustStoreFile, err)
}
if trustStore != nil {
middlewares = middlewares.UseAfter(middleware.HTTPSignature(trustStore))
}
// Load authenticator...
authenticator, err := auth.NewHtpasswdFromFile(conf.PasswdFile)
if err != nil {
logger.Debug.Printf("unable to load htpasswd file (\"%s\"): %s\n", conf.PasswdFile, err)
}
if authenticator != nil {
middlewares = middlewares.UseAfter(middleware.AuthN(authenticator))
}
return middlewares
}
func routes(conf *config.Config) Routes {
middlewares := buildMiddlewares(conf)
return Routes{
route(
"/",
index,
middlewares.UseBefore(middleware.Methods("GET", "POST"))...,
),
route(
"/static/",
static("/static/"),
middlewares.UseBefore(middleware.Methods("GET"))...,
),
route(
"/healthz",
healthz,
commonMiddlewares.UseBefore(middleware.Methods("GET"))...,
),
route(
"/varz",
varz,
middlewares.UseBefore(middleware.Methods("GET"))...,
),
}
}