package io.fathom.cloud.identity.commands;
import io.fathom.cloud.CloudException;
import io.fathom.cloud.commands.AuthenticatedCmdlet;
import io.fathom.cloud.identity.AuthServiceImpl;
import io.fathom.cloud.identity.model.AuthenticatedUser;
import io.fathom.cloud.identity.services.IdentityService;
import io.fathom.cloud.server.auth.Auth;
import java.util.List;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.protobuf.Message;
public class ProjectFixupCmdlet extends AuthenticatedCmdlet {
private static final Logger log = LoggerFactory.getLogger(ProjectFixupCmdlet.class);
public ProjectFixupCmdlet() {
super("id-project-fixup");
}
@Inject
IdentityService identityService;
@Override
protected Message run0() throws Exception {
Auth auth = getUnscopedAuth();
if (auth == null) {
throw new IllegalStateException("Cannot authenticate as " + username);
}
log.info("Authenticated as: {}", username);
Long projectId = findProjectId(auth, projectName);
AuthenticatedUser authenticatedUser = ((AuthServiceImpl) authService).toAuthenticatedUser(auth);
identityService.fixupProject(authenticatedUser, projectId);
return null;
}
private Long findProjectId(Auth auth, String projectName) throws CloudException {
List<Long> projectIds = authService.resolveProjectName(auth, projectName);
if (projectIds.size() == 0) {
throw new IllegalArgumentException("Cannot find project");
}
if (projectIds.size() != 1) {
throw new IllegalArgumentException("The project name is ambiguous");
}
Long projectId = projectIds.get(0);
return projectId;
}
}