Make auth configuration available via UI, remove FOSUserBundle and SAML-Bundle dependency
70 lines
2.2 KiB
PHP
70 lines
2.2 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Kimai time-tracking app.
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace App\Command;
|
|
|
|
use App\Entity\User;
|
|
use App\User\UserService;
|
|
use Symfony\Component\Console\Command\Command;
|
|
use Symfony\Component\Console\Input\InputArgument;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Input\InputOption;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
use Symfony\Component\Console\Style\SymfonyStyle;
|
|
|
|
abstract class AbstractRoleCommand extends Command
|
|
{
|
|
private $userService;
|
|
|
|
public function __construct(UserService $userService)
|
|
{
|
|
parent::__construct();
|
|
$this->userService = $userService;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function configure()
|
|
{
|
|
$this
|
|
->setDefinition([
|
|
new InputArgument('username', InputArgument::REQUIRED, 'The username'),
|
|
new InputArgument('role', InputArgument::OPTIONAL, 'The role'),
|
|
new InputOption('super', null, InputOption::VALUE_NONE, 'Instead specifying role, use this to quickly add the super administrator role'),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function execute(InputInterface $input, OutputInterface $output)
|
|
{
|
|
$username = $input->getArgument('username');
|
|
$role = $input->getArgument('role');
|
|
$super = (true === $input->getOption('super'));
|
|
|
|
if (null !== $role && $super) {
|
|
throw new \InvalidArgumentException('You can pass either the role or the --super option (but not both simultaneously).');
|
|
}
|
|
|
|
if (null === $role && !$super) {
|
|
throw new \RuntimeException('Not enough arguments, pass a role or use --super.');
|
|
}
|
|
|
|
$user = $this->userService->findUserByUsernameOrThrowException($username);
|
|
|
|
$this->executeRoleCommand($this->userService, new SymfonyStyle($input, $output), $user, $super, $role);
|
|
|
|
return 0;
|
|
}
|
|
|
|
abstract protected function executeRoleCommand(UserService $manipulator, SymfonyStyle $output, User $user, bool $super, $role);
|
|
}
|