瀏覽代碼

Add support for protocol determination in import

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 7 年之前
父節點
當前提交
e55f5ca325
共有 1 個文件被更改,包括 46 次插入2 次删除
  1. 46 2
      app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java

+ 46 - 2
app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java

@@ -76,6 +76,7 @@ public class AccountVerificationController extends BaseController {
     private Disposable roomsQueryDisposable;
     private Disposable profileQueryDisposable;
     private Disposable dbQueryDisposable;
+    private Disposable statusQueryDisposable;
 
     private String baseUrl;
     private String username;
@@ -114,6 +115,47 @@ public class AccountVerificationController extends BaseController {
 
         dispose(null);
 
+        if (isAccountImport && !baseUrl.startsWith("http://") && !baseUrl.startsWith("https://")) {
+            determineBaseUrlProtocol(true);
+        } else {
+            checkEverything();
+        }
+
+    }
+
+    private void determineBaseUrlProtocol(boolean checkForcedHttps) {
+        cookieManager.getCookieStore().removeAll();
+
+        String queryUrl;
+        if (checkForcedHttps) {
+            queryUrl = "https://" + baseUrl + ApiHelper.getUrlPostfixForStatus();
+        } else {
+            queryUrl = "http://" + baseUrl + ApiHelper.getUrlPostfixForStatus();
+        }
+
+        statusQueryDisposable = ncApi.getServerStatus(queryUrl)
+                .subscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(status -> {
+                    if (checkForcedHttps) {
+                        baseUrl = "https://" + baseUrl;
+                    } else {
+                        baseUrl = "http://" + baseUrl;
+                    }
+
+                    checkEverything();
+                }, throwable -> {
+                    if (checkForcedHttps) {
+                        determineBaseUrlProtocol(false);
+                    } else {
+                        abortVerification();
+                    }
+                }, () -> {
+                    statusQueryDisposable.dispose();
+                });
+    }
+
+    private void checkEverything() {
         String credentials = ApiHelper.getCredentials(username, token);
         cookieManager.getCookieStore().removeAll();
 
@@ -199,8 +241,6 @@ public class AccountVerificationController extends BaseController {
 
                     abortVerification();
                 }, () -> dispose(roomsQueryDisposable));
-
-
     }
 
     private void dispose(@Nullable Disposable disposable) {
@@ -222,6 +262,10 @@ public class AccountVerificationController extends BaseController {
                 dbQueryDisposable = null;
             }
 
+            if (statusQueryDisposable != null && !statusQueryDisposable.isDisposed()) {
+                statusQueryDisposable.dispose();
+                statusQueryDisposable = null;
+            }
         }
 
         disposable = null;