2727 */
2828namespace OC \Authentication \Token ;
2929
30+ use Generator ;
3031use OCP \AppFramework \Db \DoesNotExistException ;
3132use OCP \AppFramework \Db \QBMapper ;
33+ use OCP \Authentication \Token \IToken ;
3234use OCP \DB \QueryBuilder \IQueryBuilder ;
3335use OCP \IDBConnection ;
3436
@@ -42,10 +44,8 @@ public function __construct(IDBConnection $db) {
4244
4345 /**
4446 * Invalidate (delete) a given token
45- *
46- * @param string $token
4747 */
48- public function invalidate (string $ token ) {
48+ public function invalidate (string $ token ): void {
4949 /* @var $qb IQueryBuilder */
5050 $ qb = $ this ->db ->getQueryBuilder ();
5151 $ qb ->delete ($ this ->tableName )
@@ -55,27 +55,39 @@ public function invalidate(string $token) {
5555 }
5656
5757 /**
58- * @param int $olderThan
59- * @param int $remember
58+ * @return Generator<string> Tokens
6059 */
61- public function invalidateOld (int $ olderThan , int $ remember = IToken::DO_NOT_REMEMBER ) {
60+ public function listOld (int $ olderThan , int $ remember = IToken::DO_NOT_REMEMBER ): Generator {
6261 /* @var $qb IQueryBuilder */
6362 $ qb = $ this ->db ->getQueryBuilder ();
64- $ qb ->delete ($ this ->tableName )
63+ $ result = $ qb ->select ('token ' )
64+ ->from ($ this ->tableName )
6565 ->where ($ qb ->expr ()->lt ('last_activity ' , $ qb ->createNamedParameter ($ olderThan , IQueryBuilder::PARAM_INT )))
6666 ->andWhere ($ qb ->expr ()->eq ('type ' , $ qb ->createNamedParameter (IToken::TEMPORARY_TOKEN , IQueryBuilder::PARAM_INT )))
6767 ->andWhere ($ qb ->expr ()->eq ('remember ' , $ qb ->createNamedParameter ($ remember , IQueryBuilder::PARAM_INT )))
6868 ->andWhere ($ qb ->expr ()->eq ('version ' , $ qb ->createNamedParameter (PublicKeyToken::VERSION , IQueryBuilder::PARAM_INT )))
69- ->execute ();
69+ ->executeQuery ();
70+
71+ while ($ tokenHash = $ result ->fetchOne ()) {
72+ yield $ tokenHash ;
73+ }
7074 }
7175
72- public function invalidateLastUsedBefore (string $ uid , int $ before ): int {
76+ /**
77+ * @return Generator<string> Tokens
78+ */
79+ public function listLastUsedBefore (string $ uid , int $ before ): Generator {
7380 $ qb = $ this ->db ->getQueryBuilder ();
74- $ qb ->delete ($ this ->tableName )
81+ $ result = $ qb ->select ('token ' )
82+ ->from ($ this ->tableName )
7583 ->where ($ qb ->expr ()->eq ('uid ' , $ qb ->createNamedParameter ($ uid )))
7684 ->andWhere ($ qb ->expr ()->lt ('last_activity ' , $ qb ->createNamedParameter ($ before , IQueryBuilder::PARAM_INT )))
77- ->andWhere ($ qb ->expr ()->eq ('version ' , $ qb ->createNamedParameter (PublicKeyToken::VERSION , IQueryBuilder::PARAM_INT )));
78- return $ qb ->executeStatement ();
85+ ->andWhere ($ qb ->expr ()->eq ('version ' , $ qb ->createNamedParameter (PublicKeyToken::VERSION , IQueryBuilder::PARAM_INT )))
86+ ->executeQuery ();
87+
88+ while ($ tokenHash = $ result ->fetchOne ()) {
89+ yield $ tokenHash ;
90+ }
7991 }
8092
8193 /**
@@ -150,30 +162,31 @@ public function getTokenByUser(string $uid): array {
150162 return $ entities ;
151163 }
152164
153- public function deleteById (string $ uid , int $ id ) {
165+ public function getTokenByUserAndId (string $ uid , int $ id ): ? string {
154166 /* @var $qb IQueryBuilder */
155167 $ qb = $ this ->db ->getQueryBuilder ();
156- $ qb ->delete ($ this ->tableName )
168+ $ qb ->select ('token ' )
169+ ->from ($ this ->tableName )
157170 ->where ($ qb ->expr ()->eq ('id ' , $ qb ->createNamedParameter ($ id )))
158171 ->andWhere ($ qb ->expr ()->eq ('uid ' , $ qb ->createNamedParameter ($ uid )))
159172 ->andWhere ($ qb ->expr ()->eq ('version ' , $ qb ->createNamedParameter (PublicKeyToken::VERSION , IQueryBuilder::PARAM_INT )));
160- $ qb ->execute () ;
173+ return $ qb ->executeQuery ()-> fetchOne () ?: null ;
161174 }
162175
163176 /**
164177 * delete all auth token which belong to a specific client if the client was deleted
165178 *
166179 * @param string $name
167180 */
168- public function deleteByName (string $ name ) {
181+ public function deleteByName (string $ name ): void {
169182 $ qb = $ this ->db ->getQueryBuilder ();
170183 $ qb ->delete ($ this ->tableName )
171184 ->where ($ qb ->expr ()->eq ('name ' , $ qb ->createNamedParameter ($ name ), IQueryBuilder::PARAM_STR ))
172185 ->andWhere ($ qb ->expr ()->eq ('version ' , $ qb ->createNamedParameter (PublicKeyToken::VERSION , IQueryBuilder::PARAM_INT )));
173- $ qb ->execute ();
186+ $ qb ->executeStatement ();
174187 }
175188
176- public function deleteTempToken (PublicKeyToken $ except ) {
189+ public function deleteTempToken (PublicKeyToken $ except ): void {
177190 $ qb = $ this ->db ->getQueryBuilder ();
178191
179192 $ qb ->delete ($ this ->tableName )
@@ -182,7 +195,7 @@ public function deleteTempToken(PublicKeyToken $except) {
182195 ->andWhere ($ qb ->expr ()->neq ('id ' , $ qb ->createNamedParameter ($ except ->getId ())))
183196 ->andWhere ($ qb ->expr ()->eq ('version ' , $ qb ->createNamedParameter (PublicKeyToken::VERSION , IQueryBuilder::PARAM_INT )));
184197
185- $ qb ->execute ();
198+ $ qb ->executeStatement ();
186199 }
187200
188201 public function hasExpiredTokens (string $ uid ): bool {
0 commit comments