Browse Source

Do not crash if wrong deep login url is used

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 4 years ago
parent
commit
9343bdd85d

+ 6 - 6
src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -466,10 +466,10 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
     }
     }
 
 
     private void parseAndLoginFromWebView(String dataString) {
     private void parseAndLoginFromWebView(String dataString) {
-        String prefix = getString(R.string.login_data_own_scheme) + PROTOCOL_SUFFIX + "login/";
-        LoginUrlInfo loginUrlInfo = parseLoginDataUrl(prefix, dataString);
-
         try {
         try {
+            String prefix = getString(R.string.login_data_own_scheme) + PROTOCOL_SUFFIX + "login/";
+            LoginUrlInfo loginUrlInfo = parseLoginDataUrl(prefix, dataString);
+
             if (mHostUrlInput != null) {
             if (mHostUrlInput != null) {
                 mHostUrlInput.setText("");
                 mHostUrlInput.setText("");
             }
             }
@@ -1438,10 +1438,10 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
 
 
                 Uri data = getIntent().getData();
                 Uri data = getIntent().getData();
                 if (data != null && data.toString().startsWith(getString(R.string.login_data_own_scheme))) {
                 if (data != null && data.toString().startsWith(getString(R.string.login_data_own_scheme))) {
-                    String prefix = getString(R.string.login_data_own_scheme) + PROTOCOL_SUFFIX + "login/";
-                    LoginUrlInfo loginUrlInfo = parseLoginDataUrl(prefix, data.toString());
-
                     try {
                     try {
+                        String prefix = getString(R.string.login_data_own_scheme) + PROTOCOL_SUFFIX + "login/";
+                        LoginUrlInfo loginUrlInfo = parseLoginDataUrl(prefix, data.toString());
+
                         mServerInfo.mBaseUrl = AuthenticatorUrlUtils.normalizeUrlSuffix(loginUrlInfo.serverAddress);
                         mServerInfo.mBaseUrl = AuthenticatorUrlUtils.normalizeUrlSuffix(loginUrlInfo.serverAddress);
                         webViewUser = loginUrlInfo.username;
                         webViewUser = loginUrlInfo.username;
                         webViewPassword = loginUrlInfo.password;
                         webViewPassword = loginUrlInfo.password;

+ 11 - 7
src/main/java/com/owncloud/android/authentication/DeepLinkLoginActivity.java

@@ -24,13 +24,17 @@ public class DeepLinkLoginActivity extends AuthenticatorActivity {
         Uri data = getIntent().getData();
         Uri data = getIntent().getData();
 
 
         if (data != null) {
         if (data != null) {
-            String prefix = getString(R.string.login_data_own_scheme) + PROTOCOL_SUFFIX + "login/";
-            LoginUrlInfo loginUrlInfo = parseLoginDataUrl(prefix, data.toString());
-
-            TextView loginText = findViewById(R.id.loginInfo);
-            loginText.setTextColor(ThemeUtils.fontColor(this));
-            loginText.setText(String.format("Login with %1$s to %2$s", loginUrlInfo.username,
-                                            loginUrlInfo.serverAddress));
+            try {
+                String prefix = getString(R.string.login_data_own_scheme) + PROTOCOL_SUFFIX + "login/";
+                LoginUrlInfo loginUrlInfo = parseLoginDataUrl(prefix, data.toString());
+
+                TextView loginText = findViewById(R.id.loginInfo);
+                loginText.setTextColor(ThemeUtils.fontColor(this));
+                loginText.setText(String.format("Login with %1$s to %2$s", loginUrlInfo.username,
+                                                loginUrlInfo.serverAddress));
+            } catch (IllegalArgumentException e) {
+                Toast.makeText(this, R.string.direct_login_failed, Toast.LENGTH_LONG).show();
+            }
         }
         }
     }
     }
 }
 }

+ 1 - 0
src/main/res/values/strings.xml

@@ -951,4 +951,5 @@
     <string name="wrong_storage_path">Data storage folder does not exist!</string>
     <string name="wrong_storage_path">Data storage folder does not exist!</string>
     <string name="wrong_storage_path_desc">This might be due to a backup restore on another device. Falling back to default. Please check settings to adjust data storage folder.</string>
     <string name="wrong_storage_path_desc">This might be due to a backup restore on another device. Falling back to default. Please check settings to adjust data storage folder.</string>
     <string name="dialog_close">Close</string>
     <string name="dialog_close">Close</string>
+    <string name="direct_login_failed">Login via direct link failed!</string>
 </resources>
 </resources>