package codeine.servlets.api_servlets;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import codeine.model.Constants;
import codeine.model.Constants.UrlParameters;
import codeine.model.Result;
import codeine.servlet.AbstractApiServlet;
import codeine.utils.os_process.ProcessExecuter.ProcessExecuterBuilder;
import com.google.common.collect.Lists;
public class UpgradeApiServlet extends AbstractApiServlet {
private static final Logger log = Logger.getLogger(UpgradeApiServlet.class);
private static final long serialVersionUID = 1L;
@Override
protected void myGet(HttpServletRequest request, HttpServletResponse response) {
upgrade(response, createCommand(getVersion(request)));
}
private void upgrade(HttpServletResponse response, List<String> cmd) {
log.info("going to upgrade: " + cmd);
Result r = new ProcessExecuterBuilder(cmd).build().execute();
PrintWriter writer = getWriter(response);
writer.write(r.output());
}
private String getVersion(HttpServletRequest request) {
String version = getParameter(request, UrlParameters.VERSION_NAME);
if (version.contains(" ") || version.contains(";")) {
throw new IllegalArgumentException("bad version " + version);
}
return version;
}
private ArrayList<String> createCommand(String version) {
return Lists.newArrayList(Constants.getInstallDir() + "/bin/upgrade.pl","--version",version);
}
@Override
protected boolean checkPermissions(HttpServletRequest request) {
return isAdministrator(request);
}
}