132 lines
3.2 KiB
PHP
132 lines
3.2 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace Lcobucci\JWT;
|
|
|
|
use Closure;
|
|
use Lcobucci\JWT\Encoding\ChainedFormatter;
|
|
use Lcobucci\JWT\Encoding\JoseEncoder;
|
|
use Lcobucci\JWT\Signer\Key;
|
|
use Lcobucci\JWT\Validation\Constraint;
|
|
|
|
/**
|
|
* Configuration container for the JWT Builder and Parser
|
|
*
|
|
* Serves like a small DI container to simplify the creation and usage
|
|
* of the objects.
|
|
*/
|
|
final class Configuration
|
|
{
|
|
private Parser $parser;
|
|
private Validator $validator;
|
|
|
|
/** @var Closure(ClaimsFormatter $claimFormatter): Builder */
|
|
private Closure $builderFactory;
|
|
|
|
/** @var Constraint[] */
|
|
private array $validationConstraints = [];
|
|
|
|
private function __construct(
|
|
private readonly Signer $signer,
|
|
private readonly Key $signingKey,
|
|
private readonly Key $verificationKey,
|
|
Encoder $encoder,
|
|
Decoder $decoder,
|
|
) {
|
|
$this->parser = new Token\Parser($decoder);
|
|
$this->validator = new Validation\Validator();
|
|
|
|
$this->builderFactory = static function (ClaimsFormatter $claimFormatter) use ($encoder): Builder {
|
|
return new Token\Builder($encoder, $claimFormatter);
|
|
};
|
|
}
|
|
|
|
public static function forAsymmetricSigner(
|
|
Signer $signer,
|
|
Key $signingKey,
|
|
Key $verificationKey,
|
|
Encoder $encoder = new JoseEncoder(),
|
|
Decoder $decoder = new JoseEncoder(),
|
|
): self {
|
|
return new self(
|
|
$signer,
|
|
$signingKey,
|
|
$verificationKey,
|
|
$encoder,
|
|
$decoder,
|
|
);
|
|
}
|
|
|
|
public static function forSymmetricSigner(
|
|
Signer $signer,
|
|
Key $key,
|
|
Encoder $encoder = new JoseEncoder(),
|
|
Decoder $decoder = new JoseEncoder(),
|
|
): self {
|
|
return new self(
|
|
$signer,
|
|
$key,
|
|
$key,
|
|
$encoder,
|
|
$decoder,
|
|
);
|
|
}
|
|
|
|
/** @param callable(ClaimsFormatter): Builder $builderFactory */
|
|
public function setBuilderFactory(callable $builderFactory): void
|
|
{
|
|
$this->builderFactory = $builderFactory(...);
|
|
}
|
|
|
|
public function builder(?ClaimsFormatter $claimFormatter = null): Builder
|
|
{
|
|
return ($this->builderFactory)($claimFormatter ?? ChainedFormatter::default());
|
|
}
|
|
|
|
public function parser(): Parser
|
|
{
|
|
return $this->parser;
|
|
}
|
|
|
|
public function setParser(Parser $parser): void
|
|
{
|
|
$this->parser = $parser;
|
|
}
|
|
|
|
public function signer(): Signer
|
|
{
|
|
return $this->signer;
|
|
}
|
|
|
|
public function signingKey(): Key
|
|
{
|
|
return $this->signingKey;
|
|
}
|
|
|
|
public function verificationKey(): Key
|
|
{
|
|
return $this->verificationKey;
|
|
}
|
|
|
|
public function validator(): Validator
|
|
{
|
|
return $this->validator;
|
|
}
|
|
|
|
public function setValidator(Validator $validator): void
|
|
{
|
|
$this->validator = $validator;
|
|
}
|
|
|
|
/** @return Constraint[] */
|
|
public function validationConstraints(): array
|
|
{
|
|
return $this->validationConstraints;
|
|
}
|
|
|
|
public function setValidationConstraints(Constraint ...$validationConstraints): void
|
|
{
|
|
$this->validationConstraints = $validationConstraints;
|
|
}
|
|
}
|