<?php namespace BookStack\Access; use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Contracts\Auth\UserProvider; use Illuminate\Database\Eloquent\Model; class ExternalBaseUserProvider implements UserProvider { public function __construct( protected string $model ) { } /** * Create a new instance of the model. */ public function createModel(): Model { $class = '\\' . ltrim($this->model, '\\'); return new $class(); } /** * Retrieve a user by their unique identifier. */ public function retrieveById(mixed $identifier): ?Authenticatable { return $this->createModel()->newQuery()->find($identifier); } /** * Retrieve a user by their unique identifier and "remember me" token. * * @param string $token */ public function retrieveByToken(mixed $identifier, $token): null { return null; } /** * Update the "remember me" token for the given user in storage. * * @param Authenticatable $user * @param string $token * * @return void */ public function updateRememberToken(Authenticatable $user, $token) { // } /** * Retrieve a user by the given credentials. */ public function retrieveByCredentials(array $credentials): ?Authenticatable { // Search current user base by looking up a uid $model = $this->createModel(); return $model->newQuery() ->where('external_auth_id', $credentials['external_auth_id']) ->first(); } /** * Validate a user against the given credentials. */ public function validateCredentials(Authenticatable $user, array $credentials): bool { // Should be done in the guard. return false; } public function rehashPasswordIfRequired(Authenticatable $user, #[\SensitiveParameter] array $credentials, bool $force = false) { // No action to perform, any passwords are external in the auth system } }