| 
									
										
										
										
											2021-08-03 05:02:25 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace BookStack\Http\Middleware; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 00:56:55 +08:00
										 |  |  | use BookStack\Access\LoginService; | 
					
						
							|  |  |  | use BookStack\Access\Mfa\MfaSession; | 
					
						
							| 
									
										
										
										
											2021-08-03 05:02:25 +08:00
										 |  |  | use Closure; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AuthenticatedOrPendingMfa | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     protected $loginService; | 
					
						
							|  |  |  |     protected $mfaSession; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function __construct(LoginService $loginService, MfaSession $mfaSession) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->loginService = $loginService; | 
					
						
							|  |  |  |         $this->mfaSession = $mfaSession; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Handle an incoming request. | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2021-08-21 22:49:40 +08:00
										 |  |  |      * @param \Illuminate\Http\Request $request | 
					
						
							|  |  |  |      * @param \Closure                 $next | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2021-08-03 05:02:25 +08:00
										 |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function handle($request, Closure $next) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $user = auth()->user(); | 
					
						
							|  |  |  |         $loggedIn = $user !== null; | 
					
						
							|  |  |  |         $lastAttemptUser = $this->loginService->getLastLoginAttemptUser(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($loggedIn || ($lastAttemptUser && $this->mfaSession->isPendingMfaSetup($lastAttemptUser))) { | 
					
						
							|  |  |  |             return $next($request); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-21 22:14:24 +08:00
										 |  |  |         return redirect()->to(url('/login')); | 
					
						
							| 
									
										
										
										
											2021-08-03 05:02:25 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | } |