wiki-grav/plugins/git-sync/cli/PasswdCommand.php

92 lines
2.9 KiB
PHP
Raw Normal View History

<?php
namespace Grav\Plugin\Console;
use Grav\Console\ConsoleCommand;
use Grav\Plugin\GitSync\GitSync;
use Grav\Plugin\GitSync\Helper;
use Grav\Common\Grav;
use RocketTheme\Toolbox\File\YamlFile;
use Symfony\Component\Console\Exception\RuntimeException;
use Symfony\Component\Console\Input\InputOption;
/**
* Class LogCommand
*
* @package Grav\Plugin\Console
*/
class PasswdCommand extends ConsoleCommand
{
/** @var array */
protected $options = [];
protected function configure()
{
$this
->setName('passwd')
->setDescription('Allows to change the user and/or password programmatically')
->addOption(
'user',
'u',
InputOption::VALUE_REQUIRED,
'The username. Use empty double quotes if you need an empty username.'
)
->addOption(
'password',
'p',
InputOption::VALUE_REQUIRED,
"The password."
)
->setHelp('The <info>%command.name%</info> command allows to change the user and/or password. Useful when running automated scripts or needing to programmatically set them without admin access.')
;
}
protected function serve()
{
require_once __DIR__ . '/../vendor/autoload.php';
$grav = Grav::instance();
$config = $grav['config'];
$locator = $grav['locator'];
$filename = 'config://plugins/git-sync.yaml';
$file = YamlFile::instance($locator->findResource($filename, true, true));
$this->options = [
'user' => $this->input->getOption('user'),
'password' => $this->input->getOption('password')
];
if ($this->options['password'] !== null) {
$this->options['password'] = Helper::encrypt($this->options['password']);
}
$user = $this->options['user'] !== null ? $this->options['user'] : $config->get('plugins.git-sync.user');
$password = $this->options['password'] !== null ? $this->options['password'] : $config->get('plugins.git-sync.password');
$config->set('plugins.git-sync.user', $user);
$config->set('plugins.git-sync.password', $password);
$content = $grav['config']->get('plugins.git-sync');
$file->save($content);
$file->free();
$this->output->writeln('');
$this->output->writeln('<green>User / Password updated.</green>');
$this->output->writeln('');
}
private function console_header($readable, $cmd = '', $remote_action = false)
{
$this->output->writeln(
"<yellow>$readable</yellow>" . ($cmd ? "(<info>$cmd</info>)" : ''). ($remote_action ? '...' : '')
);
}
private function console_log($lines, $password)
{
foreach ($lines as $line) {
$this->output->writeln(' ' . Helper::preventReadablePassword($line, $password));
}
}
}