const _ = require('lodash'); const passport = require('passport'); const { Strategy: LocalStrategy } = require('passport-local'); const { Strategy: CustomStrategy } = require('passport-custom'); const models = require('./models'); const securityHelper = require('../helpers/security.helper'); /** * Validación sobre firebase */ var firebase_admin = require('firebase-admin'); var serviceAccount = require('../firebase-key.json'); firebase_admin.initializeApp({ credential: firebase_admin.credential.cert(serviceAccount), databaseURL: "https://app-lqdvi-v2.firebaseio.com" }); passport.serializeUser((user, done) => { console.log('serializarUsuario'); done(null, user.id); }); passport.deserializeUser((id, done) => { console.log('desserializarUsuario'); models.User.findById(id, (err, user) => { done(err, user); }); }); /** * Sign in using Email and Password. */ const localEmailOptions = { usernameField: 'email', passwordField: 'password', } passport.use('local-email', new LocalStrategy(localEmailOptions, async (email, password, done) => { try { const user = await authService.extraMethods.findUser({ email }); if (_.isNull(user)) { return done(null, false, { message: 'User not found' }) } else { const isPasswordValid = await user.comparePassword(password); if (!isPasswordValid) { return done(null, false, { message: 'Wrong Password' }) } else { delete user.password; return done(null, user, { message: 'Logged in Successfully' }); } } } catch (error) { return done(error); } })); /** * Register using phone. */ const localPhoneOptions = { usernameField: 'phone', passwordField: 'fbuid', } passport.use('local-phone', new LocalStrategy(localPhoneOptions, async (phone, fbuid, done) => { try { firebase_admin.auth().getUserByPhoneNumber(phone) .then(function(userRecord) { if (userRecord && userRecord.toJSON().uid == fbuid) { if (userRecord.toJSON().disabled) return done(null, false, { message: 'User disabled in fb' }) else return done(null, true, { message: 'Register user' }); } else return done(null, false, { message: 'User not validate in fb' }); }) .catch(function (error) { //Servicio firebase caido o no funciona pero devuelvo el usuario return done(null, user, error); }) } catch (error) { return done(null, false, error); } })); // JWT passport.use('jwt', new CustomStrategy(async (req, done) => { const token = ((req && req.headers && req.headers['x-access-token']) ? req.headers['x-access-token'] : null); console.log(token); if (!token) { return done(null, false, { message: 'Unauthorized'}); } return done(null, securityHelper.verify(token)); }));