All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.mruoc.nac.access.CacheAccessTokenClientDecorator Maven / Gradle / Ivy

The newest version!
package uk.mruoc.nac.access;

import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@RequiredArgsConstructor
@Slf4j
public class CacheAccessTokenClientDecorator implements AccessTokenClient {

  private final AccessTokenClient client;
  private final Clock clock;
  private final Duration cutoffBuffer;

  private AccessToken token;

  public CacheAccessTokenClientDecorator(AccessTokenClient client) {
    this(client, Clock.systemUTC(), Duration.ofSeconds(30));
  }

  @Override
  public AccessToken generateToken() {
    if (isNewTokenRequired()) {
      token = client.generateToken();
    }
    return token;
  }

  private boolean isNewTokenRequired() {
    Instant cutoff = clock.instant().plus(cutoffBuffer);
    boolean required = token == null || token.isExpired(cutoff);
    log.debug("new token required {}", required);
    return required;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy