Deduplicated getOrRegisterUser method

This commit is contained in:
Jasper Weyne 2020-07-06 18:14:43 +02:00
parent 07a6d7655f
commit 25144a13c7
3 changed files with 41 additions and 60 deletions

View File

@ -3,9 +3,46 @@
use BookStack\Auth\Role; use BookStack\Auth\Role;
use BookStack\Auth\User; use BookStack\Auth\User;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Str;
class ExternalAuthService class ExternalAuthService
{ {
protected $registrationService;
protected $user;
/**
* ExternalAuthService base constructor.
*/
public function __construct(RegistrationService $registrationService, User $user)
{
$this->registrationService = $registrationService;
$this->user = $user;
}
/**
* Get the user from the database for the specified details.
* @throws UserRegistrationException
*/
protected function getOrRegisterUser(array $userDetails): ?User
{
$user = $this->user->newQuery()
->where('external_auth_id', '=', $userDetails['external_id'])
->first();
if (is_null($user)) {
$userData = [
'name' => $userDetails['name'],
'email' => $userDetails['email'],
'password' => Str::random(32),
'external_auth_id' => $userDetails['external_id'],
];
$user = $this->registrationService->registerUser($userData, null, false);
}
return $user;
}
/** /**
* Check a role against an array of group names to see if it matches. * Check a role against an array of group names to see if it matches.
* Checked against role 'external_auth_id' if set otherwise the name of the role. * Checked against role 'external_auth_id' if set otherwise the name of the role.

View File

@ -5,7 +5,6 @@ use BookStack\Exceptions\JsonDebugException;
use BookStack\Exceptions\OpenIdException; use BookStack\Exceptions\OpenIdException;
use BookStack\Exceptions\UserRegistrationException; use BookStack\Exceptions\UserRegistrationException;
use Exception; use Exception;
use Illuminate\Support\Str;
use Lcobucci\JWT\Token; use Lcobucci\JWT\Token;
use OpenIDConnectClient\AccessToken; use OpenIDConnectClient\AccessToken;
use OpenIDConnectClient\OpenIDConnectProvider; use OpenIDConnectClient\OpenIDConnectProvider;
@ -17,17 +16,15 @@ use OpenIDConnectClient\OpenIDConnectProvider;
class OpenIdService extends ExternalAuthService class OpenIdService extends ExternalAuthService
{ {
protected $config; protected $config;
protected $registrationService;
protected $user;
/** /**
* OpenIdService constructor. * OpenIdService constructor.
*/ */
public function __construct(RegistrationService $registrationService, User $user) public function __construct(RegistrationService $registrationService, User $user)
{ {
parent::__construct($registrationService, $user);
$this->config = config('openid'); $this->config = config('openid');
$this->registrationService = $registrationService;
$this->user = $user;
} }
/** /**
@ -175,31 +172,6 @@ class OpenIdService extends ExternalAuthService
]; ];
} }
/**
* Get the user from the database for the specified details.
* @throws OpenIdException
* @throws UserRegistrationException
*/
protected function getOrRegisterUser(array $userDetails): ?User
{
$user = $this->user->newQuery()
->where('external_auth_id', '=', $userDetails['external_id'])
->first();
if (is_null($user)) {
$userData = [
'name' => $userDetails['name'],
'email' => $userDetails['email'],
'password' => Str::random(32),
'external_auth_id' => $userDetails['external_id'],
];
$user = $this->registrationService->registerUser($userData, null, false);
}
return $user;
}
/** /**
* Processes a received access token for a user. Login the user when * Processes a received access token for a user. Login the user when
* they exist, optionally registering them automatically. * they exist, optionally registering them automatically.

View File

@ -5,7 +5,6 @@ use BookStack\Exceptions\JsonDebugException;
use BookStack\Exceptions\SamlException; use BookStack\Exceptions\SamlException;
use BookStack\Exceptions\UserRegistrationException; use BookStack\Exceptions\UserRegistrationException;
use Exception; use Exception;
use Illuminate\Support\Str;
use OneLogin\Saml2\Auth; use OneLogin\Saml2\Auth;
use OneLogin\Saml2\Error; use OneLogin\Saml2\Error;
use OneLogin\Saml2\IdPMetadataParser; use OneLogin\Saml2\IdPMetadataParser;
@ -18,17 +17,15 @@ use OneLogin\Saml2\ValidationError;
class Saml2Service extends ExternalAuthService class Saml2Service extends ExternalAuthService
{ {
protected $config; protected $config;
protected $registrationService;
protected $user;
/** /**
* Saml2Service constructor. * Saml2Service constructor.
*/ */
public function __construct(RegistrationService $registrationService, User $user) public function __construct(RegistrationService $registrationService, User $user)
{ {
parent::__construct($registrationService, $user);
$this->config = config('saml2'); $this->config = config('saml2');
$this->registrationService = $registrationService;
$this->user = $user;
} }
/** /**
@ -309,31 +306,6 @@ class Saml2Service extends ExternalAuthService
return $defaultValue; return $defaultValue;
} }
/**
* Get the user from the database for the specified details.
* @throws SamlException
* @throws UserRegistrationException
*/
protected function getOrRegisterUser(array $userDetails): ?User
{
$user = $this->user->newQuery()
->where('external_auth_id', '=', $userDetails['external_id'])
->first();
if (is_null($user)) {
$userData = [
'name' => $userDetails['name'],
'email' => $userDetails['email'],
'password' => Str::random(32),
'external_auth_id' => $userDetails['external_id'],
];
$user = $this->registrationService->registerUser($userData, null, false);
}
return $user;
}
/** /**
* Process the SAML response for a user. Login the user when * Process the SAML response for a user. Login the user when
* they exist, optionally registering them automatically. * they exist, optionally registering them automatically.