From e8bbbe78d80090539ba9666da3683cc69e1f3555 Mon Sep 17 00:00:00 2001 From: addshore Date: Sat, 13 May 2017 11:57:16 +0200 Subject: [PATCH] Detect when 2FA is needed and error nicely Fixes #507 --- app/src/main/java/fr/free/nrw/commons/MWApi.java | 10 ++++++++-- .../java/fr/free/nrw/commons/auth/LoginActivity.java | 2 ++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/MWApi.java b/app/src/main/java/fr/free/nrw/commons/MWApi.java index 37a4d02e7..aef8b5cd0 100644 --- a/app/src/main/java/fr/free/nrw/commons/MWApi.java +++ b/app/src/main/java/fr/free/nrw/commons/MWApi.java @@ -18,7 +18,8 @@ public class MWApi extends org.mediawiki.api.MWApi { * @param username String * @param password String * @return String On success: "PASS" - * failure: A failure message code (deifned by mediawiki) + * continue: "2FA" (More information required for 2FA) + * failure: A failure message code (defined by mediawiki) * misc: genericerror-UI, genericerror-REDIRECT, genericerror-RESTART * @throws IOException On api request IO issue */ @@ -45,9 +46,14 @@ public class MWApi extends org.mediawiki.api.MWApi { if (status.equals("PASS")) { this.isLoggedIn = true; return status; - } else if (status.equals("FAIL")) { return loginData.getString("/api/clientlogin/@messagecode"); + } else if ( + status.equals("UI") + && loginData.getString("/api/clientlogin/requests/_v/@id").equals("TOTPAuthenticationRequest") + && loginData.getString("/api/clientlogin/requests/_v/@provider").equals("Two-factor authentication (OATH).") + ) { + return "2FA"; } // UI, REDIRECT, RESTART diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java index b104eb2e2..6c3f6a389 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java @@ -119,6 +119,8 @@ public class LoginActivity extends AccountAuthenticatorActivity { } else if (result.toLowerCase().contains("userblocked".toLowerCase())) { // Matches login-userblocked response = R.string.login_failed_blocked; + } else if (result.equals("2FA")){ + response = R.string.login_failed_2fa_not_supported; } else { // Occurs with unhandled login failure codes Timber.d("Login failed with reason: %s", result); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e741c211b..0414f98fa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,6 +42,7 @@ Unable to login - please check your password Too many unsuccessful attempts. Please try again in a few minutes. Sorry, this user has been blocked on Commons + The app doesn\'t currently support 2 Factor Authentication. Login failed Upload Name this set