package com.skycrate.backend.skycrateBackend.services; import com.skycrate.backend.skycrateBackend.entity.RefreshToken; import com.skycrate.backend.skycrateBackend.entity.User; import com.skycrate.backend.skycrateBackend.repository.RefreshTokenRepository; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.time.Instant; import java.util.Optional; import java.util.UUID; @Service public class RefreshTokenService { private final RefreshTokenRepository refreshTokenRepo; @Value("${security.jwt.refresh-expiry-ms:604800000}") // 7 days default private Long refreshTokenDurationMs; public RefreshTokenService(RefreshTokenRepository refreshTokenRepo) { this.refreshTokenRepo = refreshTokenRepo; } public RefreshToken createRefreshToken(User user) { refreshTokenRepo.deleteByUser(user); // Allow only 1 active token per user RefreshToken token = new RefreshToken(); token.setUser(user); token.setExpiryDate(Instant.now().plusMillis(refreshTokenDurationMs)); token.setToken(UUID.randomUUID().toString()); return refreshTokenRepo.save(token); } public Optional findByToken(String token) { return refreshTokenRepo.findByToken(token); } public boolean isExpired(RefreshToken token) { return token.getExpiryDate().isBefore(Instant.now()); } }