Skip to content

Commit 457d4af

Browse files
committed
- add getuser to Token interface
- set user in JWToken
1 parent 92b043e commit 457d4af

File tree

5 files changed

+59
-47
lines changed

5 files changed

+59
-47
lines changed

core/src/main/java/redis/clients/authentication/core/SimpleToken.java

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,24 @@
44

55
public class SimpleToken implements Token {
66

7+
private String user;
78
private String value;
89
private long expiresAt;
910
private long receivedAt;
10-
private Map<String, String> claims;
11+
private Map<String, ?> claims;
1112

12-
public SimpleToken(String value, long expiresAt, long receivedAt, Map<String, String> claims) {
13+
public SimpleToken(String user, String value, long expiresAt, long receivedAt,
14+
Map<String, ?> claims) {
15+
this.user = user;
1316
this.value = value;
1417
this.expiresAt = expiresAt;
1518
this.receivedAt = receivedAt;
1619
this.claims = claims;
1720
}
1821

1922
@Override
20-
public boolean isExpired() {
21-
return System.currentTimeMillis() > expiresAt;
22-
}
23-
24-
@Override
25-
public long ttl() {
26-
return expiresAt - System.currentTimeMillis();
23+
public String getUser() {
24+
return user;
2725
}
2826

2927
@Override
@@ -42,7 +40,18 @@ public long getReceivedAt() {
4240
}
4341

4442
@Override
45-
public String tryGet(String key) {
46-
return claims.get(key);
43+
public <T> T tryGet(String key, Class<T> clazz) {
44+
return (T) claims.get(key);
45+
}
46+
47+
@Override
48+
public boolean isExpired() {
49+
return System.currentTimeMillis() > expiresAt;
4750
}
51+
52+
@Override
53+
public long ttl() {
54+
return expiresAt - System.currentTimeMillis();
55+
}
56+
4857
}

core/src/main/java/redis/clients/authentication/core/Token.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,18 @@
22

33
public interface Token {
44

5-
public boolean isExpired();
6-
7-
public long ttl();
5+
public String getUser();
86

97
public String getValue();
108

119
public long getExpiresAt();
1210

1311
public long getReceivedAt();
1412

15-
public String tryGet(String key);
13+
public boolean isExpired();
14+
15+
public long ttl();
16+
17+
public <T> T tryGet(String key, Class<T> clazz);
18+
1619
}

core/src/test/java/redis/clients/authentication/CoreAuthenticationUnitTests.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import static org.mockito.Mockito.times;
1515
import static org.mockito.Mockito.verify;
1616

17-
import java.util.Collections;
1817
import java.util.concurrent.CountDownLatch;
1918
import java.util.concurrent.ExecutionException;
2019
import java.util.concurrent.TimeoutException;
@@ -131,9 +130,8 @@ public void testCalculateRenewalDelay() {
131130
public void testTokenManagerStart()
132131
throws InterruptedException, ExecutionException, TimeoutException {
133132

134-
IdentityProvider identityProvider = () -> new SimpleToken("tokenVal",
135-
System.currentTimeMillis() + 5 * 1000, System.currentTimeMillis(),
136-
Collections.singletonMap("oid", "user1"));
133+
IdentityProvider identityProvider = () -> new SimpleToken("user1", "tokenVal",
134+
System.currentTimeMillis() + 5 * 1000, System.currentTimeMillis(), null);
137135

138136
TokenManager tokenManager = new TokenManager(identityProvider,
139137
new TokenManagerConfig(0.7F, 200, 2000, null));
@@ -198,8 +196,8 @@ public void testTokenManagerWithFailingTokenRequest()
198196
if (requesLatch.getCount() > 0) {
199197
throw new RuntimeException("Test exception from identity provider!");
200198
}
201-
return new SimpleToken("tokenValX", System.currentTimeMillis() + 50 * 1000,
202-
System.currentTimeMillis(), Collections.singletonMap("oid", "user1"));
199+
return new SimpleToken("user1", "tokenValX", System.currentTimeMillis() + 50 * 1000,
200+
System.currentTimeMillis(), null);
203201
});
204202

205203
ArgumentCaptor<Token> argument = ArgumentCaptor.forClass(Token.class);
@@ -230,8 +228,8 @@ public void testTokenManagerWithHangingTokenRequest()
230228
if (requesLatch.getCount() > 0) {
231229
delay(delayDuration);
232230
}
233-
return new SimpleToken("tokenValX", System.currentTimeMillis() + tokenLifetime,
234-
System.currentTimeMillis(), Collections.singletonMap("oid", "user1"));
231+
return new SimpleToken("user1", "tokenValX", System.currentTimeMillis() + tokenLifetime,
232+
System.currentTimeMillis(), null);
235233
};
236234

237235
TokenManager tokenManager = new TokenManager(identityProvider, new TokenManagerConfig(0.7F, 200,

entraid/src/main/java/redis/clients/authentication/entraid/JWToken.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
package redis.clients.authentication.entraid;
22

3-
import java.util.function.Function;
3+
import java.util.function.BiFunction;
44

55
import com.auth0.jwt.interfaces.DecodedJWT;
66
import com.auth0.jwt.JWT;
77

88
import redis.clients.authentication.core.Token;
99

1010
public class JWToken implements Token {
11+
private final String user;
1112
private final String token;
1213
private final long expiresAt;
1314
private final long receivedAt;
14-
private final Function<String, String> claimQuery;
15+
private final BiFunction<String, Class<?>, ?> claimQuery;
1516

1617
public JWToken(String token) {
1718
this.token = token;
1819
DecodedJWT jwt = JWT.decode(token);
20+
this.user = jwt.getClaim("oid").asString();
1921
this.expiresAt = jwt.getExpiresAt().getTime();
2022
this.receivedAt = System.currentTimeMillis();
21-
this.claimQuery = key -> jwt.getClaim(key).asString();
23+
this.claimQuery = (key, clazz) -> jwt.getClaim(key).as(clazz);
2224
}
2325

2426
@Override
@@ -31,6 +33,11 @@ public long ttl() {
3133
return expiresAt - System.currentTimeMillis();
3234
}
3335

36+
@Override
37+
public String getUser() {
38+
return user;
39+
}
40+
3441
@Override
3542
public String getValue() {
3643
return token;
@@ -67,7 +74,8 @@ public boolean equals(Object that) {
6774
}
6875

6976
@Override
70-
public String tryGet(String key) {
71-
return claimQuery.apply(key);
77+
public <T> T tryGet(String key, Class<T> clazz) {
78+
return (T) claimQuery.apply(key, clazz);
7279
}
80+
7381
}

entraid/src/test/java/redis/clients/authentication/EntraIDUnitTests.java

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ public class EntraIDUnitTests {
8282
private static final long TOKEN_ISSUE_TIME = System.currentTimeMillis();
8383
private static final String TOKEN_OID = "user1";
8484

85-
private Token simpleToken = new SimpleToken(TOKEN_VALUE, TOKEN_EXPIRATION_TIME,
86-
TOKEN_ISSUE_TIME, Collections.singletonMap("oid", TOKEN_OID));
85+
private Token simpleToken = new SimpleToken(TOKEN_OID, TOKEN_VALUE, TOKEN_EXPIRATION_TIME,
86+
TOKEN_ISSUE_TIME, null);
8787

8888
private TestContext testCtx = TestContext.DEFAULT;
8989

@@ -159,8 +159,7 @@ public void tokenRequestfailsWithException_fakeIdentityProviderTest() {
159159
TokenRequestException e = assertThrows(TokenRequestException.class,
160160
() -> tokenManager.start(mock(TokenListener.class), true));
161161

162-
assertEquals("Test exception from identity provider!",
163-
e.getCause().getMessage());
162+
assertEquals("Test exception from identity provider!", e.getCause().getMessage());
164163
}
165164

166165
// T.2.1
@@ -267,9 +266,8 @@ public void tokenAcquisitionTimeoutTest() throws InterruptedException, TimeoutEx
267266
public void backgroundTokenRenewalTest() throws InterruptedException, TimeoutException {
268267
AtomicInteger numberOfTokens = new AtomicInteger(0);
269268

270-
IdentityProvider identityProvider = () -> new SimpleToken(TOKEN_VALUE,
271-
System.currentTimeMillis() + 1000, System.currentTimeMillis(),
272-
Collections.singletonMap("oid", TOKEN_OID));
269+
IdentityProvider identityProvider = () -> new SimpleToken(TOKEN_OID, TOKEN_VALUE,
270+
System.currentTimeMillis() + 1000, System.currentTimeMillis(), null);
273271

274272
TokenManager tokenManager = new TokenManager(identityProvider, tokenManagerConfig);
275273
TokenListener listener = new TokenListener() {
@@ -326,9 +324,8 @@ public void customRenewalTimingTest() {
326324
AtomicInteger numberOfTokens = new AtomicInteger(0);
327325
AtomicInteger timeDiff = new AtomicInteger(0);
328326

329-
IdentityProvider identityProvider = () -> new SimpleToken(TOKEN_VALUE,
330-
System.currentTimeMillis() + 1000, System.currentTimeMillis(),
331-
Collections.singletonMap("oid", TOKEN_OID));
327+
IdentityProvider identityProvider = () -> new SimpleToken(TOKEN_OID, TOKEN_VALUE,
328+
System.currentTimeMillis() + 1000, System.currentTimeMillis(), null);
332329

333330
TokenManager tokenManager = new TokenManager(identityProvider, tokenManagerConfig);
334331
TokenListener listener = new TokenListener() {
@@ -368,9 +365,8 @@ public void highPercentage_edgeCaseRenewalTimingTest() {
368365
List<Token> tokens = new ArrayList<Token>();
369366
int validDurationInMs = 1000;
370367

371-
IdentityProvider identityProvider = () -> new SimpleToken(TOKEN_VALUE,
372-
System.currentTimeMillis() + validDurationInMs, System.currentTimeMillis(),
373-
Collections.singletonMap("oid", TOKEN_OID));
368+
IdentityProvider identityProvider = () -> new SimpleToken(TOKEN_OID, TOKEN_VALUE,
369+
System.currentTimeMillis() + validDurationInMs, System.currentTimeMillis(), null);
374370

375371
TokenManagerConfig tokenManagerConfig = new TokenManagerConfig(0.99F, 0,
376372
TOKEN_REQUEST_EXEC_TIMEOUT,
@@ -413,9 +409,8 @@ public void lowPercentage_edgeCaseRenewalTimingTest() {
413409
List<Token> tokens = new ArrayList<Token>();
414410
int validDurationInMs = 1000;
415411

416-
IdentityProvider identityProvider = () -> new SimpleToken(TOKEN_VALUE,
417-
System.currentTimeMillis() + validDurationInMs, System.currentTimeMillis(),
418-
Collections.singletonMap("oid", TOKEN_OID));
412+
IdentityProvider identityProvider = () -> new SimpleToken(TOKEN_OID, TOKEN_VALUE,
413+
System.currentTimeMillis() + validDurationInMs, System.currentTimeMillis(), null);
419414

420415
TokenManagerConfig tokenManagerConfig = new TokenManagerConfig(0.01F, 0,
421416
TOKEN_REQUEST_EXEC_TIMEOUT,
@@ -510,9 +505,8 @@ public void cacheUpdateOnRenewalTest() {
510505

511506
AtomicInteger numberOfTokens = new AtomicInteger(0);
512507
IdentityProvider identityProvider = () -> {
513-
return new SimpleToken("" + numberOfTokens.incrementAndGet(),
514-
System.currentTimeMillis() + 500, System.currentTimeMillis(),
515-
Collections.singletonMap("oid", "user1"));
508+
return new SimpleToken("user1", "" + numberOfTokens.incrementAndGet(),
509+
System.currentTimeMillis() + 500, System.currentTimeMillis(), null);
516510
};
517511
TokenManager tokenManager = new TokenManager(identityProvider, tokenManagerConfig);
518512
assertNull(tokenManager.getCurrentToken());

0 commit comments

Comments
 (0)