Decoding postback GETs.

This commit is contained in:
Winston Li 2014-12-04 23:34:02 +00:00
parent 28e0d8cd42
commit e31b4fead5
13 changed files with 63 additions and 17 deletions

View file

@ -1,7 +1,10 @@
package uk.ac.ic.wlgitbridge.application; package uk.ac.ic.wlgitbridge.application;
import org.eclipse.jetty.http.HttpURI;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.ResourceHandler; import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.util.MultiMap;
import uk.ac.ic.wlgitbridge.writelatex.WriteLatexAPI;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -13,9 +16,24 @@ import java.io.IOException;
*/ */
public class AttsResourceHandler extends ResourceHandler { public class AttsResourceHandler extends ResourceHandler {
private final WriteLatexAPI writeLatexDataSource;
public AttsResourceHandler(WriteLatexAPI writeLatexDataSource) {
this.writeLatexDataSource = writeLatexDataSource;
}
@Override @Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
System.out.println(baseRequest.getMethod() + " " + baseRequest.getUri()); HttpURI uri = baseRequest.getUri();
System.out.println(baseRequest.getMethod() + " " + uri);
System.out.println(uri.getPath());
MultiMap<String> multimap = new MultiMap<String>();
uri.decodeQueryTo(multimap);
System.out.println(multimap);
if (false) {
throw new ServletException();
}
super.handle(target, baseRequest, request, response); super.handle(target, baseRequest, request, response);
} }

View file

@ -6,7 +6,7 @@ import com.google.gson.JsonObject;
import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource; import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource; import uk.ac.ic.wlgitbridge.writelatex.api.request.base.JSONSource;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.UnexpectedPostbackException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostExceptionBuilder; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostExceptionBuilder;
/** /**

View file

@ -3,7 +3,7 @@ package uk.ac.ic.wlgitbridge.application;
import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler; import org.eclipse.jetty.server.handler.AbstractHandler;
import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource; import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.UnexpectedPostbackException;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;

View file

@ -71,7 +71,7 @@ public class WLGitBridgeServer {
HandlerCollection handlers = new HandlerCollection(); HandlerCollection handlers = new HandlerCollection();
WriteLatexAPI writeLatexDataSource = new WriteLatexAPI(new WLDataModel(rootGitDirectoryPath)); WriteLatexAPI writeLatexDataSource = new WriteLatexAPI(new WLDataModel(rootGitDirectoryPath));
handlers.setHandlers(new Handler[] { handlers.setHandlers(new Handler[] {
initResourceHandler(), initResourceHandler(writeLatexDataSource),
new SnapshotPushPostbackHandler(writeLatexDataSource), new SnapshotPushPostbackHandler(writeLatexDataSource),
initGitHandler(writeLatexDataSource) initGitHandler(writeLatexDataSource)
}); });
@ -89,8 +89,8 @@ public class WLGitBridgeServer {
return servletContextHandler; return servletContextHandler;
} }
private Handler initResourceHandler() { private Handler initResourceHandler(WriteLatexAPI writeLatexDataSource) {
ResourceHandler resourceHandler = new AttsResourceHandler(); ResourceHandler resourceHandler = new AttsResourceHandler(writeLatexDataSource);
resourceHandler.setResourceBase(new File(rootGitDirectoryPath, ".wlgb/atts").getAbsolutePath()); resourceHandler.setResourceBase(new File(rootGitDirectoryPath, ".wlgb/atts").getAbsolutePath());
return resourceHandler; return resourceHandler;
} }

View file

@ -2,8 +2,9 @@ package uk.ac.ic.wlgitbridge.bridge;
import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException; import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.InvalidPostbackKeyException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.UnexpectedPostbackException;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
@ -22,6 +23,8 @@ public interface WriteLatexDataSource {
public List<WritableRepositoryContents> getWritableRepositories(String projectName) throws FailedConnectionException, InvalidProjectException; public List<WritableRepositoryContents> getWritableRepositories(String projectName) throws FailedConnectionException, InvalidProjectException;
public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents, String hostname) throws SnapshotPostException, IOException, FailedConnectionException; public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents, String hostname) throws SnapshotPostException, IOException, FailedConnectionException;
void checkPostbackKey(String projectName, String postbackKey) throws InvalidPostbackKeyException;
/* Called by postback thread. */ /* Called by postback thread. */
public void postbackReceivedSuccessfully(String projectName, String postbackKey, int versionID) throws UnexpectedPostbackException; public void postbackReceivedSuccessfully(String projectName, String postbackKey, int versionID) throws UnexpectedPostbackException;
public void postbackReceivedWithException(String projectName, String postbackKey, SnapshotPostException exception) throws UnexpectedPostbackException; public void postbackReceivedWithException(String projectName, String postbackKey, SnapshotPostException exception) throws UnexpectedPostbackException;

View file

@ -7,10 +7,11 @@ import uk.ac.ic.wlgitbridge.bridge.WriteLatexDataSource;
import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.SnapshotGetDocRequest; import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.SnapshotGetDocRequest;
import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException; import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.InvalidPostbackKeyException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.PostbackManager; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.PostbackManager;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.SnapshotPushRequest; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.SnapshotPushRequest;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.SnapshotPushRequestResult; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.SnapshotPushRequestResult;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.UnexpectedPostbackException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.OutOfDateException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.OutOfDateException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException;
import uk.ac.ic.wlgitbridge.writelatex.model.WLDataModel; import uk.ac.ic.wlgitbridge.writelatex.model.WLDataModel;
@ -93,6 +94,11 @@ public class WriteLatexAPI implements WriteLatexDataSource {
} }
} }
@Override
public void checkPostbackKey(String projectName, String postbackKey) throws InvalidPostbackKeyException {
postbackManager.checkPostbackKey(projectName, postbackKey);
}
/* Called by postback thread. */ /* Called by postback thread. */
@Override @Override
public void postbackReceivedSuccessfully(String projectName, String postbackKey, int versionID) throws UnexpectedPostbackException { public void postbackReceivedSuccessfully(String projectName, String postbackKey, int versionID) throws UnexpectedPostbackException {

View file

@ -1,5 +1,6 @@
package uk.ac.ic.wlgitbridge.writelatex.api.request.push; package uk.ac.ic.wlgitbridge.writelatex.api.request.push;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.InvalidPostbackKeyException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException;
/** /**
@ -49,4 +50,10 @@ public class PostbackContents {
} }
} }
public void checkPostbackKey(String postbackKey) throws InvalidPostbackKeyException {
if (!postbackKey.equals(this.postbackKey)) {
throw new InvalidPostbackKeyException();
}
}
} }

View file

@ -1,6 +1,8 @@
package uk.ac.ic.wlgitbridge.writelatex.api.request.push; package uk.ac.ic.wlgitbridge.writelatex.api.request.push;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.InvalidPostbackKeyException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.UnexpectedPostbackException;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.SecureRandom; import java.security.SecureRandom;
@ -49,6 +51,10 @@ public class PostbackManager {
return key; return key;
} }
public void checkPostbackKey(String projectName, String postbackKey) throws InvalidPostbackKeyException {
postbackContentsTable.get(projectName).checkPostbackKey(postbackKey);
}
private String randomString() { private String randomString() {
return new BigInteger(130, random).toString(32); return new BigInteger(130, random).toString(32);
} }

View file

@ -1,7 +0,0 @@
package uk.ac.ic.wlgitbridge.writelatex.api.request.push;
/**
* Created by Winston on 17/11/14.
*/
public class UnexpectedPostbackException extends Throwable {
}

View file

@ -0,0 +1,7 @@
package uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception;
/**
* Created by Winston on 04/12/14.
*/
public class InvalidPostbackKeyException extends Exception {
}

View file

@ -2,7 +2,6 @@ package uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException; import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;
import uk.ac.ic.wlgitbridge.writelatex.api.request.push.UnexpectedPostbackException;
/** /**
* Created by Winston on 17/11/14. * Created by Winston on 17/11/14.

View file

@ -0,0 +1,7 @@
package uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception;
/**
* Created by Winston on 17/11/14.
*/
public class UnexpectedPostbackException extends Exception {
}

View file

@ -1,4 +1,4 @@
package uk.ac.ic.wlgitbridge.writelatex.api.request.push; package uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception;
import org.junit.Test; import org.junit.Test;