routes.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package api
  2. import (
  3. "log/slog"
  4. "github.com/ncarlier/webhookd/pkg/auth"
  5. "github.com/ncarlier/webhookd/pkg/config"
  6. "github.com/ncarlier/webhookd/pkg/middleware"
  7. "github.com/ncarlier/webhookd/pkg/truststore"
  8. )
  9. var commonMiddlewares = middleware.Middlewares{
  10. middleware.XFF,
  11. middleware.Cors,
  12. middleware.Logger,
  13. middleware.Tracing(nextRequestID),
  14. }
  15. func buildMiddlewares(conf *config.Config) middleware.Middlewares {
  16. var middlewares = commonMiddlewares
  17. if conf.TLS.Enabled {
  18. middlewares = middlewares.UseAfter(middleware.HSTS)
  19. }
  20. // Load trust store...
  21. ts, err := truststore.New(conf.TruststoreFile)
  22. if err != nil {
  23. slog.Warn("unable to load trust store", "filename", conf.TruststoreFile, "err", err)
  24. }
  25. if ts != nil {
  26. middlewares = middlewares.UseAfter(middleware.Signature(ts))
  27. }
  28. // Load authenticator...
  29. authenticator, err := auth.NewHtpasswdFromFile(conf.PasswdFile)
  30. if err != nil {
  31. slog.Debug("unable to load htpasswd file", "filename", conf.PasswdFile, "err", err)
  32. }
  33. if authenticator != nil {
  34. middlewares = middlewares.UseAfter(middleware.AuthN(authenticator))
  35. }
  36. return middlewares
  37. }
  38. func routes(conf *config.Config) Routes {
  39. middlewares := buildMiddlewares(conf)
  40. staticPath := conf.Static.Path + "/"
  41. return Routes{
  42. route(
  43. "/",
  44. index,
  45. middlewares...,
  46. ),
  47. route(
  48. staticPath,
  49. static(staticPath),
  50. middlewares.UseBefore(middleware.Methods("GET"))...,
  51. ),
  52. route(
  53. "/healthz",
  54. healthz,
  55. commonMiddlewares.UseBefore(middleware.Methods("GET"))...,
  56. ),
  57. route(
  58. "/varz",
  59. varz,
  60. middlewares.UseBefore(middleware.Methods("GET"))...,
  61. ),
  62. }
  63. }