Auth.java
package no.nav.data.common.security.domain;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import no.nav.data.common.security.Encryptor;
import org.springframework.util.Assert;
import java.time.LocalDateTime;
import java.util.UUID;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "AUTH")
public class Auth {
@Id
@Column(name = "ID")
private UUID id;
@Column(name = "USER_ID")
private String userId;
@Column(name = "REFRESH_TOKEN")
// Doubles as CodeVerifier before session is created
private String encryptedRefreshToken;
@Column(name = "INITIATED")
private LocalDateTime initiated;
@Column(name = "LAST_ACTIVE")
private LocalDateTime lastActive;
@Transient
private transient Encryptor encryptor;
@Transient
private transient String sessionKey;
@Transient
private transient String accessToken;
public Auth addSecret(Encryptor encryptor, String sessionKey) {
this.encryptor = encryptor;
this.sessionKey = sessionKey;
return this;
}
public void addAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String decryptRefreshToken() {
Assert.notNull(encryptor, "not initialized");
Assert.notNull(sessionKey, "not initialized");
return encryptor.decrypt(sessionKey + encryptedRefreshToken);
}
public String session() {
return getId().toString().replace("-", "") + sessionKey;
}
public String getCodeVerifier() {
Assert.isTrue(encryptedRefreshToken.length() <= 128, "This session does not contain a CodeVerifier");
return encryptedRefreshToken;
}
public static class AuthBuilder {
public AuthBuilder generateId() {
id = UUID.randomUUID();
return this;
}
}
}