package io.fathom.cloud.secrets.api.os.resources;
import io.fathom.cloud.CloudException;
import io.fathom.cloud.protobuf.SecretsModel.SecretRecordData;
import io.fathom.cloud.secrets.api.os.model.Secret;
import io.fathom.cloud.secrets.api.os.model.SecretList;
import io.fathom.cloud.secrets.services.SecretImpl;
import io.fathom.cloud.server.auth.Auth;
import io.fathom.cloud.server.model.Project;
import io.fathom.cloud.services.SecretService;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
@Path("/openstack/keystore/{project}/secrets")
public class SecretResource extends SecretResourceBase {
private static final Logger log = LoggerFactory.getLogger(SecretResource.class);
@Inject
SecretService secretsService;
@GET
@Path("{id}")
public Secret findSecret(@PathParam("id") long id) throws CloudException {
Auth auth = getAuth();
Project project = getProject();
SecretService.Secret secret = secretsService.find(auth, project, id);
notFoundIfNull(secret);
return toModel(getData(secret));
}
@GET
@Path("{id}/{key}")
public Response getSecret(@PathParam("id") long id, @PathParam("key") String key) throws CloudException {
Auth auth = getAuth();
Project project = getProject();
SecretService.Secret secret = secretsService.find(auth, project, id);
notFoundIfNull(secret);
SecretService.SecretItem item = secret.find(key);
notFoundIfNull(item);
byte[] data = item.getBytes();
return Response.ok(data).build();
}
@GET
public SecretList listSecrets() throws CloudException {
Auth auth = getAuth();
Project project = getProject();
SecretList ret = new SecretList();
ret.secrets = Lists.newArrayList();
for (SecretService.Secret secret : secretsService.list(auth, project)) {
ret.secrets.add(toModel(getData(secret)));
}
return ret;
}
private SecretRecordData getData(SecretService.Secret secret) {
return ((SecretImpl) secret).getData();
}
private Secret toModel(SecretRecordData data) {
Secret model = new Secret();
model.id = Long.toString(data.getId());
model.algorithm = data.getAlgorithm();
if (data.hasKeySize()) {
model.bit_length = data.getKeySize();
}
model.subject = data.getSubject();
model.name = data.getName();
return model;
}
}