‪TYPO3CMS  ‪main
FrontendUserRepository.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
23 
28 {
29  protected readonly ‪Connection ‪$connection;
30 
31  public function ‪__construct(
32  protected readonly ‪Context $context,
33  ‪ConnectionPool $connectionPool,
34  ) {
35  $this->connection = $connectionPool->‪getConnectionForTable('fe_users');
36  }
37 
41  public function ‪updatePasswordAndInvalidateHash(string $forgotPasswordHash, string $hashedPassword): void
42  {
43  $queryBuilder = $this->connection->createQueryBuilder();
44  $currentTimestamp = $this->context->getPropertyFromAspect('date', 'timestamp');
45  $query = $queryBuilder
46  ->update('fe_users')
47  ->set('password', $hashedPassword)
48  ->set('felogin_forgotHash', $this->connection->quote(''), false)
49  ->set('tstamp', $currentTimestamp)
50  ->where($queryBuilder->expr()->eq('felogin_forgotHash', $queryBuilder->createNamedParameter($forgotPasswordHash)));
51  $query->executeStatement();
52  }
53 
57  public function ‪existsUserWithHash(string $hash): bool
58  {
59  $queryBuilder = $this->connection->createQueryBuilder();
60  $query = $queryBuilder
61  ->count('uid')
62  ->from('fe_users')
63  ->where($queryBuilder->expr()->eq('felogin_forgotHash', $queryBuilder->createNamedParameter($hash)));
64  return (bool)$query->executeQuery()->fetchOne();
65  }
66 
70  public function ‪updateForgotHashForUserByUid(int ‪$uid, string $hash): void
71  {
72  $queryBuilder = $this->connection->createQueryBuilder();
73  $query = $queryBuilder
74  ->update('fe_users')
75  ->where($queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter(‪$uid, $this->connection::PARAM_INT)))
76  ->set('felogin_forgotHash', $hash);
77  $query->executeStatement();
78  }
79 
84  public function ‪findUserByUsernameOrEmailOnPages(string $usernameOrEmail, array $pages = []): ?array
85  {
86  if ($usernameOrEmail === '') {
87  return null;
88  }
89  $queryBuilder = $this->connection->createQueryBuilder();
90  $query = $queryBuilder
91  ->select('*')
92  ->from('fe_users')
93  ->where(
94  $queryBuilder->expr()->or(
95  $queryBuilder->expr()->eq('username', $queryBuilder->createNamedParameter($usernameOrEmail)),
96  $queryBuilder->expr()->eq('email', $queryBuilder->createNamedParameter($usernameOrEmail)),
97  ),
98  $queryBuilder->expr()->neq('email', $this->connection->quote('')),
99  );
100  if (!empty($pages)) {
101  // respect storage pid
102  $query->andWhere($queryBuilder->expr()->in('pid', $pages));
103  }
104  $result = $query->executeQuery()->fetchAssociative() ?: null;
105  if ($result) {
106  unset($result['password']);
107  }
108  return $result;
109  }
110 
111  public function ‪findOneByForgotPasswordHash(string $hash): ?array
112  {
113  if ($hash === '') {
114  return null;
115  }
116  $queryBuilder = $this->connection->createQueryBuilder();
117  $query = $queryBuilder
118  ->select('*')
119  ->from('fe_users')
120  ->where($queryBuilder->expr()->eq('felogin_forgotHash', $queryBuilder->createNamedParameter($hash)))
121  ->setMaxResults(1);
122  $row = $query->executeQuery()->fetchAssociative();
123  return is_array($row) ? $row : null;
124  }
125 
126  public function ‪findRedirectIdPageByUserId(int ‪$uid): ?int
127  {
128  $queryBuilder = $this->connection->createQueryBuilder();
129  $queryBuilder->getRestrictions()->removeAll();
130  $query = $queryBuilder
131  ->select('felogin_redirectPid')
132  ->from('fe_users')
133  ->where(
134  $queryBuilder->expr()->neq('felogin_redirectPid', $this->connection->quote('')),
135  $queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter(‪$uid, ‪Connection::PARAM_INT))
136  )
137  ->setMaxResults(1);
138  $column = $query->executeQuery()->fetchOne();
139  return $column === false ? null : (int)$column;
140  }
141 }
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository\updatePasswordAndInvalidateHash
‪updatePasswordAndInvalidateHash(string $forgotPasswordHash, string $hashedPassword)
Definition: FrontendUserRepository.php:41
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository\$connection
‪readonly Connection $connection
Definition: FrontendUserRepository.php:29
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository\updateForgotHashForUserByUid
‪updateForgotHashForUserByUid(int $uid, string $hash)
Definition: FrontendUserRepository.php:70
‪TYPO3\CMS\Core\Database\Connection\PARAM_INT
‪const PARAM_INT
Definition: Connection.php:52
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository\__construct
‪__construct(protected readonly Context $context, ConnectionPool $connectionPool,)
Definition: FrontendUserRepository.php:31
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository
Definition: FrontendUserRepository.php:28
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository\findOneByForgotPasswordHash
‪findOneByForgotPasswordHash(string $hash)
Definition: FrontendUserRepository.php:111
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:54
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository\existsUserWithHash
‪existsUserWithHash(string $hash)
Definition: FrontendUserRepository.php:57
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository\findUserByUsernameOrEmailOnPages
‪findUserByUsernameOrEmailOnPages(string $usernameOrEmail, array $pages=[])
Definition: FrontendUserRepository.php:84
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:41
‪TYPO3\CMS\Webhooks\Message\$uid
‪identifier readonly int $uid
Definition: PageModificationMessage.php:35
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository\findRedirectIdPageByUserId
‪findRedirectIdPageByUserId(int $uid)
Definition: FrontendUserRepository.php:126
‪TYPO3\CMS\Core\Database\ConnectionPool\getConnectionForTable
‪getConnectionForTable(string $tableName)
Definition: ConnectionPool.php:82
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\FrontendLogin\Domain\Repository
Definition: FrontendUserGroupRepository.php:18