DefaultVaultStringSecret.java

package org.keycloak.vault;

import java.lang.ref.WeakReference;
import java.util.Optional;

/**
 * Default {@link VaultCharSecret} implementation based on {@link String}.
 *
 * @author <a href="mailto:sguilhen@redhat.com">Stefan Guilhen</a>
 */
public class DefaultVaultStringSecret implements VaultStringSecret {

    private static final VaultStringSecret EMPTY_VAULT_SECRET = new VaultStringSecret() {
        @Override
        public Optional<String> get() {
            return Optional.empty();
        }

        @Override
        public void close() {
        }
    };

    public static VaultStringSecret forString(Optional<String> secret) {
        if (secret == null || ! secret.isPresent()) {
            return EMPTY_VAULT_SECRET;
        }
        return new DefaultVaultStringSecret(secret.get());
    }

    private String secret;

    private DefaultVaultStringSecret(final String secret) {
        this.secret = secret;
    }

    @Override
    public Optional<String> get() {
        return Optional.of(this.secret);
    }

    @Override
    public void close() {
        this.secret = null;
    }
}