-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMergeKeysetCommand.php
49 lines (42 loc) · 1.63 KB
/
MergeKeysetCommand.php
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
declare(strict_types=1);
namespace Jose\Component\Console;
use InvalidArgumentException;
use function is_array;
use Jose\Component\Core\JWKSet;
use Jose\Component\Core\Util\JsonConverter;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
final class MergeKeysetCommand extends ObjectOutputCommand
{
protected static $defaultName = 'keyset:merge';
protected function configure(): void
{
parent::configure();
$this->setDescription('Merge several key sets into one.')
->setHelp(
'This command merges several key sets into one. It is very useful when you generate e.g. RSA, EC and OKP keys and you want only one key set to rule them all.'
)
->addArgument('jwksets', InputArgument::REQUIRED | InputArgument::IS_ARRAY, 'The JWKSet objects')
;
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
/** @var string[] $keySets */
$keySets = $input->getArgument('jwksets');
$newJwkset = new JWKSet([]);
foreach ($keySets as $keySet) {
$json = JsonConverter::decode($keySet);
if (! is_array($json)) {
throw new InvalidArgumentException('The argument must be a valid JWKSet.');
}
$jwkset = JWKSet::createFromKeyData($json);
foreach ($jwkset->all() as $jwk) {
$newJwkset = $newJwkset->with($jwk);
}
}
$this->prepareJsonOutput($input, $output, $newJwkset);
return 0;
}
}