const _ = require('lodash'); const passport = require('passport'); const { Strategy: LocalStrategy } = require('passport-local'); const { Strategy: JWTStrategy} = require('passport-jwt'); const models = require('./models'); const securityHelper = require('../helpers/security.helper'); const authService = require('../modules/auth/auth.service'); /** * Validación sobre firebase */ var admin = require('firebase-admin'); var serviceAccount = require('../firebase-key.json'); admin.initializeApp({ credential: 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 { const user = await authService.extraMethods.findUser({ phone, fbuid }); if (_.isNull(user)) { admin.auth().getUserByPhoneNumber(phone) .then(function(userRecord) { if (userRecord && userRecord.toJSON().uid == fbuid) { console.log(userRecord.toJSON()); console.log('DEBO COMPROBAR EL ESTADO DEL MOVIL SI ESTA HABILITADO O NO'); const user = authService.extraMethods.createUser({phone, fbuid}); console.log('dar de alta el usuario') } else { console.log("Me quieres engañar "); return done(null, false, { message: 'User not validate in fb' }) } }) .catch(function (error) { return done(null, user, error); }) } else { return done(null, user, { message: 'User found' }); } } catch (error) { return done(null, false, error); } })); // JWT passport.use('jwt', new JWTStrategy(securityHelper.jwtOptions, async (jwtPayload, done) => { try { const user = await models.User.findOne({ attributes: { exclude: [ 'password' ] }, where: { id: jwtPayload.id }, raw: true }); if (_.isNull(user)) { return done(null, false, { message: 'User not found' }) } else { return done(null, user, { message: 'User found' }); } } catch (error) { return done(error); } }));