Refactor authentication system (#2602)
Make auth configuration available via UI, remove FOSUserBundle and SAML-Bundle dependency
This commit is contained in:
35
src/Validator/Constraints/User.php
Normal file
35
src/Validator/Constraints/User.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?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\Validator\Constraints;
|
||||
|
||||
use Doctrine\Common\Annotations\Annotation\Target;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
|
||||
/**
|
||||
* @Annotation
|
||||
* @Target({"CLASS", "PROPERTY", "METHOD", "ANNOTATION"})
|
||||
*/
|
||||
class User extends Constraint
|
||||
{
|
||||
public const USER_EXISTING_EMAIL = 'kimai-user-00';
|
||||
public const USER_EXISTING_NAME = 'kimai-user-01';
|
||||
|
||||
protected static $errorNames = [
|
||||
self::USER_EXISTING_EMAIL => 'The email is already used.',
|
||||
self::USER_EXISTING_NAME => 'The username is already used.',
|
||||
];
|
||||
|
||||
public $message = 'The user has invalid settings.';
|
||||
|
||||
public function getTargets()
|
||||
{
|
||||
return self::CLASS_CONSTRAINT;
|
||||
}
|
||||
}
|
||||
71
src/Validator/Constraints/UserValidator.php
Normal file
71
src/Validator/Constraints/UserValidator.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?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\Validator\Constraints;
|
||||
|
||||
use App\Entity\User as UserEntity;
|
||||
use App\User\UserService;
|
||||
use Symfony\Component\Validator\Constraint;
|
||||
use Symfony\Component\Validator\ConstraintValidator;
|
||||
use Symfony\Component\Validator\Context\ExecutionContextInterface;
|
||||
use Symfony\Component\Validator\Exception\UnexpectedTypeException;
|
||||
|
||||
class UserValidator extends ConstraintValidator
|
||||
{
|
||||
private $userService;
|
||||
|
||||
public function __construct(UserService $userService)
|
||||
{
|
||||
$this->userService = $userService;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param UserEntity $value
|
||||
* @param Constraint $constraint
|
||||
*/
|
||||
public function validate($value, Constraint $constraint)
|
||||
{
|
||||
if (!($constraint instanceof User)) {
|
||||
throw new UnexpectedTypeException($constraint, User::class);
|
||||
}
|
||||
|
||||
if (!\is_object($value) || !($value instanceof UserEntity)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->validateUser($value, $this->context);
|
||||
}
|
||||
|
||||
protected function validateUser(UserEntity $user, ExecutionContextInterface $context)
|
||||
{
|
||||
if ($user->getEmail() !== null) {
|
||||
$existingByEmail = $this->userService->findUserByEmail($user->getEmail());
|
||||
|
||||
if (null !== $existingByEmail && $user->getId() !== $existingByEmail->getId()) {
|
||||
$context->buildViolation(User::getErrorName(User::USER_EXISTING_EMAIL))
|
||||
->atPath('email')
|
||||
->setTranslationDomain('validators')
|
||||
->setCode(User::USER_EXISTING_EMAIL)
|
||||
->addViolation();
|
||||
}
|
||||
}
|
||||
|
||||
if ($user->getUsername() !== null) {
|
||||
$existingByName = $this->userService->findUserByName($user->getUsername());
|
||||
|
||||
if (null !== $existingByName && $user->getId() !== $existingByName->getId()) {
|
||||
$context->buildViolation(User::getErrorName(User::USER_EXISTING_NAME))
|
||||
->atPath('username')
|
||||
->setTranslationDomain('validators')
|
||||
->setCode(User::USER_EXISTING_NAME)
|
||||
->addViolation();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user