mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
Deduplicated getOrRegisterUser method
This commit is contained in:
parent
07a6d7655f
commit
25144a13c7
@ -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.
|
||||||
|
@ -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.
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user