mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-24 20:02:35 +01:00
Set more appropriate login validation and broken up LDAP guide a bit
This commit is contained in:
parent
575b85021d
commit
7728931f15
@ -75,19 +75,28 @@ class LdapSessionGuard extends ExternalBaseSessionGuard
|
||||
$user = $this->freshUserInstanceFromLdapUserDetails($userDetails);
|
||||
}
|
||||
|
||||
$providedEmail = ($credentials['email'] ?? false);
|
||||
$this->checkForUserEmail($user, $credentials['email'] ?? '');
|
||||
$this->saveIfNew($user);
|
||||
|
||||
// Request email if missing from LDAP and model and missing from request
|
||||
if (is_null($user->email) && !$providedEmail) {
|
||||
throw new LoginAttemptEmailNeededException();
|
||||
// Sync LDAP groups if required
|
||||
if ($this->ldapService->shouldSyncGroups()) {
|
||||
$this->ldapService->syncGroups($user, $username);
|
||||
}
|
||||
|
||||
// Add email to model if non-existing and email provided in request
|
||||
if (!$user->exists && $user->email === null && $providedEmail) {
|
||||
$user->email = $providedEmail;
|
||||
$this->login($user, $remember);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the give user if they don't yet existing in the system.
|
||||
* @throws LoginAttemptException
|
||||
*/
|
||||
protected function saveIfNew(User $user)
|
||||
{
|
||||
if ($user->exists) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$user->exists) {
|
||||
// Check for existing users with same email
|
||||
$alreadyUser = $user->newQuery()->where('email', '=', $user->email)->count() > 0;
|
||||
if ($alreadyUser) {
|
||||
@ -99,13 +108,23 @@ class LdapSessionGuard extends ExternalBaseSessionGuard
|
||||
$this->userRepo->downloadAndAssignUserAvatar($user);
|
||||
}
|
||||
|
||||
// Sync LDAP groups if required
|
||||
if ($this->ldapService->shouldSyncGroups()) {
|
||||
$this->ldapService->syncGroups($user, $username);
|
||||
/**
|
||||
* Ensure the given user has an email.
|
||||
* Takes the provided email in the request if a value is provided
|
||||
* and the user does not have an existing email.
|
||||
* @throws LoginAttemptEmailNeededException
|
||||
*/
|
||||
protected function checkForUserEmail(User $user, string $providedEmail)
|
||||
{
|
||||
// Request email if missing from user and missing from request
|
||||
if (is_null($user->email) && !$providedEmail) {
|
||||
throw new LoginAttemptEmailNeededException();
|
||||
}
|
||||
|
||||
$this->login($user, $remember);
|
||||
return true;
|
||||
// Add email to model if non-existing and email provided in request
|
||||
if (!$user->exists && is_null($user->email) && $providedEmail) {
|
||||
$user->email = $providedEmail;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -119,6 +119,43 @@ class LoginController extends Controller
|
||||
return $this->sendFailedLoginResponse($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the user login request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return void
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
protected function validateLogin(Request $request)
|
||||
{
|
||||
$rules = [];
|
||||
$authMethod = config('auth.method');
|
||||
|
||||
if ($authMethod === 'standard') {
|
||||
$rules = [
|
||||
'email' => 'required|string|email',
|
||||
'password' => 'required|string'
|
||||
];
|
||||
}
|
||||
|
||||
if ($authMethod === 'ldap') {
|
||||
$rules = [
|
||||
'username' => 'required|string',
|
||||
'password' => 'required|string',
|
||||
'email' => 'email',
|
||||
];
|
||||
}
|
||||
|
||||
if ($authMethod === 'saml2') {
|
||||
$rules = [
|
||||
'email' => 'email',
|
||||
];
|
||||
}
|
||||
|
||||
$request->validate($rules);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a response when a login attempt exception occurs.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user