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 16b4006ac49a859f290e619d4291759848e1f05f..ec6bf4b76a45c7bd7eea77e8f841b4f06569248a 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 36cfaea4396102b35b95377c03057163d1d76df9..c25651058638343778f4e8136b339cd0958b633b 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); + } }