Package io.fathom.cloud.compute.api.os.resources

Source Code of io.fathom.cloud.compute.api.os.resources.KeypairsResource

package io.fathom.cloud.compute.api.os.resources;

import io.fathom.cloud.CloudException;
import io.fathom.cloud.compute.api.os.model.Keypair;
import io.fathom.cloud.compute.api.os.model.ListKeypairsResponse;
import io.fathom.cloud.compute.api.os.model.WrappedKeypair;
import io.fathom.cloud.compute.services.SshKeyPairs;
import io.fathom.cloud.protobuf.CloudModel.KeyPairData;

import java.io.IOException;
import java.security.PublicKey;

import javax.inject.Inject;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

import org.keyczar.KeyczarKey;
import org.keyczar.KeyczarPublicKey;
import org.keyczar.KeyczarUtils;
import org.keyczar.RsaPrivateKey;

import com.fathomdb.crypto.OpenSshUtils;
import com.google.common.collect.Lists;

@Path("/openstack/compute/{project}/os-keypairs")
public class KeypairsResource extends ComputeResourceBase {
    @Inject
    SshKeyPairs keypairs;

    @GET
    public ListKeypairsResponse listKeypairs() throws CloudException {
        ListKeypairsResponse response = new ListKeypairsResponse();
        response.keypairs = Lists.newArrayList();

        for (KeyPairData data : keypairs.list(getProject())) {
            Keypair keypair = toModel(data);
            response.keypairs.add(keypair);
        }

        return response;
    }

    @GET
    @Path("{id}")
    public WrappedKeypair getKeypair(@PathParam("id") String id) throws CloudException {
        KeyPairData keypair = keypairs.findKeyPair(getProject(), id);
        notFoundIfNull(keypair);

        WrappedKeypair response = new WrappedKeypair();
        response.keypair = toModel(keypair);
        return response;
    }

    @DELETE
    @Path("{id}")
    public Response deleteKeypair(@PathParam("id") String id) throws CloudException {
        KeyPairData keypair = keypairs.findKeyPair(getProject(), id);
        notFoundIfNull(keypair);

        keypairs.delete(getProject(), id);
        return Response.accepted().build();
    }

    private Keypair toModel(KeyPairData data) {
        Keypair keypair = new Keypair();
        keypair.name = data.getKey();
        keypair.publicKey = data.getPublicKey();
        keypair.fingerprint = data.getPublicKeyFingerprint();
        return keypair;
    }

    @POST
    public WrappedKeypair createKeypair(WrappedKeypair request) throws CloudException, IOException {
        PublicKey sshPublicKey;
        RsaPrivateKey privateKey = null;

        if (request.keypair.publicKey != null) {
            sshPublicKey = OpenSshUtils.readSshPublicKey(request.keypair.publicKey);
        } else {
            KeyczarKey keypair = keypairs.generateKeypair();

            KeyczarPublicKey keyczarPublicKey = KeyczarUtils.getPublicKey(keypair);
            sshPublicKey = KeyczarUtils.getJce(keyczarPublicKey);

            privateKey = KeyczarUtils.getPrivateKey(keypair);

            // SshKey sshKey = SshKey.generate();
            // publicKey = sshKey.getPublicKey();
            // privateKey = sshKey.getPrivateKey();
            // OpenSshUtils.serialize(sshPublicKey);
        }

        KeyPairData created = keypairs.create(getProject(), request.keypair.name, sshPublicKey);

        WrappedKeypair response = new WrappedKeypair();
        response.keypair = toModel(created);

        if (privateKey != null) {
            response.keypair.privateKey = KeyczarUtils.toPem(privateKey);
        }

        return response;
    }

}
TOP

Related Classes of io.fathom.cloud.compute.api.os.resources.KeypairsResource

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.