package io.fathom.cloud.identity.api.os.resources;
import io.fathom.cloud.CloudException;
import io.fathom.cloud.identity.api.os.model.v2.GetTenantsResponse;
import io.fathom.cloud.identity.api.os.model.v2.TenantDetails;
import io.fathom.cloud.identity.model.AuthenticatedUser;
import io.fathom.cloud.identity.services.IdentityService;
import io.fathom.cloud.protobuf.IdentityModel.ProjectData;
import io.fathom.cloud.protobuf.IdentityModel.ProjectRoles;
import io.fathom.cloud.protobuf.IdentityModel.UserData;
import java.util.List;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
@Path("/openstack/identity/v2.0/tenants")
@Produces({ "application/json" })
public class TenantsResource extends IdentityResourceBase {
private static final Logger log = LoggerFactory.getLogger(TenantsResource.class);
@Inject
IdentityService identityService;
@GET
public GetTenantsResponse doTenantsGet() throws CloudException {
GetTenantsResponse response = new GetTenantsResponse();
List<TenantDetails> tenants = response.tenants = Lists.newArrayList();
UserData user = getUser();
AuthenticatedUser authenticated = getAuthenticatedUser();
for (ProjectRoles projectRole : user.getProjectRolesList()) {
long projectId = projectRole.getProject();
ProjectData project = identityService.findProject(authenticated, projectId);
if (project == null) {
log.warn("Cannot find project {}", projectId);
continue;
}
TenantDetails tenant = toTenantDetails(project);
tenants.add(tenant);
}
return response;
}
private TenantDetails toTenantDetails(ProjectData project) {
TenantDetails tenant = new TenantDetails();
tenant.id = "" + project.getId();
tenant.name = project.getName();
tenant.description = project.getDescription();
if (project.hasEnabled()) {
tenant.enabled = project.getEnabled();
} else {
tenant.enabled = true;
}
return tenant;
}
}