81 lines
2.5 KiB
JavaScript
81 lines
2.5 KiB
JavaScript
|
|
const ValidationService = require('../../services/ValidationService');
|
||
|
|
const AuthService = require('../../services/AuthService');
|
||
|
|
const JWTService = require('../../services/JwtService');
|
||
|
|
const SessionService = require('../../services/SessionService');
|
||
|
|
const OAuthService = require('../../services/OAuthService');
|
||
|
|
const db = require('../../models');
|
||
|
|
const errors = require('../../core/errors');
|
||
|
|
const app = require('express').Router();
|
||
|
|
|
||
|
|
|
||
|
|
app.get('/member/facebook/initialize', async function (req, res) {
|
||
|
|
const role_id = 2
|
||
|
|
try {
|
||
|
|
|
||
|
|
const authenticationUrl = OAuthService.facebook.generateAuthURL({
|
||
|
|
redirect_uri: process.env.DYNAMIC_CONFIG_FACEBOOK_REDIRECT_URI,
|
||
|
|
client_id: process.env.DYNAMIC_CONFIG_FACEBOOK_CLIENT_ID,
|
||
|
|
});
|
||
|
|
|
||
|
|
res.redirect(authenticationUrl);
|
||
|
|
} catch (error) {
|
||
|
|
viewModel.error = 'Something went wrong';
|
||
|
|
return res.render('member/Login', viewModel);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
app.get('/member/facebook', async function (req, res) {
|
||
|
|
const role_id = 2
|
||
|
|
|
||
|
|
const AuthViewModel = require('../../view_models/member_auth_view_model');
|
||
|
|
const viewModel = new AuthViewModel(db.user, 'Facebook login');
|
||
|
|
try {
|
||
|
|
const authToken = await OAuthService.facebook.generateAuthToken({
|
||
|
|
redirect_uri: process.env.DYNAMIC_CONFIG_FACEBOOK_REDIRECT_URI,
|
||
|
|
client_id: process.env.DYNAMIC_CONFIG_FACEBOOK_CLIENT_ID,
|
||
|
|
client_id: process.env.DYNAMIC_CONFIG_FACEBOOK_CLIENT_ID,
|
||
|
|
client_secret: process.env.DYNAMIC_CONFIG_FACEBOOK_CLIENT_SECRET,
|
||
|
|
auth_code: req.query.code,
|
||
|
|
});
|
||
|
|
|
||
|
|
const facebookUser = await OAuthService.facebook.getUserInfo(authToken);
|
||
|
|
|
||
|
|
// Facebook doesn't return email address sometime
|
||
|
|
// Allow email in the list of permissions in the frontend and access token will return email as well
|
||
|
|
|
||
|
|
if (!facebookUser.email) {
|
||
|
|
throw new Error(
|
||
|
|
'EMAIL_ASSOCIATED_WITH_FACEBOOK_COULD_NOT_BE_FOUND',
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
const payload = await OAuthService.authenticate({
|
||
|
|
provider: 'f',
|
||
|
|
id: facebookUser.id,
|
||
|
|
email: facebookUser.email,
|
||
|
|
first_name: facebookUser.first_name,
|
||
|
|
last_name: facebookUser.last_name,
|
||
|
|
image: '',
|
||
|
|
role_id
|
||
|
|
});
|
||
|
|
|
||
|
|
const session = req.session;
|
||
|
|
session.role = role_id;
|
||
|
|
session.user = payload.user;
|
||
|
|
|
||
|
|
return session.save((error) => {
|
||
|
|
if (error) {
|
||
|
|
throw new Error(error);
|
||
|
|
}
|
||
|
|
return res.redirect('/member/dashboard');
|
||
|
|
});
|
||
|
|
} catch (error) {
|
||
|
|
viewModel.error = error.message || "Something went wrong";
|
||
|
|
return res.render('member/Login', viewModel);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
module.exports = app;
|