zend-blog-3-backend
73 строки · 2.0 Кб
1<?php
2
3namespace App\Command;
4
5use App\Repository\UserRepository;
6use Symfony\Component\Console\Command\Command;
7use Symfony\Component\Console\Input\InputArgument;
8use Symfony\Component\Console\Input\InputInterface;
9use Symfony\Component\Console\Output\OutputInterface;
10
11class WsseGenerateHeader extends Command
12{
13/**
14* @var UserRepository
15*/
16private UserRepository $repository;
17
18public function __construct(UserRepository $repository)
19{
20parent::__construct();
21
22$this->repository = $repository;
23}
24
25protected function configure(): void
26{
27$this
28->setName('mtt:wsse:generate-header')
29->setDescription('Generate WSSE header by user')
30->addArgument('username', InputArgument::REQUIRED, 'The username of the user.')
31;
32}
33
34protected function execute(InputInterface $input, OutputInterface $output): int
35{
36$username = $input->getArgument('username');
37
38$user = $this->repository->findOneByUsername($username);
39if (!$user) {
40$output->writeln("<error>User \"{$username}\" not found</error>");
41
42return 1;
43}
44
45$output->writeln('<comment>Authorization:</comment> WSSE profile="UsernameToken"');
46
47try {
48$nonce = random_bytes(12);
49} catch (\Exception $e) {
50$nonce = openssl_random_pseudo_bytes(12, $isSourceStrong);
51if ($isSourceStrong === false || $nonce === false) {
52throw new \RuntimeException('IV generation failed');
53}
54}
55
56$created = date('c');
57$digest = base64_encode(
58sha1($nonce . $created . $user->getWsseKey(), true)
59);
60
61$output->writeln(
62sprintf(
63'<comment>X-WSSE:</comment> UsernameToken Username="%s",PasswordDigest="%s",Nonce="%s",Created="%s"',
64$username,
65$digest,
66base64_encode($nonce),
67$created
68)
69);
70
71return 0;
72}
73}
74