瀏覽代碼

MagicUrls for Login + Unit tests for the parser

Andy Scherzinger 8 年之前
父節點
當前提交
5977fed28d

+ 18 - 0
AndroidManifest.xml

@@ -174,6 +174,24 @@
 
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.BROWSABLE" />
+                <data android:scheme="@string/login_data_own_scheme" android:host="@string/login_data_own_scheme_host" android:path="/" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.BROWSABLE"/>
+                <data android:scheme="http" android:host="@string/login_data_standard_url" android:path="/"/>
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.BROWSABLE"/>
+                <data android:scheme="https" android:host="@string/login_data_standard_url" android:path="/"/>
+            </intent-filter>
         </activity>
 
         <service android:name=".services.OperationsService" />

+ 5 - 0
res/values/setup.xml

@@ -83,6 +83,11 @@
     <string name="contributing_link" translatable="false">https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md</string>
     <string name="report_issue_link" translatable="false">https://github.com/nextcloud/android/issues</string>
 
+    <!-- login data links -->
+    <string name="login_data_standard_url" translatable="false">logindata.nextcloud.com</string>
+    <string name="login_data_own_scheme" translatable="false">nextcloud</string>
+    <string name="login_data_own_scheme_host" translatable="false">login</string>
+
 </resources>
 
 

文件差異過大導致無法顯示
+ 228 - 154
src/com/owncloud/android/authentication/AuthenticatorActivity.java


+ 10 - 0
src/com/owncloud/android/authentication/LoginUrlInfo.java

@@ -0,0 +1,10 @@
+package com.owncloud.android.authentication;
+
+/**
+ * Data object holding the login url fields.
+ */
+public class LoginUrlInfo {
+    String serverAddress;
+    String username;
+    String password;
+}

+ 151 - 0
test/java/com/owncloud/android/authentication/AuthenticatorDataUrlTest.java

@@ -0,0 +1,151 @@
+package com.owncloud.android.authentication;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+
+/**
+ * Tests to check the parser logic of the login data URL parser.
+ */
+@RunWith(BlockJUnit4ClassRunner.class)
+public class AuthenticatorDataUrlTest {
+    String StandardUrl = "://logindata.nextcloud.com/";
+    String schemeUrl = "nextcloud://login/";
+    String plus = "&";
+
+    String userValue = "testuser123";
+    String userUrlPart = "user:" + userValue;
+
+    String passwordValue = "testpassword123";
+    String passwordUrlPart = "password:" + passwordValue;
+
+    String addressValue = "testserver123";
+    String addressUrlPart = "server:" + addressValue;
+
+    String[] urlStarts = new String[]{"http" + StandardUrl, "https" + StandardUrl, schemeUrl};
+
+    @Test
+    public void allDataUrlElements() {
+        String dataUrl = userUrlPart + plus + passwordUrlPart + plus + addressUrlPart;
+
+        for (String urlStart : urlStarts) {
+            LoginUrlInfo info = AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + dataUrl);
+            System.out.println(urlStart + dataUrl);
+            Assert.assertEquals("Incorrect user value in " + urlStart + " url parsing", userValue, info.username);
+            Assert.assertEquals("Incorrect user value in " + urlStart + " url parsing", passwordValue, info.password);
+            Assert.assertEquals("Incorrect user value in " + urlStart + " url parsing", addressValue, info.serverAddress);
+        }
+    }
+
+    @Test
+    public void oneElement() {
+
+        for (String urlStart : urlStarts) {
+            System.out.println(urlStart + userUrlPart);
+            Assert.assertEquals("Incorrect user value in " + urlStart + " url parsing", userValue,
+                    AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + userUrlPart).username);
+            System.out.println(urlStart + passwordUrlPart);
+            Assert.assertEquals("Incorrect user value in " + urlStart + " url parsing", passwordValue,
+                    AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + passwordUrlPart).password);
+            System.out.println(urlStart + addressUrlPart);
+            Assert.assertEquals("Incorrect user value in " + urlStart + " url parsing", addressValue,
+                    AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + addressUrlPart).serverAddress);
+        }
+    }
+
+    @Test
+    public void twoDataUrlElements() {
+
+        String dataUrl = userUrlPart + plus + passwordUrlPart;
+        for (String urlStart : urlStarts) {
+            System.out.println(urlStart + dataUrl);
+            LoginUrlInfo info = AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + dataUrl);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", userValue, info
+                    .username);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", passwordValue, info
+                    .password);
+        }
+
+        dataUrl = userUrlPart + plus + addressUrlPart;
+        for (String urlStart : urlStarts) {
+            System.out.println(urlStart + dataUrl);
+            LoginUrlInfo info = AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + dataUrl);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", userValue, info
+                    .username);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", addressValue,
+                    info.serverAddress);
+        }
+
+
+        dataUrl = addressUrlPart + plus + userUrlPart;
+        for (String urlStart : urlStarts) {
+            System.out.println(urlStart + dataUrl);
+            LoginUrlInfo info = AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + dataUrl);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", userValue, info
+                    .username);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", addressValue,
+                    info.serverAddress);
+        }
+
+        dataUrl = addressUrlPart + plus + passwordUrlPart;
+        for (String urlStart : urlStarts) {
+            System.out.println(urlStart + dataUrl);
+            LoginUrlInfo info = AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + dataUrl);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", passwordValue, info
+                    .password);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", addressValue, info
+                    .serverAddress);
+        }
+
+        dataUrl = passwordUrlPart + plus + userUrlPart;
+        for (String urlStart : urlStarts) {
+            System.out.println(urlStart + dataUrl);
+            LoginUrlInfo info = AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + dataUrl);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", userValue, info
+                    .username);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", passwordValue, info
+                    .password);
+        }
+
+        dataUrl = passwordUrlPart + plus + addressUrlPart;
+        for (String urlStart : urlStarts) {
+            System.out.println(urlStart + dataUrl);
+            LoginUrlInfo info = AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + dataUrl);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", passwordValue, info
+                    .password);
+            Assert.assertEquals("Incorrect user value in " + urlStart + dataUrl + " url parsing", addressValue, info
+                    .serverAddress);
+        }
+    }
+
+    @Test
+    public void tooManyDataUrlElements() {
+        String dataUrl = userUrlPart + plus + passwordUrlPart + plus + addressUrlPart + plus + "notexist:boom";
+
+        for (String urlStart : urlStarts) {
+            try {
+                System.out.println(urlStart + dataUrl);
+                AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart + dataUrl);
+                Assert.fail("Illegal Argument Exception expected!");
+            } catch (IllegalArgumentException e) {
+                // all well
+            }
+        }
+    }
+
+    @Test
+    public void tooLittleDataUrlElements() {
+        String dataUrl = "https" + StandardUrl;
+
+        for (String urlStart : urlStarts) {
+            try {
+                System.out.println(urlStart);
+                AuthenticatorActivity.parseLoginDataUrl(urlStart, urlStart);
+                Assert.fail("Illegal Argument Exception expected!");
+            } catch (IllegalArgumentException e) {
+                // all well
+            }
+        }
+    }
+}

部分文件因文件數量過多而無法顯示