-<?php namespace BookStack\Auth\Access\Oidc;
+<?php
+namespace BookStack\Auth\Access\Oidc;
+
+use function auth;
use BookStack\Auth\Access\LoginService;
use BookStack\Auth\Access\RegistrationService;
use BookStack\Auth\User;
use BookStack\Exceptions\OpenIdConnectException;
use BookStack\Exceptions\StoppedAuthenticationException;
use BookStack\Exceptions\UserRegistrationException;
+use function config;
use Exception;
use Illuminate\Support\Facades\Cache;
use League\OAuth2\Client\OptionProvider\HttpBasicAuthOptionProvider;
use Psr\Http\Client\ClientExceptionInterface;
use Psr\Http\Client\ClientInterface as HttpClient;
-use function auth;
-use function config;
use function trans;
use function url;
/**
* Initiate an authorization flow.
+ *
* @return array{url: string, state: string}
*/
public function login(): array
{
$settings = $this->getProviderSettings();
$provider = $this->getProvider($settings);
+
return [
- 'url' => $provider->getAuthorizationUrl(),
+ 'url' => $provider->getAuthorizationUrl(),
'state' => $provider->getState(),
];
}
* return the matching, or new if registration active, user matched to
* the authorization server.
* Returns null if not authenticated.
+ *
* @throws Exception
* @throws ClientExceptionInterface
*/
{
$config = $this->config();
$settings = new OidcProviderSettings([
- 'issuer' => $config['issuer'],
- 'clientId' => $config['client_id'],
- 'clientSecret' => $config['client_secret'],
- 'redirectUri' => url('/oidc/callback'),
+ 'issuer' => $config['issuer'],
+ 'clientId' => $config['client_id'],
+ 'clientSecret' => $config['client_secret'],
+ 'redirectUri' => url('/oidc/callback'),
'authorizationEndpoint' => $config['authorization_endpoint'],
- 'tokenEndpoint' => $config['token_endpoint'],
+ 'tokenEndpoint' => $config['token_endpoint'],
]);
// Use keys if configured
protected function getProvider(OidcProviderSettings $settings): OidcOAuthProvider
{
return new OidcOAuthProvider($settings->arrayForProvider(), [
- 'httpClient' => $this->httpClient,
+ 'httpClient' => $this->httpClient,
'optionProvider' => new HttpBasicAuthOptionProvider(),
]);
}
/**
- * Calculate the display name
+ * Calculate the display name.
*/
protected function getUserDisplayName(OidcIdToken $token, string $defaultValue): string
{
/**
* Extract the details of a user from an ID token.
+ *
* @return array{name: string, email: string, external_id: string}
*/
protected function getUserDetails(OidcIdToken $token): array
{
$id = $token->getClaim('sub');
+
return [
'external_id' => $id,
- 'email' => $token->getClaim('email'),
- 'name' => $this->getUserDisplayName($token, $id),
+ 'email' => $token->getClaim('email'),
+ 'name' => $this->getUserDisplayName($token, $id),
];
}
/**
* Processes a received access token for a user. Login the user when
* they exist, optionally registering them automatically.
+ *
* @throws OpenIdConnectException
* @throws JsonDebugException
* @throws UserRegistrationException
}
$user = $this->registrationService->findOrRegister(
- $userDetails['name'], $userDetails['email'], $userDetails['external_id']
+ $userDetails['name'],
+ $userDetails['email'],
+ $userDetails['external_id']
);
if ($user === null) {
}
$this->loginService->login($user, 'oidc');
+
return $user;
}