const FacebookStrategy = require('passport-facebook').Strategy; const UsersService = require('services/users'); const {ValidateUserLogin} = require('services/passport'); let { ROOT_URL } = require('config'); if (ROOT_URL[ROOT_URL.length - 1] !== '/') { ROOT_URL += '/'; } module.exports = (passport) => { if (process.env.TALK_FACEBOOK_APP_ID && process.env.TALK_FACEBOOK_APP_SECRET && process.env.TALK_ROOT_URL) { passport.use(new FacebookStrategy({ clientID: process.env.TALK_FACEBOOK_APP_ID, clientSecret: process.env.TALK_FACEBOOK_APP_SECRET, callbackURL: `${ROOT_URL}api/v1/auth/facebook/callback`, passReqToCallback: true, profileFields: ['id', 'displayName', 'picture.type(large)'] }, async (req, accessToken, refreshToken, profile, done) => { let user; try { user = await UsersService.findOrCreateExternalUser(profile); } catch (err) { return done(err); } return ValidateUserLogin(profile, user, done); })); } else if (process.env.NODE_ENV !== 'test') { throw new Error('Facebook cannot be enabled, missing one of TALK_FACEBOOK_APP_ID, TALK_FACEBOOK_APP_SECRET, TALK_ROOT_URL'); } };