From 616722423de60c4a1cf53a672b3612bff373831e Mon Sep 17 00:00:00 2001 From: Mirna Gama Date: Thu, 11 Jan 2024 16:57:56 -0300 Subject: [PATCH] [R9] Create jwt use case class --- .../usecase/auth/jwt/CreateJWTUseCase.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/main/java/com/mirna/hospitalmanagementapi/application/usecase/auth/jwt/CreateJWTUseCase.java diff --git a/src/main/java/com/mirna/hospitalmanagementapi/application/usecase/auth/jwt/CreateJWTUseCase.java b/src/main/java/com/mirna/hospitalmanagementapi/application/usecase/auth/jwt/CreateJWTUseCase.java new file mode 100644 index 0000000..9ee1a4f --- /dev/null +++ b/src/main/java/com/mirna/hospitalmanagementapi/application/usecase/auth/jwt/CreateJWTUseCase.java @@ -0,0 +1,48 @@ +package com.mirna.hospitalmanagementapi.application.usecase.auth.jwt; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneOffset; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.algorithms.Algorithm; +import com.mirna.hospitalmanagementapi.domain.entities.auth.User; + +/** + * This class is used to execute the JWT create method using Algorithm HMAC256 along with the authenticated user login and id + * + * @author Mirna Gama + * @version 1.0 + */ +@Component +public class CreateJWTUseCase { + + @Value("${api.security.token.secret}") + private String secret; + + /** + * + * @param user The authenticated user + * @return A string containing the json web token signed with Algorithm HMAC256 + */ + public String execute(User user) { + Algorithm algorithm = Algorithm.HMAC256(secret); + + return JWT.create().withIssuer("Hospital-Management-API") + .withSubject(user.getLogin()) + .withClaim("id", user.getId()) + .withExpiresAt(_getExpirationDate()) + .sign(algorithm); + } + + /** + * Gets an expiration date for the token based on 2 hours duration + * @return Instant object containing the expiration date + */ + private Instant _getExpirationDate() { + return LocalDateTime.now().plusHours(2).toInstant(ZoneOffset.of("-03:00")); + } +}