Configure Maven repository for unionflow-server-api dependency
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
package dev.lions.unionflow.client.security;
|
||||
|
||||
import dev.lions.unionflow.client.dto.auth.LoginResponse;
|
||||
import jakarta.enterprise.context.SessionScoped;
|
||||
import jakarta.faces.context.FacesContext;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Named;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@Named("jwtTokenManager")
|
||||
@SessionScoped
|
||||
public class JwtTokenManager implements Serializable {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(JwtTokenManager.class.getName());
|
||||
|
||||
@Inject
|
||||
private TokenRefreshService tokenRefreshService;
|
||||
|
||||
private String accessToken;
|
||||
private String refreshToken;
|
||||
private LocalDateTime expirationDate;
|
||||
private String tokenType = "Bearer";
|
||||
|
||||
public void setTokens(LoginResponse loginResponse) {
|
||||
this.accessToken = loginResponse.getAccessToken();
|
||||
this.refreshToken = loginResponse.getRefreshToken();
|
||||
this.expirationDate = loginResponse.getExpirationDate();
|
||||
this.tokenType = loginResponse.getTokenType();
|
||||
|
||||
// Enregistrer le token dans le service global
|
||||
String sessionId = getSessionId();
|
||||
if (sessionId != null) {
|
||||
tokenRefreshService.registerToken(sessionId,
|
||||
this.accessToken,
|
||||
this.refreshToken,
|
||||
loginResponse.getExpiresIn());
|
||||
}
|
||||
|
||||
LOGGER.info("Tokens JWT mis à jour. Expiration: " + expirationDate);
|
||||
}
|
||||
|
||||
public String getAccessToken() {
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
public String getRefreshToken() {
|
||||
return refreshToken;
|
||||
}
|
||||
|
||||
public String getAuthorizationHeader() {
|
||||
if (accessToken != null) {
|
||||
return tokenType + " " + accessToken;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isTokenValid() {
|
||||
if (accessToken == null || expirationDate == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Considérer le token comme expiré 30 secondes avant l'expiration réelle
|
||||
LocalDateTime expirationWithBuffer = expirationDate.minusSeconds(30);
|
||||
return LocalDateTime.now().isBefore(expirationWithBuffer);
|
||||
}
|
||||
|
||||
public boolean needsRefresh() {
|
||||
if (accessToken == null || expirationDate == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Rafraîchir le token 5 minutes avant l'expiration
|
||||
LocalDateTime refreshThreshold = expirationDate.minusMinutes(5);
|
||||
return LocalDateTime.now().isAfter(refreshThreshold);
|
||||
}
|
||||
|
||||
public long getTimeUntilExpiration() {
|
||||
if (expirationDate == null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
if (now.isAfter(expirationDate)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return java.time.Duration.between(now, expirationDate).getSeconds();
|
||||
}
|
||||
|
||||
public void clearTokens() {
|
||||
this.accessToken = null;
|
||||
this.refreshToken = null;
|
||||
this.expirationDate = null;
|
||||
|
||||
// Supprimer le token du service global
|
||||
String sessionId = getSessionId();
|
||||
if (sessionId != null) {
|
||||
tokenRefreshService.removeToken(sessionId);
|
||||
}
|
||||
|
||||
LOGGER.info("Tokens JWT supprimés");
|
||||
}
|
||||
|
||||
private String getSessionId() {
|
||||
try {
|
||||
FacesContext facesContext = FacesContext.getCurrentInstance();
|
||||
if (facesContext != null && facesContext.getExternalContext() != null) {
|
||||
return facesContext.getExternalContext().getSessionId(false);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOGGER.fine("Impossible de récupérer l'ID de session: " + e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean hasValidTokens() {
|
||||
return accessToken != null && refreshToken != null && isTokenValid();
|
||||
}
|
||||
|
||||
public LocalDateTime getExpirationDate() {
|
||||
return expirationDate;
|
||||
}
|
||||
|
||||
public String getTokenType() {
|
||||
return tokenType;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user