ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
UsernameResolver.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
23use Psr\Http\Message\ServerRequestInterface;
24
30{
32 private array $providers;
33
37 public function __construct(array $providers, private readonly \ilLogger $logger)
38 {
39 if (!array_is_list($providers)) {
40 throw new \InvalidArgumentException('Providers must be passed as list');
41 }
42
43 $this->providers = $providers;
44
45 // Sort by descending priority, this also ensures the expected type of the elements
46 usort(
47 $this->providers,
48 static fn(UsernameProvider $a, UsernameProvider $b): int => $b->getPriority() <=> $a->getPriority()
49 );
50 }
51
52 public function resolve(ServerRequestInterface $request): UsernameInterface
53 {
54 foreach ($this->providers as $provider) {
55 $this->logger->debug('Trying to resolve username using provider {provider} with prio {priority}', [
56 'provider' => $provider::class,
57 'priority' => $provider->getPriority(),
58 ]);
59
60 $username = $provider->getUsername($request);
61
62 if (!$username->isEmpty()) {
63 $this->logger->debug('Username resolved to {username} by provider {provider}', [
64 'username' => $username->asString(),
65 'provider' => $provider::class,
66 ]);
67
68 return $username;
69 }
70
71 $this->logger->debug('Provider {provider} could not resolve a username', [
72 'provider' => $provider::class,
73 ]);
74 }
75
76 $this->logger->debug('No username could be resolved by any provider, returning NullUsername');
77
78 return new NullUsername();
79 }
80}
Resolves a username by selecting the first provider (by descending priority) that returns a non-empty...
__construct(array $providers, private readonly \ilLogger $logger)
Component logger with individual log levels by component id.
Implementations may represent a resolved, concrete username or a null/empty value.
$provider
Definition: ltitoken.php:80
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples