Package io.fathom.cloud.secrets.commands

Source Code of io.fathom.cloud.secrets.commands.SecretKeyActivateCmdlet

package io.fathom.cloud.secrets.commands;

import io.fathom.cloud.commands.AuthenticatedCmdlet;
import io.fathom.cloud.secrets.services.ca.KeyPairs;
import io.fathom.cloud.server.auth.Auth;
import io.fathom.cloud.server.model.Project;
import io.fathom.cloud.services.SecretService;
import io.fathom.cloud.services.SecretService.Secret;
import io.fathom.cloud.services.SecretService.SecretItem;

import java.security.KeyPair;
import java.security.cert.X509Certificate;
import java.util.List;

import javax.inject.Inject;

import org.kohsuke.args4j.Option;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fathomdb.crypto.CertificateAndKey;
import com.fathomdb.crypto.Certificates;
import com.fathomdb.crypto.EncryptionStore;
import com.fathomdb.crypto.SimpleCertificateAndKey;
import com.google.common.base.Charsets;
import com.google.protobuf.Message;

public class SecretKeyActivateCmdlet extends AuthenticatedCmdlet {
    private static final Logger log = LoggerFactory.getLogger(SecretKeyActivateCmdlet.class);

    public SecretKeyActivateCmdlet() {
        super("secret-key-activate");
    }

    @Option(name = "-s", usage = "key subject", required = true)
    public String subject;

    @Option(name = "-alias", usage = "alias to save as", required = false)
    public String alias = "https";

    @Inject
    SecretService secretService;

    @Inject
    EncryptionStore encryptionStore;

    @Override
    protected Message run0() throws Exception {
        Auth auth = getAuth();
        Project project = auth.getProject();

        List<Secret> secrets = secretService.list(auth, project);

        Secret found = null;
        for (Secret secret : secrets) {
            if (subject.equals(secret.getSecretInfo().subject)) {
                if (found != null) {
                    throw new IllegalStateException("Found multiple keys with subject: " + subject);
                }
                found = secret;
            }
        }

        if (found == null) {
            throw new IllegalArgumentException("Key not found with subject: " + subject);
        }

        String certificate = getSecret(found, "certificate");
        List<X509Certificate> certificateChain = Certificates.fromPem(certificate);

        String keypairEncoded = getSecret(found, "privatekey");
        KeyPair keypair = KeyPairs.fromPem(keypairEncoded);

        CertificateAndKey certificateAndKey = new SimpleCertificateAndKey(certificateChain, keypair.getPrivate());
        encryptionStore.setCertificateAndKey(alias, certificateAndKey);

        return null;
    }

    private String getSecret(Secret secret, String key) {
        SecretItem item = secret.find(key);
        if (item == null) {
            throw new IllegalArgumentException("Secret not found: " + key);
        }
        return new String(item.getBytes(), Charsets.UTF_8);
    }
}
TOP

Related Classes of io.fathom.cloud.secrets.commands.SecretKeyActivateCmdlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.