3 namespace BookStack\Providers;
6 use BookStack\Services\LdapService;
8 use Illuminate\Contracts\Auth\Authenticatable;
9 use Illuminate\Contracts\Auth\UserProvider;
11 class LdapUserProvider implements UserProvider
24 protected $ldapService;
28 * LdapUserProvider constructor.
30 * @param LdapService $ldapService
32 public function __construct($model, LdapService $ldapService)
34 $this->model = $model;
35 $this->ldapService = $ldapService;
39 * Create a new instance of the model.
41 * @return \Illuminate\Database\Eloquent\Model
43 public function createModel()
45 $class = '\\' . ltrim($this->model, '\\');
51 * Retrieve a user by their unique identifier.
53 * @param mixed $identifier
54 * @return \Illuminate\Contracts\Auth\Authenticatable|null
56 public function retrieveById($identifier)
58 return $this->createModel()->newQuery()->find($identifier);
62 * Retrieve a user by their unique identifier and "remember me" token.
64 * @param mixed $identifier
65 * @param string $token
66 * @return \Illuminate\Contracts\Auth\Authenticatable|null
68 public function retrieveByToken($identifier, $token)
70 $model = $this->createModel();
72 return $model->newQuery()
73 ->where($model->getAuthIdentifierName(), $identifier)
74 ->where($model->getRememberTokenName(), $token)
80 * Update the "remember me" token for the given user in storage.
82 * @param \Illuminate\Contracts\Auth\Authenticatable $user
83 * @param string $token
86 public function updateRememberToken(Authenticatable $user, $token)
89 $user->setRememberToken($token);
95 * Retrieve a user by the given credentials.
97 * @param array $credentials
98 * @return \Illuminate\Contracts\Auth\Authenticatable|null
100 public function retrieveByCredentials(array $credentials)
103 $userDetails = $this->ldapService->getUserDetails($credentials['username']);
104 if ($userDetails === null) {
108 // Search current user base by looking up a uid
109 $model = $this->createModel();
110 $currentUser = $model->newQuery()
111 ->where('external_auth_id', $userDetails['uid'])
114 if ($currentUser !== null) {
118 $model->name = $userDetails['name'];
119 $model->external_auth_id = $userDetails['uid'];
120 $model->email = $userDetails['email'];
121 $model->email_confirmed = false;
126 * Validate a user against the given credentials.
128 * @param \Illuminate\Contracts\Auth\Authenticatable $user
129 * @param array $credentials
132 public function validateCredentials(Authenticatable $user, array $credentials)
134 return $this->ldapService->validateUserCredentials($user, $credentials['username'], $credentials['password']);