Skip to content

Commit 26a204d

Browse files
authored
Made JwtToken parse(String token) as static method (#114)
* Made JwtToken parse(String token) as static method, + renamings
1 parent 6bd90a4 commit 26a204d

File tree

5 files changed

+42
-53
lines changed

5 files changed

+42
-53
lines changed

tests/src/test/java/io/scalecube/security/tokens/jwt/JsonwebtokenResolverTests.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
public class JsonwebtokenResolverTests {
2525

2626
@Test
27-
void testResolveTokenSuccessfully(VaultEnvironment vaultEnvironment) throws Exception {
27+
void testResolveTokenTokenSuccessfully(VaultEnvironment vaultEnvironment) throws Exception {
2828
final var token = vaultEnvironment.newServiceToken();
2929

3030
final var jwtToken =
@@ -35,7 +35,7 @@ void testResolveTokenSuccessfully(VaultEnvironment vaultEnvironment) throws Exce
3535
.requestTimeout(Duration.ofSeconds(3))
3636
.keyTtl(1000)
3737
.build())
38-
.resolve(token)
38+
.resolveToken(token)
3939
.get(3, TimeUnit.SECONDS);
4040

4141
assertNotNull(jwtToken, "jwtToken");
@@ -47,15 +47,7 @@ void testResolveTokenSuccessfully(VaultEnvironment vaultEnvironment) throws Exce
4747
void testParseTokenSuccessfully(VaultEnvironment vaultEnvironment) {
4848
final var token = vaultEnvironment.newServiceToken();
4949

50-
final var jwtToken =
51-
new JsonwebtokenResolver(
52-
JwksKeyLocator.builder()
53-
.jwksUri(vaultEnvironment.jwksUri())
54-
.connectTimeout(Duration.ofSeconds(3))
55-
.requestTimeout(Duration.ofSeconds(3))
56-
.keyTtl(1000)
57-
.build())
58-
.parse(token);
50+
final var jwtToken = JwtToken.parseToken(token);
5951

6052
assertNotNull(jwtToken, "jwtToken");
6153
assertTrue(jwtToken.header().size() > 0, "jwtToken.header: " + jwtToken.header());
@@ -70,7 +62,7 @@ void testJwksKeyLocatorThrowsError(VaultEnvironment vaultEnvironment) {
7062
when(keyLocator.locate(any())).thenThrow(new RuntimeException("Cannot get key"));
7163

7264
try {
73-
new JsonwebtokenResolver(keyLocator).resolve(token).get(3, TimeUnit.SECONDS);
65+
new JsonwebtokenResolver(keyLocator).resolveToken(token).get(3, TimeUnit.SECONDS);
7466
fail("Expected exception");
7567
} catch (Exception e) {
7668
final var ex = getRootCause(e);
@@ -87,7 +79,7 @@ void testJwksKeyLocatorThrowsRetryableError(VaultEnvironment vaultEnvironment) {
8779
when(keyLocator.locate(any())).thenThrow(new JwtUnavailableException("JWKS timeout"));
8880

8981
try {
90-
new JsonwebtokenResolver(keyLocator).resolve(token).get(3, TimeUnit.SECONDS);
82+
new JsonwebtokenResolver(keyLocator).resolveToken(token).get(3, TimeUnit.SECONDS);
9183
fail("Expected exception");
9284
} catch (Exception e) {
9385
final var ex = getRootCause(e);

tests/src/test/java/io/scalecube/security/vault/VaultServiceTokenTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ void testGetServiceTokenSuccessfully(VaultEnvironment vaultEnvironment) throws E
143143
final var jwtToken =
144144
new JsonwebtokenResolver(
145145
JwksKeyLocator.builder().jwksUri(vaultEnvironment.jwksUri()).build())
146-
.resolve(serviceToken)
146+
.resolveToken(serviceToken)
147147
.get(3, TimeUnit.SECONDS);
148148

149149
assertNotNull(jwtToken, "jwtToken");

tokens/src/main/java/io/scalecube/security/tokens/jwt/JsonwebtokenResolver.java

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
package io.scalecube.security.tokens.jwt;
22

3-
import com.fasterxml.jackson.databind.ObjectMapper;
43
import io.jsonwebtoken.Jwts;
54
import io.jsonwebtoken.Locator;
6-
import java.io.IOException;
7-
import java.nio.charset.StandardCharsets;
85
import java.security.Key;
9-
import java.util.Base64;
10-
import java.util.Map;
116
import java.util.Objects;
127
import java.util.concurrent.CompletableFuture;
138
import org.slf4j.Logger;
@@ -24,7 +19,7 @@ public JsonwebtokenResolver(Locator<Key> keyLocator) {
2419
}
2520

2621
@Override
27-
public CompletableFuture<JwtToken> resolve(String token) {
22+
public CompletableFuture<JwtToken> resolveToken(String token) {
2823
return CompletableFuture.supplyAsync(
2924
() -> {
3025
final var claimsJws =
@@ -50,29 +45,6 @@ public CompletableFuture<JwtToken> resolve(String token) {
5045
});
5146
}
5247

53-
@Override
54-
public JwtToken parse(String token) {
55-
String[] parts = token.split("\\.");
56-
if (parts.length != 3) {
57-
throw new JwtTokenException("Invalid JWT format");
58-
}
59-
60-
try {
61-
final var urlDecoder = Base64.getUrlDecoder();
62-
final var headerJson = new String(urlDecoder.decode(parts[0]), StandardCharsets.UTF_8);
63-
final var payloadJson = new String(urlDecoder.decode(parts[1]), StandardCharsets.UTF_8);
64-
65-
final var mapper = new ObjectMapper();
66-
final var header = mapper.readValue(headerJson, Map.class);
67-
final var claims = mapper.readValue(payloadJson, Map.class);
68-
69-
//noinspection unchecked
70-
return new JwtToken(header, claims);
71-
} catch (IOException e) {
72-
throw new JwtTokenException("Failed to decode JWT", e);
73-
}
74-
}
75-
7648
private static String mask(String data) {
7749
if (data == null || data.length() < 5) {
7850
return "*****";
Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,38 @@
11
package io.scalecube.security.tokens.jwt;
22

3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import java.io.IOException;
5+
import java.nio.charset.StandardCharsets;
6+
import java.util.Base64;
37
import java.util.Map;
48

5-
public record JwtToken(Map<String, Object> header, Map<String, Object> payload) {}
9+
public record JwtToken(Map<String, Object> header, Map<String, Object> payload) {
10+
11+
/**
12+
* Parses given JWT without verifying its signature.
13+
*
14+
* @param token jwt token
15+
* @return parsed token
16+
*/
17+
public static JwtToken parseToken(String token) {
18+
String[] parts = token.split("\\.");
19+
if (parts.length != 3) {
20+
throw new JwtTokenException("Invalid JWT format");
21+
}
22+
23+
try {
24+
final var urlDecoder = Base64.getUrlDecoder();
25+
final var headerJson = new String(urlDecoder.decode(parts[0]), StandardCharsets.UTF_8);
26+
final var payloadJson = new String(urlDecoder.decode(parts[1]), StandardCharsets.UTF_8);
27+
28+
final var mapper = new ObjectMapper();
29+
final var header = mapper.readValue(headerJson, Map.class);
30+
final var claims = mapper.readValue(payloadJson, Map.class);
31+
32+
//noinspection unchecked
33+
return new JwtToken(header, claims);
34+
} catch (IOException e) {
35+
throw new JwtTokenException("Failed to decode JWT", e);
36+
}
37+
}
38+
}

tokens/src/main/java/io/scalecube/security/tokens/jwt/JwtTokenResolver.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,5 @@ public interface JwtTokenResolver {
1010
* @param token jwt token
1111
* @return async result with {@link JwtToken}, or error
1212
*/
13-
CompletableFuture<JwtToken> resolve(String token);
14-
15-
/**
16-
* Parses given JWT without verifying its signature.
17-
*
18-
* @param token jwt token
19-
* @return parsed token
20-
*/
21-
JwtToken parse(String token);
13+
CompletableFuture<JwtToken> resolveToken(String token);
2214
}

0 commit comments

Comments
 (0)