vulcain-corejs
Version:
Vulcain micro-service framework
54 lines (52 loc) • 1.57 kB
JavaScript
;
const passportStrategy = require('passport-strategy');
class BearerStrategy extends passportStrategy.Strategy {
constructor(verify) {
if (!verify) {
throw new TypeError('BearerStrategy requires a verify callback');
}
super();
this.name = 'bearer';
this._verify = verify;
}
/**
* Authenticate request based on the contents of a HTTP Basic authorization
* header.
*
* @param {Object} req
* @api protected
*/
authenticate(req) {
let authorization = req.headers['authorization'];
// Perhaps in cookies
if (!authorization)
authorization = req.cookies && req.cookies.Authorization;
if (!authorization) {
return this.success(false, null);
}
let parts = authorization.split(' ');
if (parts.length < 2) {
return this.fail(400);
}
let scheme = parts[0], jwtToken = parts[1];
if (!/^Bearer$/i.test(scheme)) {
return this.fail(null);
}
if (!jwtToken) {
return this.fail(null);
}
let self = this;
function verified(err, user, info) {
if (err) {
return self.error(err);
}
if (!user) {
return self.fail(null);
}
self.success(user, info);
}
this._verify(jwtToken, verified, req.requestContext);
}
}
exports.BearerStrategy = BearerStrategy;
//# sourceMappingURL=bearerStrategy.js.map