diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/AdminApiFilter.java b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/AdminApiFilter.java index 4168c5af31e1d67e4b1bfbae1f256267819dd8fa..0aa48f863c335a16930920c7cd996b034c279b09 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/AdminApiFilter.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/AdminApiFilter.java @@ -15,11 +15,15 @@ import java.io.IOException; import java.util.Date; import static net.jami.jams.server.Server.userAuthenticationModule; +import static net.jami.jams.server.servlets.filters.JWTValidator.verifyLevel; +import static net.jami.jams.server.servlets.filters.JWTValidator.verifyValidity; @WebFilter(urlPatterns = {"/api/admin/*"}) @Slf4j public class AdminApiFilter implements Filter { + private static final AccessLevel TARGET_LEVEL = AccessLevel.ADMIN; + @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; @@ -35,8 +39,7 @@ public class AdminApiFilter implements Filter { try { JWSVerifier jwsVerifier = new RSASSAVerifier(userAuthenticationModule.getAuthModulePubKey()); signedJWT = SignedJWT.parse(request.getHeader("Bearer")); - if(signedJWT.verify(jwsVerifier) && signedJWT.getJWTClaimsSet().getExpirationTime().compareTo(new Date()) > 0 - && AccessLevel.valueOf(signedJWT.getJWTClaimsSet().getClaim("scope").toString()).equals(AccessLevel.ADMIN)){ + if(signedJWT.verify(jwsVerifier) && verifyValidity(signedJWT) && verifyLevel(signedJWT,TARGET_LEVEL)){ authsuccess = true; request.setAttribute("username",signedJWT.getJWTClaimsSet().getSubject()); } diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java index c58c7d73b6106a123dc276cff6279c3c89611cbf..e0fec4868ee33fd4d94a00546b1ba469baa10126 100644 --- a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/ApiFilter.java @@ -14,6 +14,7 @@ import java.io.IOException; import java.util.Date; import static net.jami.jams.server.Server.userAuthenticationModule; +import static net.jami.jams.server.servlets.filters.JWTValidator.verifyValidity; @WebFilter(urlPatterns = {"/api/auth/*"}) @Slf4j @@ -34,7 +35,7 @@ public class ApiFilter implements Filter { try { JWSVerifier jwsVerifier = new RSASSAVerifier(userAuthenticationModule.getAuthModulePubKey()); signedJWT = SignedJWT.parse(request.getHeader("Bearer")); - if(signedJWT.verify(jwsVerifier) && signedJWT.getJWTClaimsSet().getExpirationTime().compareTo(new Date()) > 0){ + if(signedJWT.verify(jwsVerifier) && verifyValidity(signedJWT)){ authsuccess = true; request.setAttribute("username",signedJWT.getJWTClaimsSet().getSubject()); } diff --git a/jams-server/src/main/java/net/jami/jams/server/servlets/filters/JWTValidator.java b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/JWTValidator.java new file mode 100644 index 0000000000000000000000000000000000000000..fecb65694fb0fd41bd3cd43a0620c1944d81af90 --- /dev/null +++ b/jams-server/src/main/java/net/jami/jams/server/servlets/filters/JWTValidator.java @@ -0,0 +1,27 @@ +package net.jami.jams.server.servlets.filters; + +import com.nimbusds.jwt.SignedJWT; +import net.jami.jams.common.objects.user.AccessLevel; + +import java.util.Date; + +public class JWTValidator { + + public static boolean verifyLevel(SignedJWT signedJWT, AccessLevel TARGET_LEVEL){ + try { + return AccessLevel.valueOf(signedJWT.getJWTClaimsSet().getClaim("scope").toString()).equals(TARGET_LEVEL); + } + catch (Exception e){ + return false; + } + } + + public static boolean verifyValidity(SignedJWT signedJWT){ + try { + return signedJWT.getJWTClaimsSet().getExpirationTime().compareTo(new Date()) > 0; + } + catch (Exception e){ + return false; + } + } +}