UNPKG

passport-fast-jwt

Version:

Passport authentication strategy for JSON Web Tokens using Fast-Jwt with support for EdDSA algorithm among others

71 lines (70 loc) 2.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fromExtractors = exports.fromAuthHeaderAsBearerToken = exports.fromQueryParam = exports.fromBodyField = exports.fromHeader = exports.fromAuthHeaderWithScheme = void 0; const isDefined_1 = require("./helpers/isDefined"); const parseAuthHeader_1 = require("./helpers/parseAuthHeader"); const AUTH_HEADER = "authorization"; const BEARER_AUTH_SCHEME = "bearer"; const fromRequestProp = (property) => (paramName) => (request) => { const requestProp = request[property]; if (requestProp && paramName in requestProp) { return requestProp[paramName]; } return null; }; /** * Constructs a token extractor function with the given authentication scheme * and authentication header name. * * @param authScheme * @param authHeaderName * @returns */ const fromAuthHeaderWithScheme = (authHeaderName, authScheme) => (request) => { const authHeader = request.headers[authHeaderName]; if (authHeader) { const authParam = (0, parseAuthHeader_1.parseAuthHeader)(authHeader); if (authParam && authScheme.toLowerCase() === authParam.scheme.toLowerCase()) { return authParam.value; } } return null; }; exports.fromAuthHeaderWithScheme = fromAuthHeaderWithScheme; exports.fromHeader = fromRequestProp("headers"); exports.fromBodyField = fromRequestProp("body"); exports.fromQueryParam = fromRequestProp("query"); /** * A ready made token extractor for 'Authorization' header * with 'Bearer' scheme. This is shorthand for * * @example * fromAuthHeaderWithScheme('authorization', 'bearer') * * @returns Token extractor for bearer authorization scheme */ const fromAuthHeaderAsBearerToken = () => (0, exports.fromAuthHeaderWithScheme)(AUTH_HEADER, BEARER_AUTH_SCHEME); exports.fromAuthHeaderAsBearerToken = fromAuthHeaderAsBearerToken; /** * Takes in an array of valid extractors and returns an extractor that runs all the given extractors * against the request and tries to find a token. Returns the first token found. Extractors are * run in the order they are given in the array. * @param extractors An array of valid extractor functions * @returns token as string if some of the extractors finds a token, otherwise null * * @example * fromExtractors([ * fromAuthHeaderAsBearerToken(), * fromAuthHeaderWithScheme('x-authorization', 'bearer'), * fromBodyField('token') * ]) */ const fromExtractors = (extractors) => (request) => { const token = extractors.map((ext) => ext(request)).filter(isDefined_1.isDefined); if (!token.length) { return null; } return token[0]; }; exports.fromExtractors = fromExtractors;