Skip to content

Commit 2735801

Browse files
removed old claim getter method
1 parent dd7ed13 commit 2735801

File tree

5 files changed

+56
-85
lines changed

5 files changed

+56
-85
lines changed

src/main/java/com/bastiaanjansen/jwt/Claims.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
import com.bastiaanjansen.jwt.Utils.Base64Utils;
44
import org.json.JSONObject;
55

6+
import java.util.Arrays;
7+
import java.util.Date;
68
import java.util.HashMap;
79
import java.util.Map;
810

911
public class Claims {
12+
private final String[] registeredDateClaims = { Payload.Registered.EXPIRATION_TIME, Payload.Registered.ISSUED_AT, Payload.Registered.NOT_BEFORE };
1013
protected final Map<String, Object> claims;
1114

1215
protected Claims() {
@@ -26,12 +29,24 @@ public String base64Encoded() {
2629
return Base64Utils.encodeBase64URL(json);
2730
}
2831

29-
public Object getClaim(String name) {
30-
return claims.get(name);
31-
}
32-
32+
/**
33+
* Get a claim by name and cast it to a specific type
34+
*
35+
* @param name of the claim
36+
* @param type of the claim
37+
* @param <T> type of the claim
38+
* @return claim value cast to specified type
39+
*/
3340
public <T> T getClaim(String name, Class<T> type) {
3441
Object value = claims.get(name);
42+
43+
boolean isDateClaim = Arrays.asList(registeredDateClaims).contains(name);
44+
45+
if (isDateClaim) {
46+
long millisSinceEpoch = Long.parseLong(String.valueOf(value));
47+
value = new Date(millisSinceEpoch);
48+
}
49+
3550
return type.cast(value);
3651
}
3752

src/main/java/com/bastiaanjansen/jwt/Payload.java

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void setAudience(String... audience) {
5151
}
5252

5353
public String[] getAudience() {
54-
Object audience = claims.get(Registered.AUDIENCE);
54+
Object audience = getClaim(Registered.AUDIENCE, Object.class);
5555

5656
if (!(audience instanceof Object[]))
5757
return new String[] {(String) audience};
@@ -68,8 +68,7 @@ public void setExpirationTime(Date expirationTime) {
6868
}
6969

7070
public Date getExpirationTime() {
71-
Object expirationDate = claims.get(Registered.EXPIRATION_TIME);
72-
return getDate(expirationDate);
71+
return getClaim(Registered.EXPIRATION_TIME, Date.class);
7372
}
7473

7574
public void setNotBefore(long timeSinceEpoch) {
@@ -81,8 +80,7 @@ public void setNotBefore(Date notBefore) {
8180
}
8281

8382
public Date getNotBefore() {
84-
Object notBefore = claims.get(Registered.NOT_BEFORE);
85-
return getDate(notBefore);
83+
return getClaim(Registered.NOT_BEFORE, Date.class);
8684
}
8785

8886
public void setIssuedAt(long timeSinceEpoch) {
@@ -94,8 +92,7 @@ public void setIssuedAt(Date issuedAt) {
9492
}
9593

9694
public Date getIssuedAt() {
97-
Object issuedAt = claims.get(Registered.ISSUED_AT);
98-
return getDate(issuedAt);
95+
return getClaim(Registered.ISSUED_AT, Date.class);
9996
}
10097

10198
public void setID(String id) {
@@ -105,16 +102,4 @@ public void setID(String id) {
105102
public String getID() {
106103
return getClaim(Registered.JWT_ID, String.class);
107104
}
108-
109-
private Date getDate(Object object) {
110-
if (object == null)
111-
return null;
112-
113-
if (object instanceof Number) {
114-
long millis = ((Number) object).longValue();
115-
return new Date(millis);
116-
}
117-
118-
throw new IllegalStateException("Cannot create date from " + object);
119-
}
120105
}
Lines changed: 5 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.bastiaanjansen.jwt;
22

33
import com.bastiaanjansen.jwt.Algorithms.Algorithm;
4+
import com.bastiaanjansen.jwt.Exceptions.JWTCreationException;
45
import com.bastiaanjansen.jwt.Exceptions.JWTException;
56

67
import java.security.*;
@@ -14,70 +15,13 @@
1415
import java.util.Date;
1516

1617
public class App {
17-
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException {
18-
19-
// KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
20-
// keyPairGenerator.initialize(2048, new SecureRandom());
21-
// KeyPair pair = keyPairGenerator.generateKeyPair();
22-
23-
// System.out.println("Public: " + Base64.getEncoder().encodeToString(pair.getPublic().getEncoded()));
24-
// System.out.println("Private: " + Base64.getEncoder().encodeToString(pair.getPrivate().getEncoded()));
25-
26-
String publicKeyContent = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm5PpsWJJvL3W+N0wiLniRbbrKx5qhxob/1hEfEzCOQLwl8pbO5UiuTE7nhdvHyCmQhAexpKIL0PRpKwHEWNN/KOxAZ5xdSIZU6W44Inq/hkK5ugbCViV4ONnpz+I1XoDNAi4ITJVpIPyqu2r4C4BTAZnozca8fe7p6VYzECnP3OZT+ELota4TRy3G5W6WIFayftGuvx0dncJOgy6SUaNuUBs2t9KXFHmxfYCz78WLq3QWDz21f1siqib+qHAdH5aNlPAkpqyP2hPLoc8VHKKs+Eb0QlkpW9ZABoybrHCWnPI1C4mdLMQ4MWqEgKKWvqrjDZDBfRfk6U/VUDuneQ9ZwIDAQAB";
27-
String privateKeyContent = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCbk+mxYkm8vdb43TCIueJFtusrHmqHGhv/WER8TMI5AvCXyls7lSK5MTueF28fIKZCEB7GkogvQ9GkrAcRY038o7EBnnF1IhlTpbjgier+GQrm6BsJWJXg42enP4jVegM0CLghMlWkg/Kq7avgLgFMBmejNxrx97unpVjMQKc/c5lP4Qui1rhNHLcblbpYgVrJ+0a6/HR2dwk6DLpJRo25QGza30pcUebF9gLPvxYurdBYPPbV/WyKqJv6ocB0flo2U8CSmrI/aE8uhzxUcoqz4RvRCWSlb1kAGjJuscJac8jULiZ0sxDgxaoSAopa+quMNkMF9F+TpT9VQO6d5D1nAgMBAAECggEATT58SiktyTtMb9WKkmgQc2KlkowQgjGxcu9FWZ3W1O2jvQmokIW0btSF8DFcZ80THzvXu+nnGeiHP0Z2X+i5QNWZPd+IH4slngVrLHjtpumSIyFcwyArkjP2M/D0pGFnE7+8hCb0pLEqnDlTHARben63mC70/uxsTIlo9EipgXPCOBDAd/QsE3dhlO4SbEmCJMQR6eV1B8an+40ZbhQCG8IO832jDiDYabS5tyOPgU2ahG5UhzqsfPFQBlgJ2ePPyXXYaQlS1Gj8OD3ISJbCSxiitejbKjSaGsjoBv+81lkd3vqOYSZQDMf02rSRwp57mFfZ3G7Yk9lS+Q8abmUsyQKBgQDUtzLp3O+1363sT8lAjO9zWEXAqWT38mNaBqjR5c3Kv18xzm9LjTd9GfEgYgFmN6fkr1I85ZI35wR6pKjjJwUVci6615N2ghhTrcw9f8/zD/IejVPmYYIUdfRQ9FTlvM/RhDRCiyd1k7xQ/uGfy+Swu4bSzypzHUYeVQ6Xv5c/YwKBgQC7PEjjkzcLjn0EJcgnW11Md+Yrvg9NBKJO2JdMXfwRhN2NDAobbshJqaZeffgrTfU8KuGLmGNPE7UFnxOGnIVdDQwvjhde4LWuL/R6n10zu3tCmqvxBx7yzSO1+Ldi5bT9VI04x/gnGPQn489p0GBNWrN3AmC+RFXOridoVItTLQKBgBu3HvgfpFADK+sdXjB97HkP6E65A4HW4CELuxVWJuEi3ClmJ1QluzQenC9G9b22xLZkLYfntYx5GjlMmQC3xc7MiNApZHpNaxQEEhd1PsgBrN9UNLlQvR0jXUjq/ODOIBnBavm8ndCRBjlbbFRgwZRRariu624CQ2+ST4twGCnXAoGBAKvajGhdgiOYWEULTKhbIsqCLoCtxSuC+lr2UACnLysBUb0ZdNlzGGEMVwjaBIPy3QmprjVL3LMDOp77QJfIaFxdEnc/q1HJXNiRaYt3ZLuL9HnQr8reJ1jiU0m+DMy4XCQ9jBW27Z0tOUS3w3Oy8AFwI9MzGoro+/1lOgR3vR3NAoGAdmP0aPZfFHM6mdtkKVmNjPM8BTYhok+pEBzntNosUGqIT2u+TPFDV8aTYEti6mIrMVTO1mHRoqi9VL0WDHRT3IqTn3JE+KR2fUlMSE/PqW8MJ+70EhelgJj+bL6iyecnPqdquES57DYoFkdvqtz0qNL2gdzK5ay55YWgYbk0szw=";
28-
29-
KeyFactory kf = KeyFactory.getInstance("RSA");
30-
31-
PKCS8EncodedKeySpec keySpecPKCS8 = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKeyContent));
32-
PrivateKey privateKey = kf.generatePrivate(keySpecPKCS8);
33-
34-
X509EncodedKeySpec keySpecX509 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyContent));
35-
RSAPublicKey publicKey = (RSAPublicKey) kf.generatePublic(keySpecX509);
36-
37-
KeyPair keyPair = new KeyPair(publicKey, privateKey);
38-
39-
Algorithm algorithm = Algorithm.RSA384(keyPair);
18+
public static void main(String[] args) throws JWTCreationException {
19+
Algorithm algorithm = Algorithm.HMAC256("secret");
4020
JWT.Builder builder = new JWT.Builder(algorithm);
4121

42-
Calendar now = Calendar.getInstance();
43-
now.add(Calendar.SECOND, -10);
44-
45-
// builder
46-
// .withIssuer("issuer")
47-
// .withAudience("audience", "audience2")
48-
// .withID("id")
49-
// .withIssuedAt(new Date())
50-
// .withNotBefore(now.getTime())
51-
// .withClaim("username", "BastiaanJansen")
52-
// .withHeader("test", "test");
53-
54-
builder.withClaim("sd", "sd");
55-
56-
try {
57-
JWT jwt = builder.build();
58-
59-
// JWT newJWT = JWT.fromRawJWT(algorithm, "eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJpc3N1ZXIiLCJhdWQiOiJhdWRpZW5jZSIsImlhdCI6MTYxNDY3NjkyNjE3MiwianRpIjoiaWQifQ.ibsMduBXhE8Y1TkDAazH-J7BaAtcJTcwmHfzvQg9EWS6uKZFsA_7z4LYtSa-nnR1");
60-
61-
jwt.validate();
62-
//
63-
System.out.println("JWT: " + jwt.sign());
64-
//
65-
jwt.validate();
66-
67-
// JWTValidator verifier = new DefaultJWTValidator.Builder()
68-
// .withType("JWT")
69-
// .withNotBefore(now.getTime())
70-
// .withOneOfAudience("audience")
71-
// .withClaim("username", "BastiaanJansen"::equals)
72-
// .withHeader("test", "test"::equals)
73-
// .build();
74-
// verifier.validate(jwt);
75-
76-
Payload payload = jwt.getPayload();
22+
JWT jwt = builder.build();
7723

78-
} catch (JWTException e) {
79-
e.printStackTrace();
80-
}
24+
System.out.println(jwt.sign());
8125
}
8226
}
8327

src/test/java/com/bastiaanjansen/jwt/JWTTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ void builder_withHeader() throws JWTCreationException {
138138
JWT jwt = new JWT.Builder(algorithm).withHeader("custom-header", "custom-header-value").build();
139139
String expected = "custom-header-value";
140140

141-
assertThat(jwt.getHeader().getClaim("custom-header"), is(expected));
141+
assertThat(jwt.getHeader().getClaim("custom-header", String.class), is(expected));
142142
}
143143

144144
@Test

src/test/java/com/bastiaanjansen/jwt/PayloadTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,38 @@ void getClaimAsLong() {
153153
assertThat(payload.getClaim("key", Long.class), is(expected));
154154
}
155155

156+
@Test
157+
void getCustomClaimAsDate() {
158+
Date date = new Date(100);
159+
payload.addClaim("key", date);
160+
161+
assertThat(payload.getClaim("key", Date.class), is(date));
162+
}
163+
164+
@Test
165+
void getDateClaimAsDate() {
166+
Date date = new Date(100);
167+
payload.setNotBefore(date);
168+
169+
assertThat(payload.getClaim(Payload.Registered.NOT_BEFORE, Date.class), is(date));
170+
}
171+
156172
@Test
157173
void getClaimConverted() {
158174
payload.addClaim("key", "value");
159175
String expected = "VALUE";
160176

161177
assertThat(payload.getClaim("key", value -> String.valueOf(value).toUpperCase()), is(expected));
162178
}
179+
180+
@Test
181+
void getClaimLongConvertedToDate() {
182+
payload.addClaim("key", 100);
183+
Date expected = new Date(100);
184+
185+
assertThat(payload.getClaim("key", value -> {
186+
long millis = Long.parseLong(String.valueOf(value));
187+
return new Date(millis);
188+
}), is(expected));
189+
}
163190
}

0 commit comments

Comments
 (0)