Skip to content

Commit e1e8923

Browse files
committed
added cleaner for duplicate refresh tokens
1 parent 542afca commit e1e8923

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

openid-connect-server/src/main/java/org/mitre/oauth2/repository/impl/JpaOAuth2TokenRepository.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -229,18 +229,12 @@ public Set<OAuth2AccessTokenEntity> getAccessTokensForResourceSet(ResourceSet rs
229229
@Override
230230
@Transactional(value="defaultTransactionManager")
231231
public void clearDuplicateAccessTokens() {
232-
/*
233-
*
234-
* delete from access_token where token_value in
235-
* (select token_value from (select token_value, count(*) as count from
236-
* access_token group by token_value having count > 1) duplicate_tokens)
237-
*/
238232

239233
Query query = manager.createQuery("select a.jwt, count(1) as c from OAuth2AccessTokenEntity a GROUP BY a.jwt HAVING c > 1");
240234
List<Object[]> resultList = query.getResultList();
241235
List<JWT> values = new ArrayList<>();
242236
for (Object[] r : resultList) {
243-
logger.warn("Found duplicate: {}, {}", r[0], r[1]);
237+
logger.warn("Found duplicate access tokens: {}, {}", ((JWT)r[0]).serialize(), r[1]);
244238
values.add((JWT) r[0]);
245239
}
246240
if (values.size() > 0) {
@@ -249,7 +243,7 @@ public void clearDuplicateAccessTokens() {
249243
Root<OAuth2AccessTokenEntity> root = criteriaDelete.from(OAuth2AccessTokenEntity.class);
250244
criteriaDelete.where(root.get("jwt").in(values));
251245
int result = manager.createQuery(criteriaDelete).executeUpdate();
252-
logger.warn("Results from delete: {}", result);
246+
logger.warn("Deleted {} duplicate access tokens", result);
253247
}
254248
}
255249

@@ -258,6 +252,21 @@ public void clearDuplicateAccessTokens() {
258252
*/
259253
@Override
260254
public void clearDuplicateRefreshTokens() {
255+
Query query = manager.createQuery("select a.jwt, count(1) as c from OAuth2RefreshTokenEntity a GROUP BY a.jwt HAVING c > 1");
256+
List<Object[]> resultList = query.getResultList();
257+
List<JWT> values = new ArrayList<>();
258+
for (Object[] r : resultList) {
259+
logger.warn("Found duplicate refresh tokens: {}, {}", ((JWT)r[0]).serialize(), r[1]);
260+
values.add((JWT) r[0]);
261+
}
262+
if (values.size() > 0) {
263+
CriteriaBuilder cb = manager.getCriteriaBuilder();
264+
CriteriaDelete<OAuth2RefreshTokenEntity> criteriaDelete = cb.createCriteriaDelete(OAuth2RefreshTokenEntity.class);
265+
Root<OAuth2RefreshTokenEntity> root = criteriaDelete.from(OAuth2RefreshTokenEntity.class);
266+
criteriaDelete.where(root.get("jwt").in(values));
267+
int result = manager.createQuery(criteriaDelete).executeUpdate();
268+
logger.warn("Deleted {} duplicate refresh tokens", result);
269+
}
261270

262271
}
263272

0 commit comments

Comments
 (0)