Handle Git LFS requests, with error message

We don't support Git LFS. This change adds a handler for
POST requests to "<project>.git/info/lfs/objects/batch",
and sends back a 406 response, with json data that the
client can use to print a nice error message.
This commit is contained in:
Shane Kilkelly
2020-08-05 10:08:40 +01:00
parent 395c558d77
commit f7125b9159
3 changed files with 74 additions and 0 deletions
@@ -130,6 +130,7 @@ public class GitBridgeServer {
HandlerCollection handlers = new HandlerList();
handlers.addHandler(new StatusHandler(bridge));
handlers.addHandler(new HealthCheckHandler(bridge));
handlers.addHandler(new GitLfsHandler(bridge));
base.setHandler(handlers);
return base;
}
@@ -0,0 +1,46 @@
package uk.ac.ic.wlgitbridge.server;
import org.eclipse.jetty.server.HttpConnection;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import uk.ac.ic.wlgitbridge.bridge.Bridge;
import uk.ac.ic.wlgitbridge.util.Log;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
public class GitLfsHandler extends AbstractHandler {
private final Bridge bridge;
public GitLfsHandler(Bridge bridge) {
this.bridge = bridge;
}
@Override
public void handle(
String target,
Request baseRequest,
HttpServletRequest request,
HttpServletResponse response
) throws IOException {
String method = baseRequest.getMethod();
if (
("POST".equals(method))
&& target != null
&& target.matches("^/[0-9a-z]+\\.git/info/lfs/objects/batch/?$")
) {
Log.info(method + " <- /<project>.git/info/lfs/objects/batch");
response.setContentType("application/vnd.git-lfs+json");
response.setStatus(406);
response.getWriter().println("{\"message\": \"ERROR: Git LFS is not supported on Overleaf\"}");
baseRequest.setHandled(true);
}
}
}