-
Notifications
You must be signed in to change notification settings - Fork 69
Expand file tree
/
Copy pathUserService.php
More file actions
101 lines (86 loc) · 3.21 KB
/
UserService.php
File metadata and controls
101 lines (86 loc) · 3.21 KB
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
declare(strict_types=1);
namespace AppBundle\Association\UserMembership;
use Afup\Site\Association\Cotisations;
use AppBundle\Association\MemberType;
use AppBundle\Association\Model\Repository\UserRepository;
use AppBundle\Association\Model\User;
use AppBundle\Email\Mailer\Mailer;
use AppBundle\Email\Mailer\MailUser;
use AppBundle\Email\Mailer\MailUserFactory;
use AppBundle\Email\Mailer\Message;
use AppBundle\MembershipFee\Model\MembershipFee;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class UserService
{
private string $sender = MailUser::DEFAULT_SENDER_EMAIL;
public function __construct(
private readonly UserRepository $userRepository,
private readonly Mailer $mailer,
private readonly UrlGeneratorInterface $urlGenerator,
private readonly Cotisations $cotisations,
private readonly UserPasswordHasherInterface $passwordHasher,
) {}
public function generateRandomPassword(): string
{
return bin2hex(random_bytes(8));
}
public function resetPassword(User $user): void
{
$newPassword = $this->generateRandomPassword();
$user->setPassword($this->passwordHasher->hashPassword($user, $newPassword));
$this->userRepository->save($user);
$login = $user->getUsername();
$url = $this->urlGenerator->generate('admin_login', [], UrlGeneratorInterface::ABSOLUTE_URL);
$message = new Message(
'AFUP : Mot de passe perdu ?',
new MailUser($this->sender),
new MailUser($user->getEmail(), $user->getFirstName() . ' ' . $user->getLastName()),
);
$message->setContent(<<<BODY
Votre nouveau mot de passe est indiqué ci-dessous.
Il vous permettra de vous connecter dès maintenant au site de l'AFUP.
Votre identifiant : $login
Votre mot de passe : $newPassword
$url
BODY
);
$this->mailer->send($message);
}
/**
* @param string $email
*/
public function resetPasswordForEmail($email): void
{
$user = $this->userRepository->loadUserByEmailOrAlternateEmail($email);
if (null !== $user) {
$this->resetPassword($user);
}
}
public function sendWelcomeEmail(User $user): bool
{
$message = new Message(
'Votre compte afup.org',
MailUserFactory::bureau(),
new MailUser($user->getEmail(), sprintf('%s %s', $user->getFirstName(), $user->getLastName())),
);
$this->mailer->renderTemplate($message, 'mail_templates/confirmation_creation_compte.html.twig', [
'login' => $user->getUsername(),
'adresse' => MailUserFactory::afup()->getEmail(),
'ville' => '',
]);
return $this->mailer->send($message);
}
public function getLastSubscription(User $user): ?MembershipFee
{
if ($user->getCompanyId()) {
$id = $user->getCompanyId();
$personType = MemberType::MemberCompany;
} else {
$id = $user->getId();
$personType = MemberType::MemberPhysical;
}
return $this->cotisations->getLastestByUserTypeAndId($personType, $id);
}
}