.
This commit is contained in:
19
qwen/nodejs/node_modules/passport-jwt/lib/auth_header.js
generated
vendored
Normal file
19
qwen/nodejs/node_modules/passport-jwt/lib/auth_header.js
generated
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
'use strict';
|
||||
|
||||
var re = /(\S+)\s+(\S+)/;
|
||||
|
||||
|
||||
|
||||
function parseAuthHeader(hdrValue) {
|
||||
if (typeof hdrValue !== 'string') {
|
||||
return null;
|
||||
}
|
||||
var matches = hdrValue.match(re);
|
||||
return matches && { scheme: matches[1], value: matches[2] };
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = {
|
||||
parse: parseAuthHeader
|
||||
};
|
||||
134
qwen/nodejs/node_modules/passport-jwt/lib/extract_jwt.js
generated
vendored
Normal file
134
qwen/nodejs/node_modules/passport-jwt/lib/extract_jwt.js
generated
vendored
Normal file
@@ -0,0 +1,134 @@
|
||||
"use strict";
|
||||
|
||||
var url = require('url'),
|
||||
auth_hdr = require('./auth_header');
|
||||
|
||||
// Note: express http converts all headers
|
||||
// to lower case.
|
||||
var AUTH_HEADER = "authorization",
|
||||
LEGACY_AUTH_SCHEME = "JWT",
|
||||
BEARER_AUTH_SCHEME = 'bearer';
|
||||
|
||||
|
||||
var extractors = {};
|
||||
|
||||
|
||||
extractors.fromHeader = function (header_name) {
|
||||
return function (request) {
|
||||
var token = null;
|
||||
if (request.headers[header_name]) {
|
||||
token = request.headers[header_name];
|
||||
}
|
||||
return token;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
extractors.fromBodyField = function (field_name) {
|
||||
return function (request) {
|
||||
var token = null;
|
||||
if (request.body && Object.prototype.hasOwnProperty.call(request.body, field_name)) {
|
||||
token = request.body[field_name];
|
||||
}
|
||||
return token;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
extractors.fromUrlQueryParameter = function (param_name) {
|
||||
return function (request) {
|
||||
var token = null,
|
||||
parsed_url = url.parse(request.url, true);
|
||||
if (parsed_url.query && Object.prototype.hasOwnProperty.call(parsed_url.query, param_name)) {
|
||||
token = parsed_url.query[param_name];
|
||||
}
|
||||
return token;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
extractors.fromAuthHeaderWithScheme = function (auth_scheme) {
|
||||
var auth_scheme_lower = auth_scheme.toLowerCase();
|
||||
return function (request) {
|
||||
|
||||
var token = null;
|
||||
if (request.headers[AUTH_HEADER]) {
|
||||
var auth_params = auth_hdr.parse(request.headers[AUTH_HEADER]);
|
||||
if (auth_params && auth_scheme_lower === auth_params.scheme.toLowerCase()) {
|
||||
token = auth_params.value;
|
||||
}
|
||||
}
|
||||
return token;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
extractors.fromAuthHeaderAsBearerToken = function () {
|
||||
return extractors.fromAuthHeaderWithScheme(BEARER_AUTH_SCHEME);
|
||||
};
|
||||
|
||||
|
||||
extractors.fromExtractors = function(extractors) {
|
||||
if (!Array.isArray(extractors)) {
|
||||
throw new TypeError('extractors.fromExtractors expects an array')
|
||||
}
|
||||
|
||||
return function (request) {
|
||||
var token = null;
|
||||
var index = 0;
|
||||
while(!token && index < extractors.length) {
|
||||
token = extractors[index].call(this, request);
|
||||
index ++;
|
||||
}
|
||||
return token;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* This extractor mimics the behavior of the v1.*.* extraction logic.
|
||||
*
|
||||
* This extractor exists only to provide an easy transition from the v1.*.* API to the v2.0.0
|
||||
* API.
|
||||
*
|
||||
* This extractor first checks the auth header, if it doesn't find a token there then it checks the
|
||||
* specified body field and finally the url query parameters.
|
||||
*
|
||||
* @param options
|
||||
* authScheme: Expected scheme when JWT can be found in HTTP Authorize header. Default is JWT.
|
||||
* tokenBodyField: Field in request body containing token. Default is auth_token.
|
||||
* tokenQueryParameterName: Query parameter name containing the token. Default is auth_token.
|
||||
*/
|
||||
extractors.versionOneCompatibility = function (options) {
|
||||
var authScheme = options.authScheme || LEGACY_AUTH_SCHEME,
|
||||
bodyField = options.tokenBodyField || 'auth_token',
|
||||
queryParam = options.tokenQueryParameterName || 'auth_token';
|
||||
|
||||
return function (request) {
|
||||
var authHeaderExtractor = extractors.fromAuthHeaderWithScheme(authScheme);
|
||||
var token = authHeaderExtractor(request);
|
||||
|
||||
if (!token) {
|
||||
var bodyExtractor = extractors.fromBodyField(bodyField);
|
||||
token = bodyExtractor(request);
|
||||
}
|
||||
|
||||
if (!token) {
|
||||
var queryExtractor = extractors.fromUrlQueryParameter(queryParam);
|
||||
token = queryExtractor(request);
|
||||
}
|
||||
|
||||
return token;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Export the Jwt extraction functions
|
||||
*/
|
||||
module.exports = extractors;
|
||||
24
qwen/nodejs/node_modules/passport-jwt/lib/helpers/assign.js
generated
vendored
Normal file
24
qwen/nodejs/node_modules/passport-jwt/lib/helpers/assign.js
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
// note: This is a polyfill to Object.assign to support old nodejs versions (0.10 / 0.12) where
|
||||
// Object.assign doesn't exist.
|
||||
// Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
|
||||
module.exports = function(target, varArgs) {
|
||||
if (target == null) { // TypeError if undefined or null
|
||||
throw new TypeError('Cannot convert undefined or null to object');
|
||||
}
|
||||
|
||||
var to = Object(target);
|
||||
|
||||
for (var index = 1; index < arguments.length; index++) {
|
||||
var nextSource = arguments[index];
|
||||
|
||||
if (nextSource != null) { // Skip over if undefined or null
|
||||
for (var nextKey in nextSource) {
|
||||
// Avoid bugs when hasOwnProperty is shadowed
|
||||
if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
|
||||
to[nextKey] = nextSource[nextKey];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return to;
|
||||
};
|
||||
10
qwen/nodejs/node_modules/passport-jwt/lib/index.js
generated
vendored
Normal file
10
qwen/nodejs/node_modules/passport-jwt/lib/index.js
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
'use strict';
|
||||
|
||||
var Strategy = require('./strategy'),
|
||||
ExtractJwt = require('./extract_jwt.js');
|
||||
|
||||
|
||||
module.exports = {
|
||||
Strategy: Strategy,
|
||||
ExtractJwt : ExtractJwt
|
||||
};
|
||||
139
qwen/nodejs/node_modules/passport-jwt/lib/strategy.js
generated
vendored
Normal file
139
qwen/nodejs/node_modules/passport-jwt/lib/strategy.js
generated
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
var passport = require('passport-strategy')
|
||||
, auth_hdr = require('./auth_header')
|
||||
, util = require('util')
|
||||
, url = require('url')
|
||||
, assign = require('./helpers/assign.js');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Strategy constructor
|
||||
*
|
||||
* @param options
|
||||
* secretOrKey: String or buffer containing the secret or PEM-encoded public key. Required unless secretOrKeyProvider is provided.
|
||||
* secretOrKeyProvider: callback in the format secretOrKeyProvider(request, rawJwtToken, done)`,
|
||||
* which should call done with a secret or PEM-encoded public key
|
||||
* (asymmetric) for the given undecoded jwt token string and request
|
||||
* combination. done has the signature function done(err, secret).
|
||||
* REQUIRED unless `secretOrKey` is provided.
|
||||
* jwtFromRequest: (REQUIRED) Function that accepts a request as the only parameter and returns the either JWT as a string or null
|
||||
* issuer: If defined issuer will be verified against this value
|
||||
* audience: If defined audience will be verified against this value
|
||||
* algorithms: List of strings with the names of the allowed algorithms. For instance, ["HS256", "HS384"].
|
||||
* ignoreExpiration: if true do not validate the expiration of the token.
|
||||
* passReqToCallback: If true the verify callback will be called with args (request, jwt_payload, done_callback).
|
||||
* @param verify - Verify callback with args (jwt_payload, done_callback) if passReqToCallback is false,
|
||||
* (request, jwt_payload, done_callback) if true.
|
||||
*/
|
||||
function JwtStrategy(options, verify) {
|
||||
|
||||
passport.Strategy.call(this);
|
||||
this.name = 'jwt';
|
||||
|
||||
this._secretOrKeyProvider = options.secretOrKeyProvider;
|
||||
|
||||
if (options.secretOrKey) {
|
||||
if (this._secretOrKeyProvider) {
|
||||
throw new TypeError('JwtStrategy has been given both a secretOrKey and a secretOrKeyProvider');
|
||||
}
|
||||
this._secretOrKeyProvider = function (request, rawJwtToken, done) {
|
||||
done(null, options.secretOrKey)
|
||||
};
|
||||
}
|
||||
|
||||
if (!this._secretOrKeyProvider) {
|
||||
throw new TypeError('JwtStrategy requires a secret or key');
|
||||
}
|
||||
|
||||
this._verify = verify;
|
||||
if (!this._verify) {
|
||||
throw new TypeError('JwtStrategy requires a verify callback');
|
||||
}
|
||||
|
||||
this._jwtFromRequest = options.jwtFromRequest;
|
||||
if (!this._jwtFromRequest) {
|
||||
throw new TypeError('JwtStrategy requires a function to retrieve jwt from requests (see option jwtFromRequest)');
|
||||
}
|
||||
|
||||
this._passReqToCallback = options.passReqToCallback;
|
||||
var jsonWebTokenOptions = options.jsonWebTokenOptions || {};
|
||||
//for backwards compatibility, still allowing you to pass
|
||||
//audience / issuer / algorithms / ignoreExpiration
|
||||
//on the options.
|
||||
this._verifOpts = assign({}, jsonWebTokenOptions, {
|
||||
audience: options.audience,
|
||||
issuer: options.issuer,
|
||||
algorithms: options.algorithms,
|
||||
ignoreExpiration: !!options.ignoreExpiration
|
||||
});
|
||||
|
||||
}
|
||||
util.inherits(JwtStrategy, passport.Strategy);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Allow for injection of JWT Verifier.
|
||||
*
|
||||
* This improves testability by allowing tests to cleanly isolate failures in the JWT Verification
|
||||
* process from failures in the passport related mechanics of authentication.
|
||||
*
|
||||
* Note that this should only be replaced in tests.
|
||||
*/
|
||||
JwtStrategy.JwtVerifier = require('./verify_jwt');
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Authenticate request based on JWT obtained from header or post body
|
||||
*/
|
||||
JwtStrategy.prototype.authenticate = function(req, options) {
|
||||
var self = this;
|
||||
|
||||
var token = self._jwtFromRequest(req);
|
||||
|
||||
if (!token) {
|
||||
return self.fail(new Error("No auth token"));
|
||||
}
|
||||
|
||||
this._secretOrKeyProvider(req, token, function(secretOrKeyError, secretOrKey) {
|
||||
if (secretOrKeyError) {
|
||||
self.fail(secretOrKeyError)
|
||||
} else {
|
||||
// Verify the JWT
|
||||
JwtStrategy.JwtVerifier(token, secretOrKey, self._verifOpts, function(jwt_err, payload) {
|
||||
if (jwt_err) {
|
||||
return self.fail(jwt_err);
|
||||
} else {
|
||||
// Pass the parsed token to the user
|
||||
var verified = function(err, user, info) {
|
||||
if(err) {
|
||||
return self.error(err);
|
||||
} else if (!user) {
|
||||
return self.fail(info);
|
||||
} else {
|
||||
return self.success(user, info);
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
if (self._passReqToCallback) {
|
||||
self._verify(req, payload, verified);
|
||||
} else {
|
||||
self._verify(payload, verified);
|
||||
}
|
||||
} catch(ex) {
|
||||
self.error(ex);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Export the Jwt Strategy
|
||||
*/
|
||||
module.exports = JwtStrategy;
|
||||
5
qwen/nodejs/node_modules/passport-jwt/lib/verify_jwt.js
generated
vendored
Normal file
5
qwen/nodejs/node_modules/passport-jwt/lib/verify_jwt.js
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
var jwt = require('jsonwebtoken');
|
||||
|
||||
module.exports = function(token, secretOrKey, options, callback) {
|
||||
return jwt.verify(token, secretOrKey, options, callback);
|
||||
};
|
||||
Reference in New Issue
Block a user