| 
									
										
										
										
											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
										 |  |  | }; |