CookieUtils.java

package api.utils;

import java.time.Duration;
import java.time.Instant;

import org.springframework.http.ResponseCookie;

import api.entities.RefreshToken;

/**
 * {@link CookieUtils}.
 */
public class CookieUtils {
    public static final String REFRESH_COOKIE_NAME = "refresh_token";

    /**
     * Generate empty response cookie.
     *
     * @return {@link ResponseCookie}
     */
    public static ResponseCookie generateEmptyCookie() {
        return ResponseCookie.from(REFRESH_COOKIE_NAME, "")
            .httpOnly(true)
            .path("/")
            .maxAge(0)
            .sameSite("Strict")
            .build();
    }

    /**
     * Generate response cookie with refresh token.
     *
     * @param refreshToken Refresh token
     * @return {@link ResponseCookie}
     */
    public static ResponseCookie generateRefreshTokenCookie(RefreshToken refreshToken) {
        long maxAge = Duration.between(Instant.now(), refreshToken.getExpires()).getSeconds();
        return ResponseCookie.from(REFRESH_COOKIE_NAME, refreshToken.getRawToken())
            .httpOnly(true)
            .secure(true)
            .path("/")
            .maxAge(maxAge)
            .sameSite("Strict")
            .build();
    }
}