Files
Eventment-API/routes/auth.js

139 lines
3.3 KiB
JavaScript

const errors = require('restify-errors');
const config = require('../config');
const handlePassportResponse = (req, res, next) => (err, user, info) => {
if (err) {
return next(err);
}
const isVerifiedUser = user &&
user.isRegistrationVerified();
if (user && isVerifiedUser) {
return res.send({ ...user.toAuthJSON() });
} else if (user && !isVerifiedUser){
return res.send({
registrationSuccess: true,
nextSteps: 'Check your email for our confirmation email, you will not be able to login without confirming.'
});
}
return res.send(400, info);
};
module.exports = function (server, auth) {
const { passport } = auth;
/* Local Auth */
server.post('/auth', (req, res, next) => {
const { body: { username = null, password = null } = {} } = req;
if (!username || !password) {
let errors = {};
if (!username) {
errors.username = 'is required';
}
if (!password) {
errors.password = 'is required';
}
return res.send(422, { errors });
}
const callback = handlePassportResponse(req, res, next);
return passport.authenticate('local', { session: false }, callback)(req, res, next);
});
/**
* SERVICES
*/
/* Google */
server.get(
'/auth/google',
passport.authenticate('google', { scope: 'profile email', session: false }),
);
server.get(
'/auth/google/callback',
(req, res, next) => {
const callback = handlePassportResponse(req, res, next);
return passport.authenticate(
'google',
{ failureRedirect: '/login' },
callback,
)(req, res, next);
},
);
/* Facebook */
server.get(
'/auth/facebook/login',
passport.authenticate('facebook', {
scope: ['email', 'public_profile'],
session: false,
}),
);
server.get(
'/auth/facebook/loggedin',
(req, res, next) => {
const callback = handlePassportResponse(req, res, next);
return passport.authenticate(
'facebook',
{ failureRedirect: '/login' },
callback,
)(req, res, next);
}
);
// server.get(
// '/auth/facebook/link',
// auth.secure,
// (req, res, next) => {
// req.user.record.setLinkCheckBit((err, linkCheckBit) => {
// passport.authenticate('facebookLink', {
// scope: ['email', 'public_profile'],
// session: false,
// state: linkCheckbit,
// })(req, res, next);
// });
// },
// );
//
// server.get(
// '/auth/facebook/linked',
// (req, res, next) => {
// const linkCheckBit = req.query.state;
//
// return passport.authenticate(
// 'facebook',
// { failureRedirect: '/profile' },
// (err, profile) => {
// if (err) {
// return next(err);
// }
//
// User.linkFacebookProfile(linkCheckBit, profile, (err, user) => {
// if (err) {
// return next(err);
// }
//
// if (!user) {
// return next(err, false, 'Linking the account to Facebook was unsuccessful, please try again.');
// }
//
// res.send({
// success: true,
// info: 'Facerbook account successfully linked',
// });
// });
// },
// )(req, res, next);
// }
// );
};