Security update for Core, with self-updated composer
[yaffs-website] / vendor / drupal / console / src / Command / Generate / AuthenticationProviderCommand.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Command\Generate\AuthenticationProviderCommand.
6  */
7
8 namespace Drupal\Console\Command\Generate;
9
10 use Drupal\Console\Utils\Validator;
11 use Symfony\Component\Console\Input\InputInterface;
12 use Symfony\Component\Console\Input\InputOption;
13 use Symfony\Component\Console\Output\OutputInterface;
14 use Drupal\Console\Command\Shared\ServicesTrait;
15 use Drupal\Console\Command\Shared\ModuleTrait;
16 use Drupal\Console\Core\Command\Command;
17 use Drupal\Console\Generator\AuthenticationProviderGenerator;
18 use Drupal\Console\Command\Shared\ConfirmationTrait;
19 use Drupal\Console\Core\Utils\StringConverter;
20 use Drupal\Console\Extension\Manager;
21
22 class AuthenticationProviderCommand extends Command
23 {
24     use ServicesTrait;
25     use ModuleTrait;
26     use ConfirmationTrait;
27
28     /**
29      * @var Manager
30      */
31     protected $extensionManager;
32
33     /**
34      * @var AuthenticationProviderGenerator
35      */
36     protected $generator;
37
38     /**
39      * @var StringConverter
40      */
41     protected $stringConverter;
42
43     /**
44      * @var Validator
45      */
46     protected $validator;
47
48     /**
49      * AuthenticationProviderCommand constructor.
50      *
51      * @param Manager                         $extensionManager
52      * @param AuthenticationProviderGenerator $generator
53      * @param StringConverter                 $stringConverter
54      * @param Validator                       $validator
55      */
56     public function __construct(
57         Manager $extensionManager,
58         AuthenticationProviderGenerator $generator,
59         StringConverter $stringConverter,
60         Validator $validator
61     ) {
62         $this->extensionManager = $extensionManager;
63         $this->generator = $generator;
64         $this->stringConverter = $stringConverter;
65         $this->validator = $validator;
66         parent::__construct();
67     }
68
69     protected function configure()
70     {
71         $this
72             ->setName('generate:authentication:provider')
73             ->setDescription($this->trans('commands.generate.authentication.provider.description'))
74             ->setHelp($this->trans('commands.generate.authentication.provider.help'))
75             ->addOption('module', null, InputOption::VALUE_REQUIRED, $this->trans('commands.common.options.module'))
76             ->addOption(
77                 'class',
78                 null,
79                 InputOption::VALUE_OPTIONAL,
80                 $this->trans('commands.generate.authentication.provider.options.class')
81             )
82             ->addOption(
83                 'provider-id',
84                 null,
85                 InputOption::VALUE_OPTIONAL,
86                 $this->trans('commands.generate.authentication.provider.options.provider-id')
87             )
88             ->setAliases(['gap']);
89     }
90
91     /**
92      * {@inheritdoc}
93      */
94     protected function execute(InputInterface $input, OutputInterface $output)
95     {
96         // @see use Drupal\Console\Command\Shared\ConfirmationTrait::confirmOperation
97         if (!$this->confirmOperation()) {
98             return 1;
99         }
100
101         $module = $input->getOption('module');
102         $class = $this->validator->validateClassName($input->getOption('class'));
103         $provider_id = $input->getOption('provider-id');
104
105         $this->generator->generate([
106             'module' => $module,
107             'class' => $class,
108             'provider_id' => $provider_id,
109         ]);
110
111         return 0;
112     }
113
114     protected function interact(InputInterface $input, OutputInterface $output)
115     {
116         $stringUtils = $this->stringConverter;
117
118         // --module option
119         $this->getModuleOption();
120
121         // --class option
122         $class = $input->getOption('class');
123         if (!$class) {
124             $class = $this->getIo()->ask(
125                 $this->trans(
126                     'commands.generate.authentication.provider.questions.class'
127                 ),
128                 'DefaultAuthenticationProvider',
129                 function ($class) {
130                     return $this->validator->validateClassName($class);
131                 }
132             );
133             $input->setOption('class', $class);
134         }
135         // --provider-id option
136         $provider_id = $input->getOption('provider-id');
137         if (!$provider_id) {
138             $provider_id = $this->getIo()->ask(
139                 $this->trans('commands.generate.authentication.provider.questions.provider-id'),
140                 $stringUtils->camelCaseToUnderscore($class),
141                 function ($value) use ($stringUtils) {
142                     if (!strlen(trim($value))) {
143                         throw new \Exception('The Class name can not be empty');
144                     }
145
146                     return $stringUtils->camelCaseToUnderscore($value);
147                 }
148             );
149             $input->setOption('provider-id', $provider_id);
150         }
151     }
152 }