MCPcopy Create free account
hub / github.com/hashintel/hash / createAuthMiddleware

Function createAuthMiddleware

apps/hash-api/src/auth/create-auth-handlers.ts:208–257  ·  view source on GitHub ↗
(params: {
  logger: Logger;
  context: ImpureGraphContext;
})

Source from the content-addressed store, hash-verified

206};
207
208export const createAuthMiddleware = (params: {
209 logger: Logger;
210 context: ImpureGraphContext;
211}): RequestHandler => {
212 const { logger, context } = params;
213
214 return async (req, _res, next) => {
215 const authHeader = req.header("authorization");
216 const hasAuthHeader = authHeader?.startsWith("Bearer ") ?? false;
217
218 const accessOrSessionToken =
219 hasAuthHeader && typeof authHeader === "string"
220 ? authHeader.slice(7, authHeader.length)
221 : undefined;
222
223 /** Check if the Bearer token is a valid OAuth2 token */
224 if (accessOrSessionToken) {
225 const introspectionResult = await hydraAdmin.introspectOAuth2Token({
226 token: accessOrSessionToken,
227 });
228 if (introspectionResult.data.active && introspectionResult.data.sub) {
229 const user = await getUser(
230 context,
231 { actorId: publicUserAccountId },
232 {
233 kratosIdentityId: introspectionResult.data.sub,
234 },
235 );
236 if (user) {
237 req.user = user;
238 next();
239 return;
240 }
241 }
242 }
243
244 const { session, user } = await getUserAndSession({
245 context,
246 cookie: req.header("cookie"),
247 logger,
248 sessionToken: accessOrSessionToken,
249 });
250 if (session) {
251 req.session = session;
252 req.user = user;
253 }
254
255 next();
256 };
257};

Callers 1

mainFunction · 0.90

Calls 3

getUserFunction · 0.90
getUserAndSessionFunction · 0.85
nextFunction · 0.50

Tested by

no test coverage detected