@coko/server
Version:
Reusable server for use by Coko's projects
72 lines • 2.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
const passport_http_bearer_1 = require("passport-http-bearer");
const passport_anonymous_1 = require("passport-anonymous");
const passport_local_1 = require("passport-local");
const config_1 = __importDefault(require("./configManager/config"));
const index_1 = __importDefault(require("./logger/index"));
const user_model_1 = __importDefault(require("./models/user/user.model"));
const createToken = (user) => {
index_1.default.info(`Creating token for ${user.username}`);
const expiresIn = config_1.default.get('tokenExpiresIn');
return jsonwebtoken_1.default.sign({
username: user.username,
id: user.id,
}, config_1.default.get('secret'), { expiresIn });
};
const verifyToken = (token, done) => {
jsonwebtoken_1.default.verify(token, config_1.default.get('secret'), (err, decoded) => {
if (err)
return done(null);
return done(null, decoded.id, {
username: decoded.username,
id: decoded.id,
token,
});
});
};
/* eslint-disable promise/no-callback-in-promise */
const verifyPassword = (username, password, done) => {
const errorMessage = 'Wrong username or password.';
index_1.default.debug('User finding:', username);
user_model_1.default.findOne({ username })
.then(user => {
index_1.default.debug('User found:', user.username);
return Promise.all([user, user.isPasswordValid(password)]);
})
.then(([user, isValid]) => {
/* eslint-disable-next-line promise/always-return */
if (isValid) {
done(null, user, { id: user.id });
return;
}
index_1.default.debug('Invalid password for user:', username);
done(null, false, { message: errorMessage });
})
.catch(err => {
index_1.default.debug('User not found', err);
if (err) {
done(null, false, { message: errorMessage });
}
});
};
/* eslint-enable promise/no-callback-in-promise */
exports.default = {
token: {
create: createToken,
verify: verifyToken,
},
strategies: {
// no credentials
anonymous: new passport_anonymous_1.Strategy(),
// JSON web token in "Bearer" HTTP header
bearer: new passport_http_bearer_1.Strategy(verifyToken),
// email + password
local: new passport_local_1.Strategy(verifyPassword),
},
};
//# sourceMappingURL=authentication.js.map