From 7bdacdfc225777e7676812838c963c0ad06cd572 Mon Sep 17 00:00:00 2001 From: Tucker Siegel <tgsiegel@terpmail.umd.edu> Date: Tue, 18 Apr 2023 11:33:29 -0400 Subject: [PATCH] add new functions --- .../java/edu/umd/dawn/common/jwt/Claims.java | 12 ++++++ .../java/edu/umd/dawn/common/jwt/JWTUtil.java | 37 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/src/main/java/edu/umd/dawn/common/jwt/Claims.java b/src/main/java/edu/umd/dawn/common/jwt/Claims.java index 16b4006..ec6bf4b 100644 --- a/src/main/java/edu/umd/dawn/common/jwt/Claims.java +++ b/src/main/java/edu/umd/dawn/common/jwt/Claims.java @@ -1,6 +1,9 @@ package edu.umd.dawn.common.jwt; +import com.auth0.jwt.JWTCreator.Builder; import com.auth0.jwt.interfaces.DecodedJWT; + +import edu.umd.dawn.common.entities.User; import lombok.AllArgsConstructor; import lombok.Getter; @@ -17,4 +20,13 @@ public class Claims { public static Claims build(DecodedJWT jwt) { return new Claims(jwt.getClaim("id").asString()); } + + public static Claims fromUser(User user) { + return new Claims(user.getId()); + } + + public Builder fill(Builder jwtBuilder) { + jwtBuilder.withClaim("id", this.userId); + return jwtBuilder; + } } diff --git a/src/main/java/edu/umd/dawn/common/jwt/JWTUtil.java b/src/main/java/edu/umd/dawn/common/jwt/JWTUtil.java index 36cfaea..c256510 100644 --- a/src/main/java/edu/umd/dawn/common/jwt/JWTUtil.java +++ b/src/main/java/edu/umd/dawn/common/jwt/JWTUtil.java @@ -1,8 +1,15 @@ package edu.umd.dawn.common.jwt; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.temporal.ChronoUnit; + import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; + +import edu.umd.dawn.common.entities.User; import edu.umd.dawn.common.exceptions.BaseExceptions; import edu.umd.dawn.common.exceptions.DawnException; import lombok.Getter; @@ -22,6 +29,11 @@ public class JWTUtil { decode(); } + public JWTUtil(String accessSecret) { + this.accessSecret = accessSecret; + initAlgorithm(); + } + private void initAlgorithm() { this.algorithm = Algorithm.HMAC256(accessSecret); } @@ -39,6 +51,16 @@ public class JWTUtil { } } + private String create(Claims claims, int expMin) { + try { + String token = claims.fill(JWT.create() + .withIssuer("dawn")).withExpiresAt(LocalDateTime.now().plus(expMin, ChronoUnit.MINUTES).toInstant(ZoneOffset.UTC)).sign(algorithm); + return token; + } catch (Exception e) { + throw new DawnException(BaseExceptions.INVALID_JWT, e); + } + } + public Claims getClaims() { return Claims.build(this); } @@ -46,4 +68,19 @@ public class JWTUtil { public static JWTUtil parse(String accessSecret, String jwt) { return new JWTUtil(accessSecret, jwt); } + + public static String issue(String accessSecret, Claims claims) { + JWTUtil util = new JWTUtil(accessSecret); + return util.create(claims, 20); // eventually move 20 to be a variable + } + + public static String issue(String accessSecret, Claims claims, int expTime) { + JWTUtil util = new JWTUtil(accessSecret); + return util.create(claims, expTime); + } + + public static String issue(String accessSecret, User user, int expTime) { + JWTUtil util = new JWTUtil(accessSecret); + return util.create(Claims.fromUser(user), expTime); + } } -- GitLab