99import com .auth0 .jwt .interfaces .Verification ;
1010import com .genexus .securityapicommons .commons .Error ;
1111
12+ import static java .lang .Long .*;
13+
1214public 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