mirror of
https://github.com/ncarlier/webhookd.git
synced 2025-04-08 02:43:40 +00:00
63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"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.Middleware{
|
|
middleware.Cors,
|
|
middleware.Logger,
|
|
middleware.Tracing(nextRequestID),
|
|
}
|
|
|
|
// NewRouter creates router with declared routes
|
|
func NewRouter(conf *config.Config) *http.ServeMux {
|
|
router := http.NewServeMux()
|
|
|
|
var middlewares = commonMiddlewares
|
|
if conf.TLSListenAddr != "" {
|
|
middlewares = append(middlewares, middleware.HSTS)
|
|
}
|
|
|
|
// Load key store...
|
|
keystore, err := pubkey.NewTrustStore(conf.TrustStoreFile)
|
|
if err != nil {
|
|
logger.Warning.Printf("unable to load trust store (\"%s\"): %s\n", conf.TrustStoreFile, err)
|
|
}
|
|
if keystore != nil {
|
|
middlewares = append(middlewares, middleware.HTTPSignature(keystore))
|
|
}
|
|
|
|
// 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 = append(middlewares, middleware.AuthN(authenticator))
|
|
}
|
|
|
|
// Register HTTP routes...
|
|
for _, route := range routes {
|
|
handler := route.HandlerFunc(conf)
|
|
for _, mw := range route.Middlewares {
|
|
handler = mw(handler)
|
|
}
|
|
for _, mw := range middlewares {
|
|
if route.Path == "/healthz" && conf.SkipHealthzLog {
|
|
continue
|
|
}
|
|
handler = mw(handler)
|
|
}
|
|
router.Handle(route.Path, handler)
|
|
}
|
|
|
|
return router
|
|
}
|