freeCodeCamp/api-server/server/boot/authentication.js

67 lines
2.0 KiB
JavaScript
Raw Normal View History

import passport from 'passport';
import { homeLocation } from '../../../config/env';
2019-02-16 00:31:05 +00:00
import {
createPassportCallbackAuthenticator,
saveResponseAuthCookies,
loginRedirect
} from '../component-passport';
2019-03-04 21:03:46 +00:00
import { ifUserRedirectTo } from '../utils/middleware';
import { wrapHandledError } from '../utils/create-handled-error.js';
import { removeCookies } from '../utils/getSetAccessToken';
const isSignUpDisabled = !!process.env.DISABLE_SIGNUP;
if (isSignUpDisabled) {
console.log('fcc:boot:auth - Sign up is disabled');
}
module.exports = function enableAuthentication(app) {
// enable loopback access control authentication. see:
// loopback.io/doc/en/lb2/Authentication-authorization-and-permissions.html
app.enableAuth();
const ifUserRedirect = ifUserRedirectTo();
const saveAuthCookies = saveResponseAuthCookies();
const loginSuccessRedirect = loginRedirect();
const api = app.loopback.Router();
// Use a local mock strategy for signing in if we are in dev mode.
// Otherwise we use auth0 login. We use a string for 'true' because values
// set in the env file will always be strings and never boolean.
if (process.env.LOCAL_MOCK_AUTH === 'true') {
api.get(
'/signin',
passport.authenticate('devlogin'),
saveAuthCookies,
loginSuccessRedirect
);
} else {
api.get(
'/signin',
ifUserRedirect,
passport.authenticate('auth0-login', {})
);
api.get(
'/auth/auth0/callback',
createPassportCallbackAuthenticator('auth0-login', { provider: 'auth0' })
);
}
2018-08-29 19:52:41 +00:00
api.get('/signout', (req, res) => {
req.logout();
2018-08-29 19:52:41 +00:00
req.session.destroy(err => {
if (err) {
2018-08-29 19:52:41 +00:00
throw wrapHandledError(new Error('could not destroy session'), {
type: 'info',
message: 'We could not log you out, please try again in a moment.',
2018-08-29 19:52:41 +00:00
redirectTo: homeLocation
});
}
removeCookies(req, res);
2018-08-29 19:52:41 +00:00
res.redirect(homeLocation);
});
});
app.use(api);
2015-06-03 00:27:02 +00:00
};