X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/767699a0664c13fea1293654578f571ec4a08fa3..refs/pull/5725/head:/app/Access/Oidc/OidcUserDetails.php diff --git a/app/Access/Oidc/OidcUserDetails.php b/app/Access/Oidc/OidcUserDetails.php index fae20de0b..7a422a58d 100644 --- a/app/Access/Oidc/OidcUserDetails.php +++ b/app/Access/Oidc/OidcUserDetails.php @@ -11,6 +11,7 @@ class OidcUserDetails public ?string $email = null, public ?string $name = null, public ?array $groups = null, + public ?string $picture = null, ) { } @@ -40,15 +41,16 @@ class OidcUserDetails $this->email = $claims->getClaim('email') ?? $this->email; $this->name = static::getUserDisplayName($displayNameClaims, $claims) ?? $this->name; $this->groups = static::getUserGroups($groupsClaim, $claims) ?? $this->groups; + $this->picture = static::getPicture($claims) ?: $this->picture; } - protected static function getUserDisplayName(string $displayNameClaims, ProvidesClaims $token): string + protected static function getUserDisplayName(string $displayNameClaims, ProvidesClaims $claims): string { $displayNameClaimParts = explode('|', $displayNameClaims); $displayName = []; foreach ($displayNameClaimParts as $claim) { - $component = $token->getClaim(trim($claim)) ?? ''; + $component = $claims->getClaim(trim($claim)) ?? ''; if ($component !== '') { $displayName[] = $component; } @@ -57,13 +59,13 @@ class OidcUserDetails return implode(' ', $displayName); } - protected static function getUserGroups(string $groupsClaim, ProvidesClaims $token): ?array + protected static function getUserGroups(string $groupsClaim, ProvidesClaims $claims): ?array { if (empty($groupsClaim)) { return null; } - $groupsList = Arr::get($token->getAllClaims(), $groupsClaim); + $groupsList = Arr::get($claims->getAllClaims(), $groupsClaim); if (!is_array($groupsList)) { return null; } @@ -72,4 +74,14 @@ class OidcUserDetails return is_string($val); })); } + + protected static function getPicture(ProvidesClaims $claims): ?string + { + $picture = $claims->getClaim('picture'); + if (is_string($picture) && str_starts_with($picture, 'http')) { + return $picture; + } + + return null; + } }