$hasEmpty = empty($this->externalId)
|| empty($this->email)
|| empty($this->name)
- || ($groupSyncActive && empty($this->groups));
+ || ($groupSyncActive && $this->groups === null);
return !$hasEmpty;
}
/**
- * Populate user details from OidcIdToken data.
+ * Populate user details from the given claim data.
*/
- public static function fromToken(
- OidcIdToken $token,
+ public function populate(
+ ProvidesClaims $claims,
string $idClaim,
string $displayNameClaims,
string $groupsClaim,
- ): static {
- $id = $token->getClaim($idClaim);
-
- return new self(
- externalId: $id,
- email: $token->getClaim('email'),
- name: static::getUserDisplayName($displayNameClaims, $token, $id),
- groups: static::getUserGroups($groupsClaim, $token),
- );
+ ): void {
+ $this->externalId = $claims->getClaim($idClaim) ?? $this->externalId;
+ $this->email = $claims->getClaim('email') ?? $this->email;
+ $this->name = static::getUserDisplayName($displayNameClaims, $claims) ?? $this->name;
+ $this->groups = static::getUserGroups($groupsClaim, $claims) ?? $this->groups;
}
- protected static function getUserDisplayName(string $displayNameClaims, OidcIdToken $token, string $defaultValue): string
+ protected static function getUserDisplayName(string $displayNameClaims, ProvidesClaims $token): string
{
$displayNameClaimParts = explode('|', $displayNameClaims);
}
}
- if (count($displayName) === 0) {
- $displayName[] = $defaultValue;
- }
-
return implode(' ', $displayName);
}
- protected static function getUserGroups(string $groupsClaim, OidcIdToken $token): array
+ protected static function getUserGroups(string $groupsClaim, ProvidesClaims $token): ?array
{
if (empty($groupsClaim)) {
- return [];
+ return null;
}
$groupsList = Arr::get($token->getAllClaims(), $groupsClaim);
if (!is_array($groupsList)) {
- return [];
+ return null;
}
return array_values(array_filter($groupsList, function ($val) {