import * as DataEvent from '../../src/com/events/DataEvent'; const bCrypt = require('bcrypt'); const jwt = require('jsonwebtoken'); const _ = require('lodash'); export default class Auth { //-------------------------- // constructor //-------------------------- constructor() {} //-------------------------- // methods //-------------------------- start() {} /** * Makes sure access token is legit * @parameter req */ authCheck(req) { let self = this; return new Promise((resolve, reject) => { let hash = req.headers['x-access-token']; let response = []; //check to see if user is logged in if (!req.session.user) { response = { status: false, type: DataEvent.API_REQUEST_LAME, message: "You're not logged in, champ." }; reject(response); } //Checks if token is a proper hash, if not reject if (!self.isTokenValid(req.session.token, hash)) { response = { status: false, type: DataEvent.API_REQUEST_LAME, message: 'No Token Present. Auth Blocked' }; reject(response); //res.json(); } else { var member = req.session.user; jwt.verify(req.session.token, member.key, function (err, decoded) { if (err) { response = { status: false, type: DataEvent.API_REQUEST_LAME, message: 'Invalid Token. Auth Blocked' }; reject(response); } response = { status: true, type: DataEvent.API_REQUEST_GOOD, message: 'Token Verified', token: decoded }; resolve(response); }); } }); } verifyCredentials(config, credentials) { return new Promise((resolve, reject) => { var found = _.find(config, { handle: credentials.handle }); var response; if (found) { if (!this.isValidPassword(found, credentials.pass)) { response = { type: DataEvent.REQUEST_LAME, message: 'CHECK YOUR PASSWORD' }; reject(response); } response = { type: DataEvent.REQUEST_GOOD, message: 'Backup Verified. Restoring' }; resolve(response); } else { response = { type: DataEvent.REQUEST_LAME, message: 'Handle not found, boss' }; reject(response); } }); } isValidPassword(user, password) { return bCrypt.compareSync(password, user.password); } /** * Checks to make sure received token matches * @parameter token: created token * @parameter hashedToken: encrypted token */ isTokenValid(token, hashedToken) { return bCrypt.compareSync(token, hashedToken); } //-------------------------- // event handlers //-------------------------- }