Skip to content

Commit 4178998

Browse files
ashishkumar468maskaravivek
authored andcommitted
* Login the login token way, handle LoginResult minutely, add account based on LoginResult (#3151)
1 parent 90d4e49 commit 4178998

File tree

3 files changed

+79
-49
lines changed

3 files changed

+79
-49
lines changed

app/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ dependencies {
3131
implementation 'com.facebook.fresco:fresco:1.13.0'
3232
implementation 'com.drewnoakes:metadata-extractor:2.11.0'
3333
implementation 'org.apache.commons:commons-lang3:3.8.1'
34-
implementation 'com.github.maskaravivek:wikimedia-android-data-client:v0.0.26'
34+
implementation 'com.github.maskaravivek:wikimedia-android-data-client:v0.0.27'
3535

3636
// UI
3737
implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'

app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java

+77-48
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package fr.free.nrw.commons.auth;
22

3+
import static android.view.KeyEvent.KEYCODE_ENTER;
4+
import static android.view.View.VISIBLE;
5+
import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
6+
import static fr.free.nrw.commons.di.NetworkingModule.NAMED_COMMONS_WIKI_SITE;
7+
38
import android.accounts.AccountAuthenticatorActivity;
49
import android.app.ProgressDialog;
510
import android.content.Context;
@@ -16,30 +21,20 @@
1621
import android.widget.Button;
1722
import android.widget.EditText;
1823
import android.widget.TextView;
19-
2024
import androidx.annotation.ColorRes;
2125
import androidx.annotation.NonNull;
26+
import androidx.annotation.Nullable;
2227
import androidx.annotation.StringRes;
2328
import androidx.appcompat.app.AlertDialog;
2429
import androidx.appcompat.app.AppCompatDelegate;
2530
import androidx.core.app.NavUtils;
2631
import androidx.core.content.ContextCompat;
27-
28-
import com.google.android.material.textfield.TextInputLayout;
29-
30-
import org.wikipedia.AppAdapter;
31-
import org.wikipedia.dataclient.WikiSite;
32-
import org.wikipedia.login.LoginClient;
33-
import org.wikipedia.login.LoginResult;
34-
35-
import javax.inject.Inject;
36-
import javax.inject.Named;
37-
3832
import butterknife.BindView;
3933
import butterknife.ButterKnife;
4034
import butterknife.OnClick;
4135
import butterknife.OnEditorAction;
4236
import butterknife.OnFocusChange;
37+
import com.google.android.material.textfield.TextInputLayout;
4338
import fr.free.nrw.commons.BuildConfig;
4439
import fr.free.nrw.commons.R;
4540
import fr.free.nrw.commons.Utils;
@@ -52,18 +47,21 @@
5247
import fr.free.nrw.commons.theme.NavigationBaseActivity;
5348
import fr.free.nrw.commons.utils.ConfigUtils;
5449
import fr.free.nrw.commons.utils.ViewUtil;
55-
import io.reactivex.Completable;
56-
import io.reactivex.android.schedulers.AndroidSchedulers;
5750
import io.reactivex.disposables.CompositeDisposable;
58-
import io.reactivex.functions.Action;
59-
import io.reactivex.schedulers.Schedulers;
51+
import javax.inject.Inject;
52+
import javax.inject.Named;
53+
import org.wikipedia.AppAdapter;
54+
import org.wikipedia.dataclient.ServiceFactory;
55+
import org.wikipedia.dataclient.WikiSite;
56+
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
57+
import org.wikipedia.login.LoginClient;
58+
import org.wikipedia.login.LoginClient.LoginCallback;
59+
import org.wikipedia.login.LoginResult;
60+
import retrofit2.Call;
61+
import retrofit2.Callback;
62+
import retrofit2.Response;
6063
import timber.log.Timber;
6164

62-
import static android.view.KeyEvent.KEYCODE_ENTER;
63-
import static android.view.View.VISIBLE;
64-
import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE;
65-
import static fr.free.nrw.commons.di.NetworkingModule.NAMED_COMMONS_WIKI_SITE;
66-
6765
public class LoginActivity extends AccountAuthenticatorActivity {
6866

6967
@Inject
@@ -111,6 +109,7 @@ public class LoginActivity extends AccountAuthenticatorActivity {
111109
private AppCompatDelegate delegate;
112110
private LoginTextWatcher textWatcher = new LoginTextWatcher();
113111
private CompositeDisposable compositeDisposable = new CompositeDisposable();
112+
private Call<MwQueryResponse> loginToken;
114113

115114
@Override
116115
public void onCreate(Bundle savedInstanceState) {
@@ -238,6 +237,9 @@ protected void onDestroy() {
238237
passwordEdit.removeTextChangedListener(textWatcher);
239238
twoFactorEdit.removeTextChangedListener(textWatcher);
240239
delegate.onDestroy();
240+
if(null!=loginClient) {
241+
loginClient.cancel();
242+
}
241243
super.onDestroy();
242244
}
243245

@@ -255,34 +257,62 @@ public void performLogin() {
255257

256258
private void doLogin(String username, String password, String twoFactorCode) {
257259
progressDialog.show();
260+
loginToken = ServiceFactory.get(commonsWikiSite).getLoginToken();
261+
loginToken.enqueue(
262+
new Callback<MwQueryResponse>() {
263+
@Override
264+
public void onResponse(Call<MwQueryResponse> call,
265+
Response<MwQueryResponse> response) {
266+
loginClient.login(commonsWikiSite, username, password, null, twoFactorCode,
267+
response.body().query().loginToken(), new LoginCallback() {
268+
@Override
269+
public void success(@NonNull LoginResult result) {
270+
Timber.d("Login Success");
271+
onLoginSuccess(result);
272+
}
273+
274+
@Override
275+
public void twoFactorPrompt(@NonNull Throwable caught,
276+
@Nullable String token) {
277+
Timber.d("Requesting 2FA prompt");
278+
hideProgress();
279+
askUserForTwoFactorAuth();
280+
}
281+
282+
@Override
283+
public void passwordResetPrompt(@Nullable String token) {
284+
Timber.d("Showing password reset prompt");
285+
hideProgress();
286+
showPasswordResetPrompt();
287+
}
288+
289+
@Override
290+
public void error(@NonNull Throwable caught) {
291+
Timber.e(caught);
292+
hideProgress();
293+
showMessageAndCancelDialog(caught.getLocalizedMessage());
294+
}
295+
});
296+
}
297+
298+
@Override
299+
public void onFailure(Call<MwQueryResponse> call, Throwable t) {
300+
Timber.e(t);
301+
showMessageAndCancelDialog(t.getLocalizedMessage());
302+
}
303+
});
304+
305+
}
306+
307+
private void hideProgress() {
308+
progressDialog.dismiss();
309+
}
258310

259-
Action action = () -> {
260-
try {
261-
loginClient.loginBlocking(commonsWikiSite, username, password, twoFactorCode);
262-
} catch (Throwable throwable) {
263-
throwable.printStackTrace();
264-
}
265-
};
266-
267-
compositeDisposable.add(Completable.fromAction(action)
268-
.subscribeOn(Schedulers.io())
269-
.observeOn(AndroidSchedulers.mainThread())
270-
.subscribe(() -> onLoginSuccess(username, password),
271-
error -> {
272-
if (error instanceof LoginClient.LoginFailedException) {
273-
LoginClient.LoginFailedException exception = (LoginClient.LoginFailedException) error;
274-
if (exception.getMessage().equals("2FA")) {
275-
askUserForTwoFactorAuth();
276-
}
277-
}
278-
if (!progressDialog.isShowing()) {
279-
return;
280-
}
281-
progressDialog.dismiss();
282-
showMessageAndCancelDialog(R.string.error_occurred);
283-
}));
311+
private void showPasswordResetPrompt() {
312+
showMessageAndCancelDialog(getString(R.string.you_must_reset_your_passsword));
284313
}
285314

315+
286316
/**
287317
* This function is called when user skips the login.
288318
* It redirects the user to Explore Activity.
@@ -302,13 +332,12 @@ private void showLoggingProgressBar() {
302332
progressDialog.show();
303333
}
304334

305-
private void onLoginSuccess(String username, String password) {
335+
private void onLoginSuccess(LoginResult loginResult) {
306336
if (!progressDialog.isShowing()) {
307337
// no longer attached to activity!
308338
return;
309339
}
310340
sessionManager.setUserLoggedIn(true);
311-
LoginResult loginResult = new LoginResult(commonsWikiSite, "PASS", username, password, "");
312341
AppAdapter.get().updateAccount(loginResult);
313342
progressDialog.dismiss();
314343
showSuccessAndDismissDialog();

app/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -576,4 +576,5 @@ Upload your first media by tapping on the add button.</string>
576576
<string name="delete_helper_ask_reason_copyright_logo">Logo</string>
577577
<string name="delete_helper_ask_reason_copyright_other">Other</string>
578578
<string name="delete_helper_ask_alert_set_positive_button_reason">Because it is</string>
579+
<string name="you_must_reset_your_passsword">Something went wrong with login, you must reset your password !!</string>
579580
</resources>

0 commit comments

Comments
 (0)