3 namespace BookStack\Providers;
5 use BookStack\Auth\Access\LdapService;
6 use Illuminate\Contracts\Auth\Authenticatable;
7 use Illuminate\Contracts\Auth\UserProvider;
9 class LdapUserProvider implements UserProvider
20 * @var \BookStack\Auth\LdapService
22 protected $ldapService;
26 * LdapUserProvider constructor.
28 * @param \BookStack\Auth\LdapService $ldapService
30 public function __construct($model, LdapService $ldapService)
32 $this->model = $model;
33 $this->ldapService = $ldapService;
37 * Create a new instance of the model.
39 * @return \Illuminate\Database\Eloquent\Model
41 public function createModel()
43 $class = '\\' . ltrim($this->model, '\\');
49 * Retrieve a user by their unique identifier.
51 * @param mixed $identifier
52 * @return \Illuminate\Contracts\Auth\Authenticatable|null
54 public function retrieveById($identifier)
56 return $this->createModel()->newQuery()->find($identifier);
60 * Retrieve a user by their unique identifier and "remember me" token.
62 * @param mixed $identifier
63 * @param string $token
64 * @return \Illuminate\Contracts\Auth\Authenticatable|null
66 public function retrieveByToken($identifier, $token)
68 $model = $this->createModel();
70 return $model->newQuery()
71 ->where($model->getAuthIdentifierName(), $identifier)
72 ->where($model->getRememberTokenName(), $token)
78 * Update the "remember me" token for the given user in storage.
80 * @param \Illuminate\Contracts\Auth\Authenticatable $user
81 * @param string $token
84 public function updateRememberToken(Authenticatable $user, $token)
87 $user->setRememberToken($token);
93 * Retrieve a user by the given credentials.
95 * @param array $credentials
96 * @return \Illuminate\Contracts\Auth\Authenticatable|null
98 public function retrieveByCredentials(array $credentials)
101 $userDetails = $this->ldapService->getUserDetails($credentials['username']);
102 if ($userDetails === null) {
106 // Search current user base by looking up a uid
107 $model = $this->createModel();
108 $currentUser = $model->newQuery()
109 ->where('external_auth_id', $userDetails['uid'])
112 if ($currentUser !== null) {
116 $model->name = $userDetails['name'];
117 $model->external_auth_id = $userDetails['uid'];
118 $model->email = $userDetails['email'];
119 $model->email_confirmed = false;
124 * Validate a user against the given credentials.
126 * @param \Illuminate\Contracts\Auth\Authenticatable $user
127 * @param array $credentials
130 public function validateCredentials(Authenticatable $user, array $credentials)
132 return $this->ldapService->validateUserCredentials($user, $credentials['username'], $credentials['password']);