67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import passport from 'passport';
 | 
						|
 | 
						|
import { homeLocation } from '../../../config/env';
 | 
						|
import {
 | 
						|
  createPassportCallbackAuthenticator,
 | 
						|
  saveResponseAuthCookies,
 | 
						|
  loginRedirect
 | 
						|
} from '../component-passport';
 | 
						|
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' })
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  api.get('/signout', (req, res) => {
 | 
						|
    req.logout();
 | 
						|
    req.session.destroy(err => {
 | 
						|
      if (err) {
 | 
						|
        throw wrapHandledError(new Error('could not destroy session'), {
 | 
						|
          type: 'info',
 | 
						|
          message: 'We could not log you out, please try again in a moment.',
 | 
						|
          redirectTo: homeLocation
 | 
						|
        });
 | 
						|
      }
 | 
						|
      removeCookies(req, res);
 | 
						|
      res.redirect(homeLocation);
 | 
						|
    });
 | 
						|
  });
 | 
						|
 | 
						|
  app.use(api);
 | 
						|
};
 |