1 | <?php namespace Gvera\Services; |
||
19 | * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License |
||
20 | * @link http://www.github.com/veraguido/gv |
||
21 | * |
||
22 | */ |
||
23 | class UserService |
||
24 | { |
||
25 | const MODERATOR_ROLE_PRIORITY = 5; |
||
26 | |||
27 | public GvEntityManager $entityManager; |
||
|
|||
28 | public Session $session; |
||
29 | private ValidationService $validationService; |
||
30 | |||
31 | public function __construct(GvEntityManager $entityManager, Session $session, ValidationService $validationService) |
||
32 | { |
||
33 | $this->validationService = $validationService; |
||
34 | $this->entityManager = $entityManager; |
||
35 | $this->session = $session; |
||
36 | } |
||
37 | |||
38 | /** |
||
39 | * @param $email |
||
40 | * @return bool |
||
41 | * @throws \Exception |
||
42 | */ |
||
43 | public function validateEmail($email) |
||
44 | { |
||
45 | return $this->validationService->validate($email, [new EmailValidationStrategy()]); |
||
46 | } |
||
47 | |||
48 | /** |
||
49 | * @param $plainPassword |
||
50 | * @return string |
||
51 | */ |
||
52 | public function generatePassword($plainPassword) |
||
53 | { |
||
54 | return password_hash($plainPassword, PASSWORD_BCRYPT); |
||
55 | } |
||
56 | |||
57 | /** |
||
58 | * @param $plainPassword |
||
59 | * @param $hash |
||
60 | * @return bool |
||
61 | */ |
||
62 | public function validatePassword($plainPassword, $hash) |
||
63 | { |
||
64 | return password_verify($plainPassword, $hash); |
||
65 | } |
||
66 | |||
67 | /** |
||
68 | * @param $username |
||
69 | * @param $password |
||
70 | * @throws \Exception |
||
71 | */ |
||
72 | public function login($username, $password) |
||
73 | { |
||
74 | $repository = $this->entityManager->getRepository(User::class); |
||
75 | $user = $repository->findOneBy(['username' => $username]); |
||
76 | |||
77 | if ($user && $user->getUsername() == $username && $this->validatePassword($password, $user->getPassword())) { |
||
78 | $this->session->set( |
||
79 | 'user', |
||
80 | [ |
||
81 | 'username' => $username, |
||
82 | 'userEmail' => $user->getEmail(), |
||
83 | 'role' => $user->getRole()->getRolePriority() |
||
84 | ] |
||
85 | ); |
||
86 | } else { |
||
87 | throw new \Exception('user or password are incorrect'); |
||
88 | } |
||
89 | } |
||
90 | |||
91 | public function logout() |
||
92 | { |
||
93 | $this->session->unsetByKey('user'); |
||
94 | } |
||
95 | |||
96 | public function isUserLoggedIn() |
||
97 | { |
||
98 | return $this->session->get('user') != null; |
||
99 | } |
||
132 |