Skip to content
This repository was archived by the owner on Apr 10, 2025. It is now read-only.

Commit e0f0268

Browse files
authored
Issue:102482 (#98)
Fix error loading RegisteredClaims loading unix dates
1 parent 62add05 commit e0f0268

File tree

1 file changed

+63
-25
lines changed

1 file changed

+63
-25
lines changed

GeneXusJWT/src/main/java/com/genexus/JWT/claims/RegisteredClaim.java

Lines changed: 63 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import com.auth0.jwt.interfaces.Verification;
1010
import com.genexus.securityapicommons.commons.Error;
1111

12+
import static java.lang.Long.*;
13+
1214
public enum RegisteredClaim {
1315
iss, exp, sub, aud, nbf, iat, jti,;
1416

@@ -142,8 +144,13 @@ public static Builder getBuilderWithClaim(String registeredClaimKey, String regi
142144
}
143145
}
144146

147+
private static boolean isANumber(String value)
148+
{
149+
return value.matches("-?\\d+") ? true: false;
150+
}
145151
public static Builder getBuilderWithClaim(RegisteredClaim registeredClaimKey, String registeredClaimValue,
146152
Builder tokenBuilder, Error error) {
153+
147154
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
148155
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
149156
switch (registeredClaimKey) {
@@ -159,22 +166,33 @@ public static Builder getBuilderWithClaim(RegisteredClaim registeredClaimKey, St
159166

160167
case exp:
161168
Date date = null;
162-
163-
try {
164-
165-
date = dateFormat.parse(registeredClaimValue);
166-
167-
} catch (Exception e) {
168-
error.setError("RCL05", "Date format error; expected yyyy/MM/dd HH:mm:ss");
169-
return null;
170-
}
171-
try {
172-
173-
tokenBuilder.withExpiresAt(date);
174-
} catch (Exception e) {
175-
error.setError("RCL06", e.getMessage());
176-
return null;
169+
if(!isANumber(registeredClaimValue)) {
170+
try {
171+
172+
date = dateFormat.parse(registeredClaimValue);
173+
174+
} catch (Exception e) {
175+
176+
error.setError("RCL05", "Date format error; expected yyyy/MM/dd HH:mm:ss");
177+
return null;
178+
}
179+
}else {
180+
try {
181+
date = new Date(Long.parseLong(registeredClaimValue) * 1000);
182+
}catch(Exception e)
183+
{
184+
error.setError("RCL05", e.getMessage());
185+
return null;
186+
}
177187
}
188+
try {
189+
190+
tokenBuilder.withExpiresAt(date);
191+
} catch (Exception e) {
192+
error.setError("RCL06", e.getMessage());
193+
return null;
194+
}
195+
178196
break;
179197

180198
case sub:
@@ -195,11 +213,21 @@ public static Builder getBuilderWithClaim(RegisteredClaim registeredClaimKey, St
195213
break;
196214
case nbf:
197215
Date dateNbf = null;
198-
try {
199-
dateNbf = dateFormat.parse(registeredClaimValue);
200-
} catch (Exception e) {
201-
error.setError("RCL05", "Date format error; expected yyyy/MM/dd HH:mm:ss");
202-
return null;
216+
if(!isANumber(registeredClaimValue)) {
217+
try {
218+
dateNbf = dateFormat.parse(registeredClaimValue);
219+
} catch (Exception e) {
220+
error.setError("RCL05", "Date format error; expected yyyy/MM/dd HH:mm:ss");
221+
return null;
222+
}
223+
}else{
224+
try {
225+
dateNbf = new Date(Long.parseLong(registeredClaimValue) * 1000);
226+
}catch(Exception e)
227+
{
228+
error.setError("RCL05", e.getMessage());
229+
return null;
230+
}
203231
}
204232
try {
205233
tokenBuilder.withNotBefore(dateNbf);
@@ -210,11 +238,21 @@ public static Builder getBuilderWithClaim(RegisteredClaim registeredClaimKey, St
210238
break;
211239
case iat:
212240
Date dateIat = null;
213-
try {
214-
dateIat = dateFormat.parse(registeredClaimValue);
215-
} catch (Exception e) {
216-
error.setError("RCL05", "Date format error; expected yyyy/MM/dd HH:mm:ss");
217-
return null;
241+
if(!isANumber(registeredClaimValue)) {
242+
try {
243+
dateIat = dateFormat.parse(registeredClaimValue);
244+
} catch (Exception e) {
245+
error.setError("RCL05", "Date format error; expected yyyy/MM/dd HH:mm:ss");
246+
return null;
247+
}
248+
}else{
249+
try {
250+
dateIat = new Date(Long.parseLong(registeredClaimValue) * 1000);
251+
}catch(Exception e)
252+
{
253+
error.setError("RCL05", e.getMessage());
254+
return null;
255+
}
218256
}
219257
try {
220258
tokenBuilder.withIssuedAt(dateIat);

0 commit comments

Comments
 (0)