2018-10-24 00:24:48 +01:00
|
|
|
import passport from 'passport';
|
2017-12-27 10:11:17 -08:00
|
|
|
|
2018-08-31 16:04:04 +01:00
|
|
|
import { homeLocation } from '../../../config/env';
|
2019-02-16 00:31:05 +00:00
|
|
|
import {
|
2018-10-30 18:17:07 -03:00
|
|
|
createPassportCallbackAuthenticator,
|
|
|
|
saveResponseAuthCookies,
|
|
|
|
loginRedirect
|
|
|
|
} from '../component-passport';
|
2019-03-04 21:03:46 +00:00
|
|
|
import { ifUserRedirectTo } from '../utils/middleware';
|
2018-01-22 17:08:33 -08:00
|
|
|
import { wrapHandledError } from '../utils/create-handled-error.js';
|
2019-02-20 23:07:12 +00:00
|
|
|
import { removeCookies } from '../utils/getSetAccessToken';
|
2017-12-26 13:20:03 -08:00
|
|
|
|
|
|
|
const isSignUpDisabled = !!process.env.DISABLE_SIGNUP;
|
2018-01-01 15:01:50 -08:00
|
|
|
if (isSignUpDisabled) {
|
|
|
|
console.log('fcc:boot:auth - Sign up is disabled');
|
|
|
|
}
|
2017-12-26 13:20:03 -08:00
|
|
|
|
2015-06-03 12:26:11 -07:00
|
|
|
module.exports = function enableAuthentication(app) {
|
2017-12-26 13:20:03 -08:00
|
|
|
// enable loopback access control authentication. see:
|
2018-06-28 15:02:22 +05:30
|
|
|
// loopback.io/doc/en/lb2/Authentication-authorization-and-permissions.html
|
2015-06-03 12:26:11 -07:00
|
|
|
app.enableAuth();
|
2017-12-27 10:11:17 -08:00
|
|
|
const ifUserRedirect = ifUserRedirectTo();
|
2018-10-30 18:17:07 -03:00
|
|
|
const saveAuthCookies = saveResponseAuthCookies();
|
|
|
|
const loginSuccessRedirect = loginRedirect();
|
2017-12-26 13:20:03 -08:00
|
|
|
const api = app.loopback.Router();
|
|
|
|
|
2018-10-30 18:17:07 -03:00
|
|
|
// 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' })
|
|
|
|
);
|
|
|
|
}
|
2017-12-26 13:20:03 -08:00
|
|
|
|
2018-08-29 20:52:41 +01:00
|
|
|
api.get('/signout', (req, res) => {
|
2017-12-26 13:20:03 -08:00
|
|
|
req.logout();
|
2018-08-29 20:52:41 +01:00
|
|
|
req.session.destroy(err => {
|
2018-05-25 23:14:09 +05:30
|
|
|
if (err) {
|
2018-08-29 20:52:41 +01:00
|
|
|
throw wrapHandledError(new Error('could not destroy session'), {
|
|
|
|
type: 'info',
|
|
|
|
message: 'Oops, something is not right.',
|
|
|
|
redirectTo: homeLocation
|
|
|
|
});
|
2018-05-25 23:14:09 +05:30
|
|
|
}
|
2019-02-20 23:07:12 +00:00
|
|
|
removeCookies(req, res);
|
2018-08-29 20:52:41 +01:00
|
|
|
res.redirect(homeLocation);
|
|
|
|
});
|
2017-12-27 10:11:17 -08:00
|
|
|
});
|
2017-12-26 13:20:03 -08:00
|
|
|
|
|
|
|
app.use(api);
|
2015-06-02 17:27:02 -07:00
|
|
|
};
|