MCPcopy Index your code
hub / github.com/NdoleStudio/httpsms / APIKeyAuth

Function APIKeyAuth

api/pkg/middlewares/api_key_auth_middleware.go:14–38  ·  view source on GitHub ↗

APIKeyAuth authenticates a user from the X-API-Key header

(logger telemetry.Logger, tracer telemetry.Tracer, userRepository repositories.UserRepository)

Source from the content-addressed store, hash-verified

12
13// APIKeyAuth authenticates a user from the X-API-Key header
14func APIKeyAuth(logger telemetry.Logger, tracer telemetry.Tracer, userRepository repositories.UserRepository) fiber.Handler {
15 logger = logger.WithService("middlewares.APIKeyAuth")
16
17 return func(c fiber.Ctx) error {
18 ctx, span := tracer.StartFromFiberCtx(c, "middlewares.APIKeyAuth")
19 defer span.End()
20
21 ctxLogger := tracer.CtxLogger(logger, span)
22
23 apiKey := getAPIKeyFromRequest(c)
24 if len(apiKey) == 0 || apiKey == "undefined" || strings.HasPrefix(apiKey, "pk_") {
25 span.AddEvent(fmt.Sprintf("the request header has no primary [%s] header", authHeaderAPIKey))
26 return c.Next()
27 }
28
29 authUser, err := userRepository.LoadAuthContext(ctx, apiKey)
30 if err != nil {
31 ctxLogger.Error(stacktrace.Propagate(err, fmt.Sprintf("cannot load user with api key [%s]", apiKey)))
32 return c.Next()
33 }
34
35 c.Locals(ContextKeyAuthUserID, authUser)
36 return c.Next()
37 }
38}
39
40func getAPIKeyFromRequest(c fiber.Ctx) string {
41 apiKey := c.Get(authHeaderAPIKey)

Callers

nothing calls this directly

Calls 6

getAPIKeyFromRequestFunction · 0.85
WithServiceMethod · 0.65
StartFromFiberCtxMethod · 0.65
CtxLoggerMethod · 0.65
LoadAuthContextMethod · 0.65
ErrorMethod · 0.65

Tested by

no test coverage detected