Spaces:
No application file
No application file
File size: 2,170 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
<?php
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.');
}
}
}
}
|