-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAny.php
More file actions
35 lines (30 loc) · 868 Bytes
/
Any.php
File metadata and controls
35 lines (30 loc) · 868 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
declare(strict_types = 1);
namespace Innmind\HttpAuthentication;
use Innmind\Http\ServerRequest;
use Innmind\Immutable\{
Sequence,
Attempt,
};
final class Any implements Authenticator
{
/** @var Sequence<Authenticator> */
private Sequence $authenticators;
/**
* @no-named-arguments
*/
public function __construct(Authenticator ...$authenticators)
{
$this->authenticators = Sequence::of(...$authenticators);
}
public function __invoke(ServerRequest $request): Attempt
{
/** @var Attempt<Identity> */
return $this->authenticators->reduce(
Attempt::error(new \LogicException('No authenticator defined')),
static fn(Attempt $identity, $authenticate) => $identity->recover(
static fn() => $authenticate($request),
),
);
}
}