meals-made-easy-api/src/main/java/app/mealsmadeeasy/api/security/JwtServiceImpl.java
2024-06-20 15:53:06 +02:00

62 lines
2.2 KiB
Java

package app.mealsmadeeasy.api.security;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.io.Serializer;
import io.jsonwebtoken.jackson.io.JacksonSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.crypto.SecretKey;
import java.time.Instant;
import java.util.Date;
import java.util.Map;
@Service
public final class JwtServiceImpl implements JwtService {
private final Serializer<Map<String, ?>> serializer;
private final long accessTokenLifetime;
private final long refreshTokenLifetime;
private final SecretKey secretKey;
public JwtServiceImpl(
ObjectMapper objectMapper,
@Value("${app.mealsmadeeasy.api.security.access-token-lifetime}") Long accessTokenLifetime,
@Value("${app.mealsmadeeasy.api.security.refresh-token-lifetime}") Long refreshTokenLifetime,
SecretKey secretKey
) {
this.serializer = new JacksonSerializer<>();
this.accessTokenLifetime = accessTokenLifetime;
this.refreshTokenLifetime = refreshTokenLifetime;
this.secretKey = secretKey;
}
@Override
public AuthToken generateAccessToken(String username) {
final Instant now = Instant.now();
final String token = Jwts.builder()
.subject(username)
.issuedAt(Date.from(now))
.expiration(Date.from(now.plusSeconds(this.accessTokenLifetime)))
.signWith(this.secretKey)
.json(this.serializer)
.compact();
return new AuthToken(token, this.accessTokenLifetime);
}
@Override
public AuthToken generateRefreshToken(String username) {
final Instant now = Instant.now();
final String token = Jwts.builder()
.subject(username)
.issuedAt(Date.from(now))
.expiration(Date.from(now.plusSeconds(this.refreshTokenLifetime)))
.signWith(this.secretKey)
.json(this.serializer)
.compact();
return new AuthToken(token, this.refreshTokenLifetime);
}
}