maintenanceMode = $maintenanceMode; $this->ipValidator = $ipValidator; parent::__construct(); } /** * Initialization of the command * * @return void */ protected function configure() { $options = [ new InputOption( self::INPUT_KEY_IP, null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_REQUIRED, "Allowed IP addresses (use 'none' to clear allowed IP list)" ), ]; $this->setDefinition($options); parent::configure(); } /** * Get maintenance mode to set * * @return bool */ abstract protected function isEnable(); /** * Get display string after mode is set * * @return string */ abstract protected function getDisplayString(); /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $addresses = $input->getOption(self::INPUT_KEY_IP); $messages = $this->validate($addresses); if (!empty($messages)) { $output->writeln('' . implode('' . PHP_EOL . '', $messages)); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } $this->maintenanceMode->set($this->isEnable()); $output->writeln($this->getDisplayString()); if (!empty($addresses)) { $addresses = implode(',', $addresses); $addresses = ('none' == $addresses) ? '' : $addresses; $this->maintenanceMode->setAddresses($addresses); $output->writeln( 'Set exempt IP-addresses: ' . (implode(', ', $this->maintenanceMode->getAddressInfo()) ?: 'none') . '' ); } return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } /** * Validates IP addresses and return error messages * * @param string[] $addresses * @return string[] */ protected function validate(array $addresses) { return $this->ipValidator->validateIps($addresses, true); } }