Эх сурвалжийг харах

Merge pull request #70 from overleaf/sk-handle-files-with-spaces

Use UUID in file url, not (encoded) file path.
Shane Kilkelly 7 жил өмнө
parent
commit
bc646829b4

+ 3 - 14
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/CandidateSnapshot.java

@@ -5,13 +5,10 @@ import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonObject;
 import uk.ac.ic.wlgitbridge.data.filestore.RawFile;
 import uk.ac.ic.wlgitbridge.data.filestore.RawFile;
 import uk.ac.ic.wlgitbridge.data.filestore.RawDirectory;
 import uk.ac.ic.wlgitbridge.data.filestore.RawDirectory;
-import uk.ac.ic.wlgitbridge.util.Log;
 import uk.ac.ic.wlgitbridge.util.Util;
 import uk.ac.ic.wlgitbridge.util.Util;
 
 
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
 import java.util.LinkedList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
@@ -80,7 +77,7 @@ public class CandidateSnapshot implements AutoCloseable {
         );
         );
         for (ServletFile file : files) {
         for (ServletFile file : files) {
             if (file.isChanged()) {
             if (file.isChanged()) {
-                file.writeToDisk(attsDirectory);
+                file.writeToDiskWithName(attsDirectory, file.getUniqueIdentifier());
             }
             }
         }
         }
     }
     }
@@ -118,16 +115,8 @@ public class CandidateSnapshot implements AutoCloseable {
         JsonObject jsonFile = new JsonObject();
         JsonObject jsonFile = new JsonObject();
         jsonFile.addProperty("name", file.getPath());
         jsonFile.addProperty("name", file.getPath());
         if (file.isChanged()) {
         if (file.isChanged()) {
-            String path = file.getPath();
-            String encodedPath;
-            try {
-                encodedPath = URLEncoder.encode(path, "UTF-8");
-            } catch (UnsupportedEncodingException e) {
-                // This should never happen
-                Log.error("Error while encoding file path: projectUrl={}, path={}", projectURL, path, e);
-                encodedPath = path;
-            }
-            String url = projectURL + "/" + encodedPath + "?key=" + postbackKey;
+            String identifier = file.getUniqueIdentifier();
+            String url = projectURL + "/" + identifier + "?key=" + postbackKey;
             jsonFile.addProperty("url", url);
             jsonFile.addProperty("url", url);
         }
         }
         return jsonFile;
         return jsonFile;

+ 5 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/ServletFile.java

@@ -1,6 +1,7 @@
 package uk.ac.ic.wlgitbridge.data;
 package uk.ac.ic.wlgitbridge.data;
 
 
 import uk.ac.ic.wlgitbridge.data.filestore.RawFile;
 import uk.ac.ic.wlgitbridge.data.filestore.RawFile;
+import java.util.UUID;
 
 
 /**
 /**
  * Created by Winston on 21/02/15.
  * Created by Winston on 21/02/15.
@@ -9,12 +10,16 @@ public class ServletFile extends RawFile {
 
 
     private final RawFile file;
     private final RawFile file;
     private final boolean changed;
     private final boolean changed;
+    private String uuid;
 
 
     public ServletFile(RawFile file, RawFile oldFile) {
     public ServletFile(RawFile file, RawFile oldFile) {
         this.file = file;
         this.file = file;
+        this.uuid = UUID.randomUUID().toString();
         changed = !equals(oldFile);
         changed = !equals(oldFile);
     }
     }
 
 
+    public String getUniqueIdentifier() { return uuid; }
+
     @Override
     @Override
     public String getPath() {
     public String getPath() {
         return file.getPath();
         return file.getPath();
@@ -38,5 +43,4 @@ public class ServletFile extends RawFile {
     public String toString() {
     public String toString() {
         return getPath();
         return getPath();
     }
     }
-
 }
 }

+ 5 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/data/filestore/RawFile.java

@@ -20,7 +20,11 @@ public abstract class RawFile {
     public abstract long size();
     public abstract long size();
 
 
     public final void writeToDisk(File directory) throws IOException {
     public final void writeToDisk(File directory) throws IOException {
-        File file = new File(directory, getPath());
+        writeToDiskWithName(directory, getPath());
+    }
+
+    public final void writeToDiskWithName(File directory, String name) throws IOException {
+        File file = new File(directory, name);
         file.getParentFile().mkdirs();
         file.getParentFile().mkdirs();
         file.createNewFile();
         file.createNewFile();
         OutputStream out = new FileOutputStream(file);
         OutputStream out = new FileOutputStream(file);