AuthResultExpiry.java
- package no.nav.data.common.security.azure.support;
- import com.github.benmanes.caffeine.cache.Expiry;
- import com.microsoft.aad.msal4j.IAuthenticationResult;
- import lombok.extern.slf4j.Slf4j;
- import java.time.Duration;
- import java.time.Instant;
- @Slf4j
- public class AuthResultExpiry implements Expiry<String, IAuthenticationResult> {
- private static final Duration DEFAULT_EXPIRE = Duration.ofMinutes(1);
- private static final Duration MIN_REFRESH_MARGIN = Duration.ofMinutes(10);
- private static final Duration DOUBLE_MIN_REFRESH_MARGIN = MIN_REFRESH_MARGIN.multipliedBy(2);
- @Override
- public long expireAfterCreate(String key, IAuthenticationResult value, long currentTime) {
- return expire(value).toNanos();
- }
- @Override
- public long expireAfterUpdate(String key, IAuthenticationResult value, long currentTime, long currentDuration) {
- return currentDuration;
- }
- @Override
- public long expireAfterRead(String key, IAuthenticationResult value, long currentTime, long currentDuration) {
- return currentDuration;
- }
- private Duration expire(IAuthenticationResult value) {
- if (value.expiresOnDate().getTime() == 0L) {
- log.debug("Acquired token, TTL missing default cache expire {}s", DEFAULT_EXPIRE.toSeconds());
- return DEFAULT_EXPIRE;
- }
- Duration duration = Duration.between(Instant.now(), value.expiresOnDate().toInstant());
- Duration expire = suggestedRefreshInterval(duration);
- log.debug("Acquired token, TTL {}s cache expire {}s", duration.toSeconds(), expire.toSeconds());
- return expire;
- }
- private static Duration suggestedRefreshInterval(Duration duration) {
- if (duration.minus(DOUBLE_MIN_REFRESH_MARGIN).isNegative()) {
- return duration.dividedBy(2);
- } else {
- return duration.minus(MIN_REFRESH_MARGIN);
- }
- }
- }