package codeine.servlets.api_servlets;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import codeine.api.CommandStatusJson;
import codeine.command_peer.CommandExecutorHelper;
import codeine.command_peer.NodesCommandExecuterProvider;
import codeine.model.Constants;
import codeine.permissions.IUserWithPermissions;
import codeine.permissions.UserPermissionsGetter;
import codeine.servlet.AbstractApiServlet;
import codeine.utils.JsonUtils;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
public class CommandHistoryApiServlet extends AbstractApiServlet {
private static final long serialVersionUID = 1L;
@Inject private NodesCommandExecuterProvider nodesCommandExecuterProvider;
@Inject private UserPermissionsGetter permissionsManager;
@Override
protected void myGet(HttpServletRequest request, HttpServletResponse response) {
setNoCache(response);
String projectName = getParameter(request, Constants.UrlParameters.PROJECT_NAME);
String nodeName = getParameter(request, Constants.UrlParameters.NODE);
List<CommandStatusJson> allCommands = nodesCommandExecuterProvider.getAllCommands(projectName, nodeName);
List<CommandStatusJson> allCommandsWithPermissions = Lists.newArrayList();
IUserWithPermissions user = permissionsManager.user(request);
for (CommandStatusJson commandStatusJson : allCommands) {
if (user.canRead(commandStatusJson.project())){
CommandStatusJson c = JsonUtils.cloneJson(commandStatusJson, CommandStatusJson.class);
c.can_cancel(CommandExecutorHelper.canCancel(user, c.user()));
allCommandsWithPermissions.add(c);
}
}
writeResponseJson(response, allCommandsWithPermissions);
}
@Override
protected boolean checkPermissions(HttpServletRequest request) {
return true;
}
}