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
JavaScript
;
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;