|
|
- <?php
-
- namespace App\Commands;
-
- use Illuminate\Console\Scheduling\Schedule;
- use LaravelZero\Framework\Commands\Command;
-
- use PhpSchool\CliMenu\CliMenu;
- use PhpSchool\CliMenu\MenuItem\CheckboxItem;
- use PhpSchool\CliMenu\Builder\SplitItemBuilder;
-
- use App\Facades\Menus\StylesFactory;
-
- /**
- * Manage Fail2ban Configuration
- *
- *
- * @author Björn Hase, Tentakelfabrik
- * @license http://opensource.org/licenses/MIT The MIT License
- * @link https://gitea.tentakelfabrik.de/Tentakelfabrik/mcp
- *
- */
- class Fail2banManageCommand extends Command
- {
- // destination to jail
- const DESTINATION_FAIL2BAN_JAIL_DIRECTORY = '/etc/fail2ban/jail.d';
-
- // source to jail
- const SOURCE_FAIL2BAN_JAIL_DIRECTORY = '/resources/fail2ban/jail.d';
-
- // ignore files
- const IGNORE_FILES = [
- '.', '..', 'defaults-debian.conf'
- ];
-
- // configuration
- private $configuration = [];
-
- // enabled
- private $enabled = [];
-
- /**
- * The signature of the command.
- *
- * @var string
- */
- protected $signature = 'fail2ban:manage';
-
- /**
- * The description of the command.
- *
- * @var string
- */
- protected $description = 'manage fail2ban configuration';
-
- /**
- *
- * @param [type] $file [description]
- * @return boolean [description]
- */
- private function name($file)
- {
- return str_replace('.conf', '', $file);
- }
-
- /**
- * Execute the console command.
- *
- * @return mixed
- */
- public function handle()
- {
- foreach(scandir(self::DESTINATION_FAIL2BAN_JAIL_DIRECTORY) as $file) {
- if (!in_array($file, self::IGNORE_FILES)) {
- $this->enabled[] = $this->name($file);
- }
- }
-
- foreach(scandir(base_path().self::SOURCE_FAIL2BAN_JAIL_DIRECTORY) as $file) {
- if (!in_array($file, self::IGNORE_FILES)) {
- $name = $this->name($file);
- $this->configuration[$name] = in_array($name, $this->enabled);
- }
- }
-
- // create menu
- $builder = $this->menu('Fail2ban');
-
- foreach($this->configuration as $name => $single) {
-
- // create checkbox
- $checkbox = new CheckboxItem($name, function(CliMenu $menu) use ($name) {
- if ($this->configuration[$name] === true) {
- $this->call('fail2ban:disable', [ 'configuration' => $name ]);
- $menu->redraw();
- $menu->confirm($name.' is disabled!')->display('OK!');
- } else {
- $this->call('fail2ban:enable', [ 'configuration' => $name ]);
- $menu->redraw();
- $menu->confirm($name.' is enabled!')->display('OK!');
- }
-
- // getting new value
- $this->configuration[$name] = $menu->getSelectedItem()->getChecked();
- $menu->redraw();
- });
-
- // set default value
- if ($this->configuration[$name]) {
- $checkbox->setChecked(true);
- }
-
- $builder->addMenuItem($checkbox);
- }
-
- // apperance
- $builder = StylesFactory::setMenuStyles($builder);
- $builder->addLineBreak('-');
-
- $mainmenu = $builder->build();
- $mainmenu->open();
- }
- }
|