| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-18 00:56:55 +08:00
										 |  |  | namespace BookStack\Access; | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | use Illuminate\Contracts\Auth\Authenticatable; | 
					
						
							|  |  |  | use Illuminate\Contracts\Auth\UserProvider; | 
					
						
							| 
									
										
										
										
											2021-11-20 22:03:56 +08:00
										 |  |  | use Illuminate\Database\Eloquent\Model; | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-01 19:42:22 +08:00
										 |  |  | class ExternalBaseUserProvider implements UserProvider | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2025-01-11 19:14:49 +08:00
										 |  |  |     public function __construct( | 
					
						
							|  |  |  |         protected string $model | 
					
						
							|  |  |  |     ) { | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Create a new instance of the model. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2025-01-11 19:14:49 +08:00
										 |  |  |     public function createModel(): Model | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-01-12 06:41:05 +08:00
										 |  |  |         $class = '\\' . ltrim($this->model, '\\'); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return new $class(); | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Retrieve a user by their unique identifier. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2025-01-11 19:14:49 +08:00
										 |  |  |     public function retrieveById(mixed $identifier): ?Authenticatable | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     { | 
					
						
							|  |  |  |         return $this->createModel()->newQuery()->find($identifier); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Retrieve a user by their unique identifier and "remember me" token. | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * @param string $token | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2025-01-11 19:14:49 +08:00
										 |  |  |     public function retrieveByToken(mixed $identifier, $token): null | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2020-02-01 19:42:22 +08:00
										 |  |  |         return null; | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Update the "remember me" token for the given user in storage. | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2021-11-20 22:03:56 +08:00
										 |  |  |      * @param Authenticatable $user | 
					
						
							| 
									
										
										
										
											2021-11-23 06:22:31 +08:00
										 |  |  |      * @param string          $token | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function updateRememberToken(Authenticatable $user, $token) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2020-02-01 19:42:22 +08:00
										 |  |  |         //
 | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Retrieve a user by the given credentials. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2025-01-11 19:14:49 +08:00
										 |  |  |     public function retrieveByCredentials(array $credentials): ?Authenticatable | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     { | 
					
						
							|  |  |  |         // Search current user base by looking up a uid
 | 
					
						
							| 
									
										
										
										
											2016-01-12 06:41:05 +08:00
										 |  |  |         $model = $this->createModel(); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-02-01 19:42:22 +08:00
										 |  |  |         return $model->newQuery() | 
					
						
							|  |  |  |             ->where('external_auth_id', $credentials['external_auth_id']) | 
					
						
							| 
									
										
										
										
											2016-01-12 06:41:05 +08:00
										 |  |  |             ->first(); | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Validate a user against the given credentials. | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2025-01-11 19:14:49 +08:00
										 |  |  |     public function validateCredentials(Authenticatable $user, array $credentials): bool | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2020-02-01 19:42:22 +08:00
										 |  |  |         // Should be done in the guard.
 | 
					
						
							|  |  |  |         return false; | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-01-11 19:14:49 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function rehashPasswordIfRequired(Authenticatable $user, #[\SensitiveParameter] array $credentials, bool $force = false)
 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // No action to perform, any passwords are external in the auth system
 | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-01-10 03:23:35 +08:00
										 |  |  | } |