UNPKG

@coko/server

Version:

Reusable server for use by Coko's projects

72 lines 2.74 kB
"use strict"; 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