package public import ( "time" "git.sendico.io/tech/sxchnge/product/auth/config" re "git.sendico.io/tech/sxchnge/product/auth/http/endpoint" "git.sendico.io/tech/sxchnge/product/auth/response" "git.sendico.io/tech/sxchnge/product/customers/store" "git.sendico.io/tech/sxchnge/product/sessions/store" "git.sendico.io/tech/sxchnge/product/verification/store" api "git.sendico.io/tech/sxchnge/shared/http" "git.sendico.io/tech/sxchnge/shared/logging" "git.sendico.io/tech/sxchnge/shared/ratelimit/store" "git.sendico.io/tech/sxchnge/shared/service" "github.com/go-chi/chi/v5" ) type PublicRouter struct { logger mlogger.Logger db account.DB imp *re.HttpEndpointRouter rtdb refreshtokens.DB config middleware.TokenConfig signature middleware.Signature service mservice.Type attempts ratelimits.Store limits middleware.LoginRateLimits now func() time.Time } func (pr *PublicRouter) InstallHandler(service mservice.Type, endpoint string, method api.HTTPMethod, handler sresponse.HandlerFunc) { pr.imp.InstallHandler(service, endpoint, method, handler) } func NewRouter( logger mlogger.Logger, apiEndpoint string, db account.DB, vdb verification.DB, rtdb refreshtokens.DB, attempts ratelimits.Store, router chi.Router, config *middleware.TokenConfig, signature *middleware.Signature, limits middleware.LoginRateLimits, ) *PublicRouter { l := logger.Named("public") hr := PublicRouter{ logger: l, db: db, rtdb: rtdb, config: *config, signature: *signature, imp: re.NewHttpEndpointRouter(l, apiEndpoint, router, config, signature), service: mservice.Accounts, attempts: attempts, limits: limits, now: time.Now, } hr.InstallHandler(hr.service, "/login", api.Post, hr.login) hr.InstallHandler(hr.service, "/login/api", api.Post, hr.apiLogin) hr.InstallHandler(hr.service, "/rotate", api.Post, hr.rotateRefreshToken) hr.InstallHandler(hr.service, "/refresh", api.Post, hr.refreshAccessToken) hr.InstallHandler(hr.service, "/logout", api.Post, hr.logout) return &hr }