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

yandex.cloud.sdk.auth.provider.CachingCredentialProvider Maven / Gradle / Ivy

package yandex.cloud.sdk.auth.provider;

import yandex.cloud.sdk.auth.IamToken;

import java.time.Instant;

/**
 * Stores exchanged IAM token until it is expired. When it is expired, retrieves a new token from inner {@link CredentialProvider}
 */
public class CachingCredentialProvider implements CredentialProvider {
    private final CredentialProvider delegate;

    private transient volatile IamToken iamToken;

    CachingCredentialProvider(CredentialProvider delegate) {
        this.delegate = delegate;
    }

    @Override
    public void close() {
        delegate.close();
    }

    @Override
    public IamToken get() {
        Instant now = Instant.now();
        Instant expiresAt = iamToken == null ? Instant.MIN : iamToken.getExpiresAt();
        if (expiresAt.isBefore(now)) {
            synchronized (this) {
                expiresAt = iamToken == null ? Instant.MIN : iamToken.getExpiresAt();
                if (expiresAt.isBefore(now)) {
                    this.iamToken = this.delegate.get();
                }
            }
        }

        return this.iamToken;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy