Просмотр исходного кода

Implement config changes and tests

Winston Li 11 лет назад
Родитель
Сommit
c3db415ce7

+ 0 - 33
services/git-bridge/.idea/compiler.xml

@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CompilerConfiguration">
-    <option name="DEFAULT_COMPILER" value="Javac" />
-    <resourceExtensions />
-    <wildcardResourcePatterns>
-      <entry name="!?*.java" />
-      <entry name="!?*.form" />
-      <entry name="!?*.class" />
-      <entry name="!?*.groovy" />
-      <entry name="!?*.scala" />
-      <entry name="!?*.flex" />
-      <entry name="!?*.kt" />
-      <entry name="!?*.clj" />
-    </wildcardResourcePatterns>
-    <annotationProcessing>
-      <profile default="true" name="Default" enabled="false">
-        <processorPath useClasspath="true" />
-      </profile>
-      <profile default="false" name="Maven default annotation processors profile" enabled="true">
-        <sourceOutputDir name="target/generated-sources/annotations" />
-        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
-        <outputRelativeToContentRoot value="true" />
-        <processorPath useClasspath="true" />
-        <module name="writelatex-git-bridge" />
-      </profile>
-    </annotationProcessing>
-    <bytecodeTargetLevel>
-      <module name="writelatex-git-bridge" target="1.7" />
-    </bytecodeTargetLevel>
-  </component>
-</project>
-

+ 0 - 17
services/git-bridge/.idea/misc.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="EntryPointsManager">
-    <entry_points version="2.0" />
-  </component>
-  <component name="IdProvider" IDEtalkID="7A88E1BAD9A613745B3F0AE6CAB24EEC" />
-  <component name="MavenProjectsManager">
-    <option name="originalFiles">
-      <list>
-        <option value="$PROJECT_DIR$/pom.xml" />
-      </list>
-    </option>
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/out" />
-  </component>
-</project>

+ 12 - 7
services/git-bridge/bin/config.json

@@ -1,9 +1,14 @@
 {
 {
-	"port": 80,
-	"rootGitDirectory": "/var/wlgb/git",
-	"apiBaseUrl": "http://127.0.0.1:60000/api/v0",
-	"username": "REDACTED",
-	"password": "REDACTED",
-	"postbackBaseUrl": "http://127.0.0.1",
-	"serviceName": "Overleaf"
+    "port": 80,
+    "rootGitDirectory": "/var/wlgb/git",
+    "apiBaseUrl": "http://127.0.0.1:60000/api/v0",
+    "username": "REDACTED",
+    "password": "REDACTED",
+    "postbackBaseUrl": "http://127.0.0.1",
+    "serviceName": "Overleaf",
+    "oauth2": {
+        "oauth2ClientID": "clientID",
+        "oauth2ClientSecret": "oauth2 client secret",
+        "oauth2Server": "https://www.overleaf.com"
+    }
 }
 }

+ 20 - 0
services/git-bridge/pom.xml

@@ -102,6 +102,26 @@
             <artifactId>joda-time</artifactId>
             <artifactId>joda-time</artifactId>
             <version>2.7</version>
             <version>2.7</version>
         </dependency>
         </dependency>
+        <dependency>
+            <groupId>com.google.oauth-client</groupId>
+            <artifactId>google-oauth-client</artifactId>
+            <version>1.20.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.http-client</groupId>
+            <artifactId>google-http-client</artifactId>
+            <version>1.20.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.http-client</groupId>
+            <artifactId>google-http-client-gson</artifactId>
+            <version>1.20.0</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+        </dependency>
     </dependencies>
     </dependencies>
 
 
 </project>
 </project>

+ 1 - 0
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/application/GitBridgeApp.java

@@ -1,5 +1,6 @@
 package uk.ac.ic.wlgitbridge.application;
 package uk.ac.ic.wlgitbridge.application;
 
 
+import uk.ac.ic.wlgitbridge.application.config.Config;
 import uk.ac.ic.wlgitbridge.application.exception.ConfigFileException;
 import uk.ac.ic.wlgitbridge.application.exception.ConfigFileException;
 import uk.ac.ic.wlgitbridge.application.exception.ArgsException;
 import uk.ac.ic.wlgitbridge.application.exception.ArgsException;
 import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException;
 import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException;

+ 28 - 14
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/application/Config.java → services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/application/config/Config.java

@@ -1,4 +1,4 @@
-package uk.ac.ic.wlgitbridge.application;
+package uk.ac.ic.wlgitbridge.application.config;
 
 
 import com.google.gson.Gson;
 import com.google.gson.Gson;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonElement;
@@ -9,6 +9,7 @@ import uk.ac.ic.wlgitbridge.snapshot.base.JSONSource;
 
 
 import java.io.FileReader;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.IOException;
+import java.io.Reader;
 
 
 /**
 /**
  * Created by Winston on 05/12/14.
  * Created by Winston on 05/12/14.
@@ -22,13 +23,14 @@ public class Config implements JSONSource {
     private String apiBaseURL;
     private String apiBaseURL;
     private String postbackURL;
     private String postbackURL;
     private String serviceName;
     private String serviceName;
+    private Oauth2 oauth2;
 
 
     public Config(String configFilePath) throws ConfigFileException, IOException {
     public Config(String configFilePath) throws ConfigFileException, IOException {
-        try {
-            fromJSON(new Gson().fromJson(new FileReader(configFilePath), JsonElement.class));
-        } catch (JsonParseException e) {
-            throw new IOException();
-        }
+        this(new FileReader(configFilePath));
+    }
+
+    Config(Reader reader) {
+        fromJSON(new Gson().fromJson(reader, JsonElement.class));
     }
     }
 
 
     @Override
     @Override
@@ -48,6 +50,7 @@ public class Config implements JSONSource {
         if (!postbackURL.endsWith("/")) {
         if (!postbackURL.endsWith("/")) {
             postbackURL += "/";
             postbackURL += "/";
         }
         }
+        oauth2 = new Gson().fromJson(configObject.get("oauth2"), Oauth2.class);
     }
     }
 
 
     public int getPort() {
     public int getPort() {
@@ -70,6 +73,25 @@ public class Config implements JSONSource {
         return apiBaseURL;
         return apiBaseURL;
     }
     }
 
 
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public String getPostbackURL() {
+        return postbackURL;
+    }
+
+    public boolean isUsingOauth2() {
+        return oauth2 != null;
+    }
+
+    public Oauth2 getOauth2() {
+        if (!isUsingOauth2()) {
+            throw new AssertionError("Getting oauth2 when not using it");
+        }
+        return oauth2;
+    }
+
     private JsonElement getElement(JsonObject configObject, String name) {
     private JsonElement getElement(JsonObject configObject, String name) {
         JsonElement element = configObject.get(name);
         JsonElement element = configObject.get(name);
         if (element == null) {
         if (element == null) {
@@ -86,12 +108,4 @@ public class Config implements JSONSource {
         return element.getAsString();
         return element.getAsString();
     }
     }
 
 
-    public String getServiceName() {
-        return serviceName;
-    }
-
-    public String getPostbackURL() {
-        return postbackURL;
-    }
-
 }
 }

+ 30 - 0
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/application/config/Oauth2.java

@@ -0,0 +1,30 @@
+package uk.ac.ic.wlgitbridge.application.config;
+
+/**
+ * Created by winston on 25/10/15.
+ */
+public class Oauth2 {
+
+    private final String oauth2ClientID;
+    private final String oauth2ClientSecret;
+    private final String oauth2Server;
+
+    public Oauth2(String oauth2ClientID, String oauth2ClientSecret, String oauth2Server) {
+        this.oauth2ClientID = oauth2ClientID;
+        this.oauth2ClientSecret = oauth2ClientSecret;
+        this.oauth2Server = oauth2Server;
+    }
+
+    public String getOauth2ClientID() {
+        return oauth2ClientID;
+    }
+
+    public String getOauth2ClientSecret() {
+        return oauth2ClientSecret;
+    }
+
+    public String getOauth2Server() {
+        return oauth2Server;
+    }
+
+}

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/server/GitBridgeServer.java

@@ -7,7 +7,7 @@ import org.eclipse.jetty.server.handler.ResourceHandler;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.util.log.Log;
 import org.eclipse.jetty.util.log.Log;
-import uk.ac.ic.wlgitbridge.application.Config;
+import uk.ac.ic.wlgitbridge.application.config.Config;
 import uk.ac.ic.wlgitbridge.application.jetty.NullLogger;
 import uk.ac.ic.wlgitbridge.application.jetty.NullLogger;
 import uk.ac.ic.wlgitbridge.bridge.BridgeAPI;
 import uk.ac.ic.wlgitbridge.bridge.BridgeAPI;
 import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException;
 import uk.ac.ic.wlgitbridge.git.exception.InvalidRootDirectoryPathException;

+ 69 - 0
services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/application/config/ConfigTest.java

@@ -0,0 +1,69 @@
+package uk.ac.ic.wlgitbridge.application.config;
+
+import org.junit.Test;
+
+import java.io.Reader;
+import java.io.StringReader;
+
+import static org.junit.Assert.*;
+
+/**
+ * Created by winston on 25/10/15.
+ */
+public class ConfigTest {
+
+    @Test
+     public void testConstructWithOauth() {
+        Reader reader = new StringReader("{\n" +
+                "    \"port\": 80,\n" +
+                "    \"rootGitDirectory\": \"/var/wlgb/git\",\n" +
+                "    \"apiBaseUrl\": \"http://127.0.0.1:60000/api/v0\",\n" +
+                "    \"username\": \"REDACTED\",\n" +
+                "    \"password\": \"REDACTED\",\n" +
+                "    \"postbackBaseUrl\": \"http://127.0.0.1\",\n" +
+                "    \"serviceName\": \"Overleaf\",\n" +
+                "    \"oauth2\": {\n" +
+                "        \"oauth2ClientID\": \"clientID\",\n" +
+                "        \"oauth2ClientSecret\": \"oauth2 client secret\",\n" +
+                "        \"oauth2Server\": \"https://www.overleaf.com\"\n" +
+                "    }\n" +
+                "}\n");
+        Config config = new Config(reader);
+        assertEquals(80, config.getPort());
+        assertEquals("/var/wlgb/git", config.getRootGitDirectory());
+        assertEquals("http://127.0.0.1:60000/api/v0/", config.getAPIBaseURL());
+        assertEquals("REDACTED", config.getUsername());
+        assertEquals("REDACTED", config.getPassword());
+        assertEquals("http://127.0.0.1/", config.getPostbackURL());
+        assertEquals("Overleaf", config.getServiceName());
+        assertTrue(config.isUsingOauth2());
+        assertEquals("clientID", config.getOauth2().getOauth2ClientID());
+        assertEquals("oauth2 client secret", config.getOauth2().getOauth2ClientSecret());
+        assertEquals("https://www.overleaf.com", config.getOauth2().getOauth2Server());
+    }
+
+    @Test (expected = AssertionError.class)
+    public void testConstructWithoutOauth() {
+        Reader reader = new StringReader("{\n" +
+                "    \"port\": 80,\n" +
+                "    \"rootGitDirectory\": \"/var/wlgb/git\",\n" +
+                "    \"apiBaseUrl\": \"http://127.0.0.1:60000/api/v0\",\n" +
+                "    \"username\": \"REDACTED\",\n" +
+                "    \"password\": \"REDACTED\",\n" +
+                "    \"postbackBaseUrl\": \"http://127.0.0.1\",\n" +
+                "    \"serviceName\": \"Overleaf\",\n" +
+                "    \"oauth2\": null\n" +
+                "}\n");
+        Config config = new Config(reader);
+        assertEquals(80, config.getPort());
+        assertEquals("/var/wlgb/git", config.getRootGitDirectory());
+        assertEquals("http://127.0.0.1:60000/api/v0/", config.getAPIBaseURL());
+        assertEquals("REDACTED", config.getUsername());
+        assertEquals("REDACTED", config.getPassword());
+        assertEquals("http://127.0.0.1/", config.getPostbackURL());
+        assertEquals("Overleaf", config.getServiceName());
+        assertFalse(config.isUsingOauth2());
+        config.getOauth2();
+    }
+
+}

+ 0 - 48
services/git-bridge/writelatex-git-bridge.iml

@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
-    <output url="file://$MODULE_DIR$/target/classes" />
-    <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/test/unit" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/test/system" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/it/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/it/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
-      <excludeFolder url="file://$MODULE_DIR$/target" />
-    </content>
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.10" level="project" />
-    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
-    <orderEntry type="library" name="Maven: org.jmock:jmock-junit4:2.6.0" level="project" />
-    <orderEntry type="library" name="Maven: org.jmock:jmock:2.6.0" level="project" />
-    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-library:1.1" level="project" />
-    <orderEntry type="library" name="Maven: junit:junit-dep:4.4" level="project" />
-    <orderEntry type="library" name="Maven: org.jmock:jmock-legacy:2.6.0" level="project" />
-    <orderEntry type="library" name="Maven: org.objenesis:objenesis:1.0" level="project" />
-    <orderEntry type="library" name="Maven: cglib:cglib-nodep:2.1_3" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jetty.aggregate:jetty-all:9.2.6.v20141205" level="project" />
-    <orderEntry type="library" name="Maven: javax.websocket:javax.websocket-api:1.0" level="project" />
-    <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
-    <orderEntry type="library" name="Maven: com.google.code.gson:gson:2.3.1" level="project" />
-    <orderEntry type="library" name="Maven: com.ning:async-http-client:1.9.3" level="project" />
-    <orderEntry type="library" name="Maven: io.netty:netty:3.9.5.Final" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.7" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jgit:org.eclipse.jgit:3.6.0.201412230720-r" level="project" />
-    <orderEntry type="library" name="Maven: com.jcraft:jsch:0.1.50" level="project" />
-    <orderEntry type="library" name="Maven: com.googlecode.javaewah:JavaEWAH:0.7.9" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.1.3" level="project" />
-    <orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.1.4" level="project" />
-    <orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
-    <orderEntry type="library" name="Maven: commons-codec:commons-codec:1.4" level="project" />
-    <orderEntry type="library" name="Maven: org.eclipse.jgit:org.eclipse.jgit.http.server:3.6.0.201412230720-r" level="project" />
-    <orderEntry type="library" name="Maven: org.xerial:sqlite-jdbc:3.8.7" level="project" />
-    <orderEntry type="library" name="Maven: org.slf4j:slf4j-nop:1.7.9" level="project" />
-    <orderEntry type="library" name="Maven: joda-time:joda-time:2.7" level="project" />
-  </component>
-</module>