package router import ( "os" "github.com/go-chi/chi/v5" "git.sendico.io/tech/sxchnge/bff/edge/shared/interface/api/sresponse" "git.sendico.io/tech/sxchnge/bff/edge/shared/interface/middleware" rauthorized "git.sendico.io/tech/sxchnge/bff/edge/shared/internal/transport/http/router/authorized" rpublic "git.sendico.io/tech/sxchnge/bff/edge/shared/internal/transport/http/router/public" "git.sendico.io/tech/sxchnge/bff/edge/shared/storage/ratelimits" "git.sendico.io/tech/sxchnge/bff/edge/shared/storage/refreshtokens" "git.sendico.io/tech/sxchnge/bff/edge/shared/storage/verification" api "git.sendico.io/tech/sxchnge/bff/pkg/api/http" "git.sendico.io/tech/sxchnge/bff/pkg/auth" "git.sendico.io/tech/sxchnge/bff/pkg/db/account" "git.sendico.io/tech/sxchnge/bff/pkg/mlogger" "git.sendico.io/tech/sxchnge/bff/pkg/mservice" ) type Dispatcher struct { logger mlogger.Logger public APIRouter protected ProtectedAPIRouter } func (d *Dispatcher) Handler(service mservice.Type, endpoint string, method api.HTTPMethod, handler sresponse.HandlerFunc) { d.public.InstallHandler(service, endpoint, method, handler) } func (d *Dispatcher) AccountHandler(service mservice.Type, endpoint string, method api.HTTPMethod, handler sresponse.AccountHandlerFunc) { d.protected.AccountHandler(service, endpoint, method, handler) } func (d *Dispatcher) PendingAccountHandler(service mservice.Type, endpoint string, method api.HTTPMethod, handler sresponse.PendingAccountHandlerFunc) { d.protected.PendingAccountHandler(service, endpoint, method, handler) } func NewDispatcher( logger mlogger.Logger, router chi.Router, db account.DB, vdb verification.DB, rtdb refreshtokens.DB, attempts ratelimits.Store, enforcer auth.Enforcer, config *middleware.Config, loginRateLimits middleware.LoginRateLimits, ) *Dispatcher { d := &Dispatcher{ logger: logger.Named("api_dispatcher"), } d.logger.Debug("Installing endpoints middleware...") endpoint := os.Getenv(config.EndPointEnv) signature := middleware.SignatureConf(config) router.Group(func(r chi.Router) { d.public = rpublic.NewRouter(d.logger, endpoint, db, vdb, rtdb, attempts, r, &config.Token, &signature, loginRateLimits) }) router.Group(func(r chi.Router) { d.protected = rauthorized.NewRouter(d.logger, endpoint, r, db, rtdb, enforcer, &config.Token, &signature) }) return d }