UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

43 lines (41 loc) 1.21 kB
import { useEnv } from "@directus/env"; import { InvalidPayloadError } from "@directus/errors"; //#region src/middleware/extract-token.ts /** * Extract access token from * * - 'access_token' query parameter * - 'Authorization' header * - Session cookie * * and store it under req.token */ const extractToken = (req, _res, next) => { const env = useEnv(); let token = null; let tokenSource = null; if (req.query && req.query["access_token"]) { token = req.query["access_token"]; tokenSource = "query"; } if (req.headers && req.headers.authorization) { const parts = req.headers.authorization.split(" "); if (parts.length === 2 && parts[0].toLowerCase() === "bearer") { if (token !== null) throw new InvalidPayloadError({ reason: "The request uses more than one method for including an access token" }); token = parts[1]; tokenSource = "header"; } } if (req.cookies && req.cookies[env["SESSION_COOKIE_NAME"]]) { if (token === null) { token = req.cookies[env["SESSION_COOKIE_NAME"]]; tokenSource = "cookie"; } } req.token = token; req.tokenSource = tokenSource; next(); }; var extract_token_default = extractToken; //#endregion export { extract_token_default as default };