Quellcode durchsuchen

Generating SnapshotPostRequest data correctly.

Winston Li vor 12 Jahren
Ursprung
Commit
375916678d

+ 5 - 0
services/git-bridge/src/uk/ac/ic/wlgitbridge/application/SnapshotPushPostbackHandler.java

@@ -20,6 +20,11 @@ public class SnapshotPushPostbackHandler extends AbstractHandler {
 //                response.setContentType("text/html;charset=utf-8");
 //                response.setStatus(HttpServletResponse.SC_OK);
         baseRequest.setHandled(false);
+        if (request.getMethod().equals("POST") && request.getPathInfo().endsWith("postback")) {
+            System.out.println(request.getHeaderNames());
+        }
+
+//        System.out.println(request.getRemoteAddr());
 //        System.out.println("method: " + request.getMethod());
 //        System.out.println("pathInfo: " + request.getPathInfo());
 //        System.out.println("contextPath: " + request.getContextPath());

+ 1 - 0
services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/CandidateSnapshot.java

@@ -10,6 +10,7 @@ public interface CandidateSnapshot {
 
     public JsonElement getJsonRepresentation();
     public int getPreviousVersionID();
+    public String getProjectURL();
     public void approveWithVersionID(int versionID);
     public String getProjectName();
     public WLDirectoryNode getDirectoryNode();

+ 1 - 1
services/git-bridge/src/uk/ac/ic/wlgitbridge/bridge/WriteLatexDataSource.java

@@ -15,7 +15,7 @@ public interface WriteLatexDataSource {
     /* Called by request thread. */
     public boolean repositoryExists(String projectName) throws FailedConnectionException;
     public List<WritableRepositoryContents> getWritableRepositories(String projectName) throws FailedConnectionException, InvalidProjectException;
-    public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents) throws SnapshotPostException, IOException, FailedConnectionException;
+    public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents, String remoteAddr) throws SnapshotPostException, IOException, FailedConnectionException;
     public void expectPostback(String projectName);
 
     /* Called by postback thread. */

+ 1 - 1
services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/WLReceivePackFactory.java

@@ -25,7 +25,7 @@ public class WLReceivePackFactory implements ReceivePackFactory<HttpServletReque
     @Override
     public ReceivePack create(HttpServletRequest httpServletRequest, Repository repository) throws ServiceNotEnabledException, ServiceNotAuthorizedException {
         ReceivePack receivePack = new ReceivePack(repository);
-        receivePack.setPreReceiveHook(new WriteLatexPutHook(writeLatexDataSource));
+        receivePack.setPreReceiveHook(new WriteLatexPutHook(writeLatexDataSource, httpServletRequest.getRemoteAddr()));
         return receivePack;
     }
 

+ 5 - 2
services/git-bridge/src/uk/ac/ic/wlgitbridge/git/handler/hook/WriteLatexPutHook.java

@@ -22,9 +22,11 @@ import java.util.Collection;
 public class WriteLatexPutHook implements PreReceiveHook {
 
     private final WriteLatexDataSource writeLatexDataSource;
+    private final String remoteAddr;
 
-    public WriteLatexPutHook(WriteLatexDataSource writeLatexDataSource) {
+    public WriteLatexPutHook(WriteLatexDataSource writeLatexDataSource, String remoteAddr) {
         this.writeLatexDataSource = writeLatexDataSource;
+        this.remoteAddr = remoteAddr;
     }
 
     @Override
@@ -55,7 +57,8 @@ public class WriteLatexPutHook implements PreReceiveHook {
         checkForcedPush(receiveCommand);
         writeLatexDataSource.putDirectoryContentsToProjectWithName(repository.getWorkTree().getName(),
                                                                    getPushedDirectoryContents(repository,
-                                                                                              receiveCommand));
+                                                                                              receiveCommand),
+                                                                   remoteAddr);
     }
 
     private void checkForcedPush(ReceiveCommand receiveCommand) throws ForcedPushException {

+ 10 - 3
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/WLDirectoryNodeSnapshot.java

@@ -16,12 +16,14 @@ public class WLDirectoryNodeSnapshot implements CandidateSnapshot {
 
     private final int previousVersionID;
     private final String projectName;
+    private final String projectURL;
     private final WLDirectoryNode directoryNode;
     private final CandidateSnapshotCallback callback;
 
-    public WLDirectoryNodeSnapshot(WLProject project, WLDirectoryNode directoryNode, CandidateSnapshotCallback callback) {
+    public WLDirectoryNodeSnapshot(WLProject project, WLDirectoryNode directoryNode, String remoteAddr, CandidateSnapshotCallback callback) {
         previousVersionID = project.getLatestSnapshot().getVersionID();
         projectName = project.getName();
+        projectURL = "http://" + remoteAddr + "/" + projectName;
         this.directoryNode = directoryNode;
         this.callback = callback;
         System.out.println(getJsonRepresentation());
@@ -32,7 +34,7 @@ public class WLDirectoryNodeSnapshot implements CandidateSnapshot {
         JsonObject jsonObject = new JsonObject();
         jsonObject.addProperty("latestVerId", previousVersionID);
         jsonObject.add("files", getFilesAsJson());
-        jsonObject.addProperty("postbackUrl", "wsomewhere");
+        jsonObject.addProperty("postbackUrl", projectURL + "/postback");
         return jsonObject;
     }
 
@@ -48,7 +50,7 @@ public class WLDirectoryNodeSnapshot implements CandidateSnapshot {
         JsonObject file = new JsonObject();
         file.addProperty("name", fileNode.getFilePath());
         if (fileNode.isChanged()) {
-            file.addProperty("url", "url");
+            file.addProperty("url", projectURL + "/" + fileNode.getFilePath());
         }
         return file;
     }
@@ -58,6 +60,11 @@ public class WLDirectoryNodeSnapshot implements CandidateSnapshot {
         return previousVersionID;
     }
 
+    @Override
+    public String getProjectURL() {
+        return projectURL;
+    }
+
     @Override
     public void approveWithVersionID(int versionID) {
         callback.approveSnapshot(versionID, this);

+ 2 - 2
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/WriteLatexAPI.java

@@ -43,8 +43,8 @@ public class WriteLatexAPI implements WriteLatexDataSource {
     }
 
     @Override
-    public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents) throws SnapshotPostException, IOException, FailedConnectionException {
-        CandidateSnapshot candidate = dataModel.createCandidateSnapshotFromProjectWithContents(projectName, directoryContents);
+    public void putDirectoryContentsToProjectWithName(String projectName, RawDirectoryContents directoryContents, String remoteAddr) throws SnapshotPostException, IOException, FailedConnectionException {
+        CandidateSnapshot candidate = dataModel.createCandidateSnapshotFromProjectWithContents(projectName, directoryContents, remoteAddr);
         new SnapshotPushRequest(candidate);
         throw new SnapshotPostException() {
 

+ 2 - 1
services/git-bridge/src/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java

@@ -43,10 +43,11 @@ public class WLDataModel implements CandidateSnapshotCallback {
         return project;
     }
 
-    public CandidateSnapshot createCandidateSnapshotFromProjectWithContents(String projectName, RawDirectoryContents directoryContents) throws SnapshotPostException, IOException, FailedConnectionException {
+    public CandidateSnapshot createCandidateSnapshotFromProjectWithContents(String projectName, RawDirectoryContents directoryContents, String remoteAddr) throws SnapshotPostException, IOException, FailedConnectionException {
         return new WLDirectoryNodeSnapshot(getProjectWithName(projectName),
                                            fileStore.createNextDirectoryNodeInProjectFromContents(getProjectWithName(projectName),
                                                                                                   directoryContents),
+                                           remoteAddr,
                                            this);
     }