(params: {
logger: Logger;
context: ImpureGraphContext;
})
| 206 | }; |
| 207 | |
| 208 | export 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 | }; |
no test coverage detected