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

Function BearerAuth

api/pkg/middlewares/bearer_auth_middleware.go:16–51  ·  view source on GitHub ↗

BearerAuth authenticates a user based on the bearer token

(logger telemetry.Logger, tracer telemetry.Tracer, authClient *auth.Client)

Source from the content-addressed store, hash-verified

14
15// BearerAuth authenticates a user based on the bearer token
16func BearerAuth(logger telemetry.Logger, tracer telemetry.Tracer, authClient *auth.Client) fiber.Handler {
17 logger = logger.WithService("middlewares.BearerAuth")
18 return func(c fiber.Ctx) error {
19 _, span := tracer.StartFromFiberCtx(c, "middlewares.BearerAuth")
20 defer span.End()
21
22 authToken := c.Get(authHeaderBearer)
23 if !strings.HasPrefix(authToken, bearerScheme) {
24 span.AddEvent(fmt.Sprintf("The request header has no [%s] token", bearerScheme))
25 return c.Next()
26 }
27
28 if len(authToken) > len(bearerScheme)+1 {
29 authToken = authToken[len(bearerScheme)+1:]
30 }
31
32 ctxLogger := tracer.CtxLogger(logger, span)
33
34 token, err := authClient.VerifyIDToken(context.Background(), authToken)
35 if err != nil {
36 msg := fmt.Sprintf("invalid firebase id token [%s]", authToken)
37 ctxLogger.Warn(tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)))
38 return c.Next()
39 }
40
41 span.AddEvent(fmt.Sprintf("[%s] token is valid", bearerScheme))
42
43 authUser := entities.AuthContext{
44 Email: token.Claims["email"].(string),
45 ID: entities.UserID(token.Claims["user_id"].(string)),
46 }
47
48 c.Locals(ContextKeyAuthUserID, authUser)
49 return c.Next()
50 }
51}

Callers

nothing calls this directly

Calls 6

WithServiceMethod · 0.65
StartFromFiberCtxMethod · 0.65
GetMethod · 0.65
CtxLoggerMethod · 0.65
WarnMethod · 0.65
WrapErrorSpanMethod · 0.65

Tested by

no test coverage detected