68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"git.secnex.io/secnex/api-gateway/config"
|
|
"git.secnex.io/secnex/masterlog"
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/go-chi/chi/v5/middleware"
|
|
)
|
|
|
|
type Gateway struct {
|
|
router *chi.Mux
|
|
config config.Config
|
|
routes *Routes
|
|
proxy *Proxy
|
|
}
|
|
|
|
func NewGateway(config config.Config) *Gateway {
|
|
r := chi.NewRouter()
|
|
|
|
for _, feature := range config.GetFeatures() {
|
|
switch feature {
|
|
case "request_id":
|
|
r.Use(middleware.RequestID)
|
|
case "real_ip":
|
|
r.Use(middleware.RealIP)
|
|
case "logger":
|
|
r.Use(middleware.Logger)
|
|
}
|
|
}
|
|
|
|
r.Route("/_/health", func(r chi.Router) {
|
|
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Write([]byte("OK"))
|
|
})
|
|
})
|
|
|
|
return &Gateway{config: config, router: r, routes: nil, proxy: nil}
|
|
}
|
|
|
|
func (g *Gateway) SetRoutes(routes *Routes) {
|
|
g.routes = routes
|
|
}
|
|
|
|
func (g *Gateway) SetProxy(proxy *Proxy) {
|
|
g.proxy = proxy
|
|
}
|
|
|
|
func (g *Gateway) Start() {
|
|
masterlog.Info("Starting gateway", map[string]interface{}{
|
|
"host": g.config.GetGatewayConfiguration().Host,
|
|
"port": g.config.GetGatewayConfiguration().Port,
|
|
})
|
|
for path, handler := range g.routes.handlers {
|
|
masterlog.Info("Registering route", map[string]interface{}{
|
|
"path": path,
|
|
})
|
|
g.router.Handle(path, handler)
|
|
}
|
|
|
|
gatewayConfig := g.config.GetGatewayConfiguration()
|
|
|
|
http.ListenAndServe(fmt.Sprintf("%s:%d", gatewayConfig.Host, gatewayConfig.Port), g.router)
|
|
}
|