70 lines
2.0 KiB
Go
70 lines
2.0 KiB
Go
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
|
|
}
|