Spaces:
No application file
No application file
| namespace Mautic\UserBundle\Security\SAML\User; | |
| use Doctrine\ORM\EntityManagerInterface; | |
| use LightSaml\Model\Protocol\Response; | |
| use LightSaml\SpBundle\Security\User\UserCreatorInterface; | |
| use Mautic\CoreBundle\Helper\EncryptionHelper; | |
| use Mautic\UserBundle\Entity\Role; | |
| use Mautic\UserBundle\Entity\User; | |
| use Mautic\UserBundle\Model\UserModel; | |
| use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher; | |
| use Symfony\Component\Security\Core\Exception\BadCredentialsException; | |
| use Symfony\Component\Security\Core\User\UserInterface; | |
| class UserCreator implements UserCreatorInterface | |
| { | |
| private int $defaultRole; | |
| private array $requiredFields = [ | |
| 'username', | |
| 'firstname', | |
| 'lastname', | |
| 'email', | |
| ]; | |
| public function __construct( | |
| private EntityManagerInterface $entityManager, | |
| private UserMapper $userMapper, | |
| private UserModel $userModel, | |
| private UserPasswordHasher $hasher, | |
| $defaultRole | |
| ) { | |
| $this->defaultRole = (int) $defaultRole; | |
| } | |
| /** | |
| * @return UserInterface|null | |
| */ | |
| public function createUser(Response $response): User | |
| { | |
| if (empty($this->defaultRole)) { | |
| throw new BadCredentialsException('User does not exist.'); | |
| } | |
| /** @var Role $defaultRole */ | |
| $defaultRole = $this->entityManager->getReference(Role::class, $this->defaultRole); | |
| $user = $this->userMapper->getUser($response); | |
| $user->setPassword($this->userModel->checkNewPassword($user, $this->hasher, EncryptionHelper::generateKey())); | |
| $user->setRole($defaultRole); | |
| $this->validateUser($user); | |
| $this->userModel->saveEntity($user); | |
| return $user; | |
| } | |
| /** | |
| * @throws BadCredentialsException | |
| */ | |
| private function validateUser(User $user): void | |
| { | |
| // Validate that the user has all that's required | |
| foreach ($this->requiredFields as $field) { | |
| $getter = 'get'.ucfirst($field); | |
| if (!$user->$getter()) { | |
| throw new BadCredentialsException('User does not include required fields.'); | |
| } | |
| } | |
| } | |
| } | |