| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 00:56:55 +08:00
										 |  |  | namespace BookStack\Access; | 
					
						
							| 
									
										
										
										
											2015-09-06 03:25:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-12 02:26:28 +08:00
										 |  |  | use BookStack\Access\Notifications\ConfirmEmailNotification; | 
					
						
							| 
									
										
										
										
											2015-09-11 02:31:09 +08:00
										 |  |  | use BookStack\Exceptions\ConfirmationEmailException; | 
					
						
							| 
									
										
										
										
											2023-05-18 00:56:55 +08:00
										 |  |  | use BookStack\Users\Models\User; | 
					
						
							| 
									
										
										
										
											2015-09-06 03:25:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-17 22:52:33 +08:00
										 |  |  | class EmailConfirmationService extends UserTokenService | 
					
						
							| 
									
										
										
										
											2015-09-06 03:25:57 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2023-04-04 17:44:38 +08:00
										 |  |  |     protected string $tokenTable = 'email_confirmations'; | 
					
						
							|  |  |  |     protected int $expiryTime = 24; | 
					
						
							| 
									
										
										
										
											2015-09-06 03:25:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Create new confirmation for a user, | 
					
						
							|  |  |  |      * Also removes any existing old ones. | 
					
						
							| 
									
										
										
										
											2021-08-21 22:49:40 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2015-09-06 03:25:57 +08:00
										 |  |  |      * @throws ConfirmationEmailException | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2024-05-21 00:23:15 +08:00
										 |  |  |     public function sendConfirmation(User $user): void | 
					
						
							| 
									
										
										
										
											2015-09-06 03:25:57 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-09-06 19:14:32 +08:00
										 |  |  |         if ($user->email_confirmed) { | 
					
						
							| 
									
										
										
										
											2016-12-05 00:51:39 +08:00
										 |  |  |             throw new ConfirmationEmailException(trans('errors.email_already_confirmed'), '/login'); | 
					
						
							| 
									
										
										
										
											2015-09-06 03:25:57 +08:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-09-18 01:22:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-17 22:52:33 +08:00
										 |  |  |         $this->deleteByUser($user); | 
					
						
							|  |  |  |         $token = $this->createTokenForUser($user); | 
					
						
							| 
									
										
										
										
											2016-09-18 01:22:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-12 02:26:28 +08:00
										 |  |  |         $user->notify(new ConfirmEmailNotification($token)); | 
					
						
							| 
									
										
										
										
											2016-09-18 01:22:04 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-18 17:47:59 +08:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Check if confirmation is required in this instance. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |     public function confirmationRequired(): bool | 
					
						
							| 
									
										
										
										
											2019-08-18 17:47:59 +08:00
										 |  |  |     { | 
					
						
							|  |  |  |         return setting('registration-confirmation') | 
					
						
							|  |  |  |             || setting('registration-restrict'); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-01-29 00:58:52 +08:00
										 |  |  | } |