diff --git a/pom.xml b/pom.xml index b67af1d..cb38de6 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 3.11.0 - 2.12.0 + 2.14.2 2.4.0 diff --git a/src/main/java/apiCalls/Utils/generic/BaseAPI.java b/src/main/java/apiCalls/Utils/generic/BaseAPI.java index dda640e..434329d 100644 --- a/src/main/java/apiCalls/Utils/generic/BaseAPI.java +++ b/src/main/java/apiCalls/Utils/generic/BaseAPI.java @@ -43,15 +43,30 @@ public synchronized String adminJWT() throws HttpException { private boolean isTokenExpired(String token) { try { - var decodedJWT = Jwts.parser() - .unsecured() - .build() - .parseUnsecuredClaims(token) - .getPayload(); + + String[] chunks = token.split("\\."); + if (chunks.length != 3) { + LOGGER.error("Invalid JWT format - expected 3 parts but got {}", chunks.length); + return true; + } + + String payload = new String(java.util.Base64.getUrlDecoder().decode(chunks[1])); + + com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper(); + com.fasterxml.jackson.databind.JsonNode claims = mapper.readTree(payload); - return decodedJWT.getExpiration().before(new Date()); + if (claims.has("exp")) { + long expTime = claims.get("exp").asLong() * 1000; // Convert from seconds to milliseconds + boolean expired = expTime < System.currentTimeMillis(); + LOGGER.debug("Token expiration check: exp={}, current={}, expired={}", + new Date(expTime), new Date(), expired); + return expired; + } else { + LOGGER.warn("Token has no expiration claim, treating as expired"); + return true; + } } catch (Exception e) { - LOGGER.error("Error decoding token: {}", e.getMessage()); + LOGGER.error("Error checking token expiration: {}", e.getMessage()); return true; } }