From 7e95c3a8679adb737bfbc3e7d842147d4d77cc51 Mon Sep 17 00:00:00 2001 From: Jesse Brault Date: Thu, 15 Jan 2026 15:29:40 -0600 Subject: [PATCH] Get rid of refresh token interface. --- .../api/auth/AuthServiceImpl.java | 8 +- .../mealsmadeeasy/api/auth/RefreshToken.java | 41 +++++++-- .../api/auth/RefreshTokenEntity.java | 92 ------------------- .../api/auth/RefreshTokenRepository.java | 4 +- 4 files changed, 40 insertions(+), 105 deletions(-) delete mode 100644 src/main/java/app/mealsmadeeasy/api/auth/RefreshTokenEntity.java diff --git a/src/main/java/app/mealsmadeeasy/api/auth/AuthServiceImpl.java b/src/main/java/app/mealsmadeeasy/api/auth/AuthServiceImpl.java index d0cfa2d..4759218 100644 --- a/src/main/java/app/mealsmadeeasy/api/auth/AuthServiceImpl.java +++ b/src/main/java/app/mealsmadeeasy/api/auth/AuthServiceImpl.java @@ -37,7 +37,7 @@ public class AuthServiceImpl implements AuthService { } private RefreshToken createRefreshToken(User principal) { - final RefreshTokenEntity refreshTokenDraft = new RefreshTokenEntity(); + final RefreshToken refreshTokenDraft = new RefreshToken(); refreshTokenDraft.setToken(UUID.randomUUID()); refreshTokenDraft.setIssued(OffsetDateTime.now()); refreshTokenDraft.setExpiration(OffsetDateTime.now().plusSeconds(this.refreshTokenLifetime)); @@ -75,15 +75,15 @@ public class AuthServiceImpl implements AuthService { throw new LoginException(LoginExceptionReason.NO_REFRESH_TOKEN, "No refresh token provided."); } - final RefreshTokenEntity old = this.refreshTokenRepository.findByToken(refreshToken) + final RefreshToken old = this.refreshTokenRepository.findByToken(refreshToken) .orElseThrow(() -> new LoginException( LoginExceptionReason.INVALID_REFRESH_TOKEN, "No such refresh token: " + refreshToken )); - if (old.isRevoked() || old.isDeleted()) { + if (old.getRevoked() || old.getDeleted()) { throw new LoginException(LoginExceptionReason.INVALID_REFRESH_TOKEN, "Invalid refresh token."); } - if (old.getExpires().isBefore(OffsetDateTime.now())) { + if (old.getExpiration().isBefore(OffsetDateTime.now())) { throw new LoginException(LoginExceptionReason.EXPIRED_REFRESH_TOKEN, "Refresh token is expired."); } diff --git a/src/main/java/app/mealsmadeeasy/api/auth/RefreshToken.java b/src/main/java/app/mealsmadeeasy/api/auth/RefreshToken.java index 88a49ff..303958a 100644 --- a/src/main/java/app/mealsmadeeasy/api/auth/RefreshToken.java +++ b/src/main/java/app/mealsmadeeasy/api/auth/RefreshToken.java @@ -1,13 +1,40 @@ package app.mealsmadeeasy.api.auth; +import app.mealsmadeeasy.api.user.User; +import jakarta.persistence.*; +import lombok.Data; + import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; import java.util.UUID; -public interface RefreshToken { - UUID getToken(); - long getLifetime(); - OffsetDateTime getExpires(); - OffsetDateTime getIssued(); - boolean isRevoked(); - boolean isDeleted(); +@Entity +@Table(name = "refresh_token") +@Data +public class RefreshToken { + + @Id + @Column(nullable = false) + private UUID token; + + @Column(nullable = false) + private OffsetDateTime issued; + + @Column(nullable = false) + private OffsetDateTime expiration; + + @ManyToOne(optional = false) + @JoinColumn(name = "owner_id", nullable = false) + private User owner; + + @Column(nullable = false) + private Boolean deleted = false; + + @Column(nullable = false) + private Boolean revoked = false; + + public long getLifetime() { + return ChronoUnit.SECONDS.between(this.issued, this.expiration); + } + } diff --git a/src/main/java/app/mealsmadeeasy/api/auth/RefreshTokenEntity.java b/src/main/java/app/mealsmadeeasy/api/auth/RefreshTokenEntity.java deleted file mode 100644 index b5161e2..0000000 --- a/src/main/java/app/mealsmadeeasy/api/auth/RefreshTokenEntity.java +++ /dev/null @@ -1,92 +0,0 @@ -package app.mealsmadeeasy.api.auth; - -import app.mealsmadeeasy.api.user.User; -import jakarta.persistence.*; - -import java.time.OffsetDateTime; -import java.time.temporal.ChronoUnit; -import java.util.UUID; - -@Entity(name = "RefreshToken") -@Table(name = "refresh_token") -public class RefreshTokenEntity implements RefreshToken { - - @Id - @Column(nullable = false) - private UUID token; - - @Column(nullable = false) - private OffsetDateTime issued; - - @Column(nullable = false) - private OffsetDateTime expiration; - - @ManyToOne(optional = false) - @JoinColumn(name = "owner_id", nullable = false) - private User owner; - - @Column(nullable = false) - private Boolean deleted = false; - - @Column(nullable = false) - private Boolean revoked = false; - - @Override - public UUID getToken() { - return this.token; - } - - public void setToken(UUID token) { - this.token = token; - } - - @Override - public OffsetDateTime getIssued() { - return this.issued; - } - - public void setIssued(OffsetDateTime issued) { - this.issued = issued; - } - - @Override - public OffsetDateTime getExpires() { - return this.expiration; - } - - public void setExpiration(OffsetDateTime expiration) { - this.expiration = expiration; - } - - @Override - public boolean isRevoked() { - return this.revoked; - } - - public void setRevoked(boolean revoked) { - this.revoked = revoked; - } - - public User getOwner() { - return this.owner; - } - - public void setOwner(User owner) { - this.owner = owner; - } - - @Override - public boolean isDeleted() { - return this.deleted; - } - - public void setDeleted(boolean deleted) { - this.deleted = deleted; - } - - @Override - public long getLifetime() { - return ChronoUnit.SECONDS.between(this.issued, this.expiration); - } - -} diff --git a/src/main/java/app/mealsmadeeasy/api/auth/RefreshTokenRepository.java b/src/main/java/app/mealsmadeeasy/api/auth/RefreshTokenRepository.java index fbfa5fc..45108a9 100644 --- a/src/main/java/app/mealsmadeeasy/api/auth/RefreshTokenRepository.java +++ b/src/main/java/app/mealsmadeeasy/api/auth/RefreshTokenRepository.java @@ -8,9 +8,9 @@ import org.springframework.data.jpa.repository.Query; import java.util.Optional; import java.util.UUID; -public interface RefreshTokenRepository extends JpaRepository { +public interface RefreshTokenRepository extends JpaRepository { - Optional findByToken(UUID token); + Optional findByToken(UUID token); @Modifying @Transactional