3 namespace BookStack\Providers;
7 use BookStack\Services\LdapService;
9 use Illuminate\Contracts\Auth\Authenticatable;
10 use Illuminate\Contracts\Auth\UserProvider;
12 class LdapUserProvider implements UserProvider
25 protected $ldapService;
29 * LdapUserProvider constructor.
31 * @param LdapService $ldapService
33 public function __construct($model, LdapService $ldapService)
35 $this->model = $model;
36 $this->ldapService = $ldapService;
40 * Create a new instance of the model.
42 * @return \Illuminate\Database\Eloquent\Model
44 public function createModel()
46 $class = '\\' . ltrim($this->model, '\\');
52 * Retrieve a user by their unique identifier.
54 * @param mixed $identifier
55 * @return \Illuminate\Contracts\Auth\Authenticatable|null
57 public function retrieveById($identifier)
59 return $this->createModel()->newQuery()->find($identifier);
63 * Retrieve a user by their unique identifier and "remember me" token.
65 * @param mixed $identifier
66 * @param string $token
67 * @return \Illuminate\Contracts\Auth\Authenticatable|null
69 public function retrieveByToken($identifier, $token)
71 $model = $this->createModel();
73 return $model->newQuery()
74 ->where($model->getAuthIdentifierName(), $identifier)
75 ->where($model->getRememberTokenName(), $token)
81 * Update the "remember me" token for the given user in storage.
83 * @param \Illuminate\Contracts\Auth\Authenticatable $user
84 * @param string $token
87 public function updateRememberToken(Authenticatable $user, $token)
90 $user->setRememberToken($token);
96 * Retrieve a user by the given credentials.
98 * @param array $credentials
99 * @return \Illuminate\Contracts\Auth\Authenticatable|null
101 public function retrieveByCredentials(array $credentials)
104 $userDetails = $this->ldapService->getUserDetails($credentials['username']);
105 if ($userDetails === null) return null;
107 // Search current user base by looking up a uid
108 $model = $this->createModel();
109 $currentUser = $model->newQuery()
110 ->where('external_auth_id', $userDetails['uid'])
113 if ($currentUser !== null) return $currentUser;
115 $model->name = $userDetails['name'];
116 $model->external_auth_id = $userDetails['uid'];
117 $model->email = $userDetails['email'];
118 $model->email_confirmed = false;
123 * Validate a user against the given credentials.
125 * @param \Illuminate\Contracts\Auth\Authenticatable $user
126 * @param array $credentials
129 public function validateCredentials(Authenticatable $user, array $credentials)
131 return $this->ldapService->validateUserCredentials($user, $credentials['username'], $credentials['password']);