feat(spot): added missing prefix support to the auth middleware

This commit is contained in:
Alexander 2025-03-10 15:12:19 +01:00
parent b8511b6be1
commit 4b9be69719
4 changed files with 14 additions and 11 deletions

View file

@ -28,7 +28,8 @@ func main() {
}
defer pgConn.Close()
builder, err := spot.NewServiceBuilder(log, cfg, webMetrics, pgConn)
prefix := api.NoPrefix
builder, err := spot.NewServiceBuilder(log, cfg, webMetrics, pgConn, prefix)
if err != nil {
log.Fatal(ctx, "can't init services: %s", err)
}
@ -37,7 +38,7 @@ func main() {
if err != nil {
log.Fatal(ctx, "failed while creating router: %s", err)
}
router.AddHandlers(api.NoPrefix, builder.SpotsAPI)
router.AddHandlers(prefix, builder.SpotsAPI)
router.AddMiddlewares(builder.Auth.Middleware, builder.RateLimiter.Middleware, builder.AuditTrail.Middleware)
server.Run(ctx, log, &cfg.HTTP, router)

View file

@ -24,15 +24,17 @@ type authImpl struct {
spotSecret string
pgconn pool.Pool
keys keys.Keys
prefix string
}
func NewAuth(log logger.Logger, jwtSecret, jwtSpotSecret string, conn pool.Pool, keys keys.Keys) Auth {
func NewAuth(log logger.Logger, jwtSecret, jwtSpotSecret string, conn pool.Pool, keys keys.Keys, prefix string) Auth {
return &authImpl{
log: log,
secret: jwtSecret,
spotSecret: jwtSpotSecret,
pgconn: conn,
keys: keys,
prefix: prefix,
}
}

View file

@ -36,9 +36,9 @@ func (e *authImpl) isExtensionRequest(r *http.Request) bool {
if err != nil {
e.log.Error(r.Context(), "failed to get path template: %s", err)
} else {
if pathTemplate == "/v1/ping" ||
(pathTemplate == "/v1/spots" && r.Method == "POST") ||
(pathTemplate == "/v1/spots/{id}/uploaded" && r.Method == "POST") {
if pathTemplate == e.prefix+"/v1/ping" ||
(pathTemplate == e.prefix+"/v1/spots" && r.Method == "POST") ||
(pathTemplate == e.prefix+"/v1/spots/{id}/uploaded" && r.Method == "POST") {
return true
}
}
@ -53,9 +53,9 @@ func (e *authImpl) isSpotWithKeyRequest(r *http.Request) bool {
if err != nil {
return false
}
getSpotPrefix := "/v1/spots/{id}" // GET
addCommentPrefix := "/v1/spots/{id}/comment" // POST
getStatusPrefix := "/v1/spots/{id}/status" // GET
getSpotPrefix := e.prefix + "/v1/spots/{id}" // GET
addCommentPrefix := e.prefix + "/v1/spots/{id}/comment" // POST
getStatusPrefix := e.prefix + "/v1/spots/{id}/status" // GET
if (pathTemplate == getSpotPrefix && r.Method == "GET") ||
(pathTemplate == addCommentPrefix && r.Method == "POST") ||
(pathTemplate == getStatusPrefix && r.Method == "GET") {

View file

@ -26,7 +26,7 @@ type ServicesBuilder struct {
SpotsAPI api.Handlers
}
func NewServiceBuilder(log logger.Logger, cfg *spot.Config, webMetrics web.Web, pgconn pool.Pool) (*ServicesBuilder, error) {
func NewServiceBuilder(log logger.Logger, cfg *spot.Config, webMetrics web.Web, pgconn pool.Pool, prefix string) (*ServicesBuilder, error) {
objStore, err := store.NewStore(&cfg.ObjectsConfig)
if err != nil {
return nil, err
@ -45,7 +45,7 @@ func NewServiceBuilder(log logger.Logger, cfg *spot.Config, webMetrics web.Web,
return nil, err
}
return &ServicesBuilder{
Auth: auth.NewAuth(log, cfg.JWTSecret, cfg.JWTSpotSecret, pgconn, keys),
Auth: auth.NewAuth(log, cfg.JWTSecret, cfg.JWTSpotSecret, pgconn, keys, prefix),
RateLimiter: limiter.NewUserRateLimiter(10, 30, 1*time.Minute, 5*time.Minute),
AuditTrail: auditrail,
SpotsAPI: handlers,