67 lines
2.3 KiB
Go
67 lines
2.3 KiB
Go
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
|
|
}
|