Skip to content

Commit 0541aac

Browse files
authored
Move login client out of the data-client (commons-app#5476)
1 parent 8789879 commit 0541aac

23 files changed

+195
-234
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ dependencies {
2727
}
2828
implementation 'com.squareup.retrofit2:retrofit:2.8.1'
2929
implementation "com.squareup.retrofit2:converter-gson:2.8.1"
30+
implementation "com.squareup.retrofit2:adapter-rxjava2:2.8.1"
3031
implementation 'com.squareup.okio:okio:2.2.2'
3132
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
3233
implementation 'io.reactivex.rxjava2:rxjava:2.2.3'

app/src/main/java/fr/free/nrw/commons/CommonsAppAdapter.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
package fr.free.nrw.commons;
22

33
import androidx.annotation.NonNull;
4-
4+
import fr.free.nrw.commons.auth.SessionManager;
5+
import fr.free.nrw.commons.kvstore.JsonKvStore;
6+
import okhttp3.OkHttpClient;
57
import org.wikipedia.AppAdapter;
68
import org.wikipedia.dataclient.SharedPreferenceCookieManager;
79
import org.wikipedia.dataclient.WikiSite;
810
import org.wikipedia.json.GsonMarshaller;
911
import org.wikipedia.json.GsonUnmarshaller;
10-
import org.wikipedia.login.LoginResult;
11-
12-
import fr.free.nrw.commons.auth.SessionManager;
13-
import fr.free.nrw.commons.kvstore.JsonKvStore;
14-
import okhttp3.OkHttpClient;
1512

1613
public class CommonsAppAdapter extends AppAdapter {
1714
private final int DEFAULT_THUMB_SIZE = 640;
@@ -60,11 +57,6 @@ public String getPassword() {
6057
return sessionManager.getPassword();
6158
}
6259

63-
@Override
64-
public void updateAccount(@NonNull LoginResult result) {
65-
sessionManager.updateAccount(result);
66-
}
67-
6860
@Override
6961
public SharedPreferenceCookieManager getCookies() {
7062
if (!preferences.contains(COOKIE_STORE_NAME)) {

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,17 @@
2525
import androidx.core.app.NavUtils;
2626
import androidx.core.content.ContextCompat;
2727

28+
import fr.free.nrw.commons.auth.login.LoginClient;
29+
import fr.free.nrw.commons.auth.login.LoginInterface;
30+
import fr.free.nrw.commons.auth.login.LoginResult;
2831
import fr.free.nrw.commons.databinding.ActivityLoginBinding;
2932
import fr.free.nrw.commons.utils.ActivityUtils;
3033
import java.util.Locale;
3134
import org.wikipedia.AppAdapter;
3235
import org.wikipedia.dataclient.ServiceFactory;
3336
import org.wikipedia.dataclient.WikiSite;
3437
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
35-
import org.wikipedia.login.LoginClient;
36-
import org.wikipedia.login.LoginClient.LoginCallback;
37-
import org.wikipedia.login.LoginResult;
38+
import fr.free.nrw.commons.auth.login.LoginClient.LoginCallback;
3839

3940
import javax.inject.Inject;
4041
import javax.inject.Named;
@@ -231,7 +232,7 @@ public void performLogin() {
231232

232233
private void doLogin(String username, String password, String twoFactorCode) {
233234
progressDialog.show();
234-
loginToken = ServiceFactory.get(commonsWikiSite).getLoginToken();
235+
loginToken = ServiceFactory.get(commonsWikiSite, LoginInterface.class).getLoginToken();
235236
loginToken.enqueue(
236237
new Callback<MwQueryResponse>() {
237238
@Override
@@ -313,7 +314,7 @@ private void onLoginSuccess(LoginResult loginResult) {
313314
}
314315
compositeDisposable.clear();
315316
sessionManager.setUserLoggedIn(true);
316-
AppAdapter.get().updateAccount(loginResult);
317+
sessionManager.updateAccount(loginResult);
317318
progressDialog.dismiss();
318319
showSuccessAndDismissDialog();
319320
startMainActivity();

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

Lines changed: 0 additions & 36 deletions
This file was deleted.

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
import androidx.annotation.NonNull;
1010
import androidx.annotation.Nullable;
1111

12-
import org.wikipedia.login.LoginResult;
13-
12+
import fr.free.nrw.commons.auth.login.LoginResult;
1413
import javax.inject.Inject;
1514
import javax.inject.Named;
1615
import javax.inject.Singleton;

app/src/main/java/fr/free/nrw/commons/auth/csrf/CsrfTokenClient.kt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
package fr.free.nrw.commons.auth.csrf
22

33
import androidx.annotation.VisibleForTesting
4+
import fr.free.nrw.commons.auth.SessionManager
45
import org.wikipedia.AppAdapter
56
import org.wikipedia.dataclient.ServiceFactory
67
import org.wikipedia.dataclient.SharedPreferenceCookieManager
78
import org.wikipedia.dataclient.WikiSite
89
import org.wikipedia.dataclient.mwapi.MwQueryResponse
9-
import org.wikipedia.login.LoginClient
10-
import org.wikipedia.login.LoginClient.LoginCallback
11-
import org.wikipedia.login.LoginClient.LoginFailedException
12-
import org.wikipedia.login.LoginResult
10+
import fr.free.nrw.commons.auth.login.LoginClient
11+
import fr.free.nrw.commons.auth.login.LoginClient.LoginCallback
12+
import fr.free.nrw.commons.auth.login.LoginClient.LoginFailedException
13+
import fr.free.nrw.commons.auth.login.LoginResult
1314
import retrofit2.Call
1415
import retrofit2.Response
1516
import timber.log.Timber
1617
import java.io.IOException
1718
import java.util.concurrent.Callable
1819
import java.util.concurrent.Executors.newSingleThreadExecutor
1920

20-
class CsrfTokenClient(private val csrfWikiSite: WikiSite) {
21+
class CsrfTokenClient(
22+
private val csrfWikiSite: WikiSite,
23+
private val sessionManager: SessionManager
24+
) {
2125
private var retries = 0
2226
private var csrfTokenCall: Call<MwQueryResponse?>? = null
2327
private val loginClient = LoginClient()
@@ -33,7 +37,8 @@ class CsrfTokenClient(private val csrfWikiSite: WikiSite) {
3337
try {
3438
if (retry > 0) {
3539
// Log in explicitly
36-
LoginClient().loginBlocking(csrfWikiSite, userName, password, "")
40+
LoginClient()
41+
.loginBlocking(csrfWikiSite, userName, password, "")
3742
}
3843

3944
// Get CSRFToken response off the main thread.
@@ -121,10 +126,11 @@ class CsrfTokenClient(private val csrfWikiSite: WikiSite) {
121126
password: String,
122127
callback: Callback,
123128
retryCallback: () -> Unit
124-
) = LoginClient().request(csrfWikiSite, username, password, object : LoginCallback {
129+
) = LoginClient()
130+
.request(csrfWikiSite, username, password, object : LoginCallback {
125131
override fun success(loginResult: LoginResult) {
126132
if (loginResult.pass()) {
127-
AppAdapter.get().updateAccount(loginResult)
133+
sessionManager.updateAccount(loginResult)
128134
retryCallback()
129135
} else {
130136
callback.failure(LoginFailedException(loginResult.message))

data-client/src/main/java/org/wikipedia/login/LoginClient.java renamed to app/src/main/java/fr/free/nrw/commons/auth/login/LoginClient.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.wikipedia.login;
1+
package fr.free.nrw.commons.auth.login;
22

33
import android.annotation.SuppressLint;
44
import android.text.TextUtils;
@@ -52,7 +52,7 @@ public void request(@NonNull final WikiSite wiki, @NonNull final String userName
5252
@NonNull final String password, @NonNull final LoginCallback cb) {
5353
cancel();
5454

55-
tokenCall = ServiceFactory.get(wiki).getLoginToken();
55+
tokenCall = ServiceFactory.get(wiki, LoginInterface.class).getLoginToken();
5656
tokenCall.enqueue(new Callback<MwQueryResponse>() {
5757
@Override public void onResponse(@NonNull Call<MwQueryResponse> call,
5858
@NonNull Response<MwQueryResponse> response) {
@@ -75,8 +75,8 @@ public void login(@NonNull final WikiSite wiki, @NonNull final String userName,
7575
@Nullable final String loginToken, @NonNull final String userLanguage, @NonNull final LoginCallback cb) {
7676
this.userLanguage = userLanguage;
7777
loginCall = TextUtils.isEmpty(twoFactorCode) && TextUtils.isEmpty(retypedPassword)
78-
? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, userLanguage, Service.WIKIPEDIA_URL)
79-
: ServiceFactory.get(wiki).postLogIn(userName, password, retypedPassword, twoFactorCode, loginToken,
78+
? ServiceFactory.get(wiki, LoginInterface.class).postLogIn(userName, password, loginToken, userLanguage, Service.WIKIPEDIA_URL)
79+
: ServiceFactory.get(wiki, LoginInterface.class).postLogIn(userName, password, retypedPassword, twoFactorCode, loginToken,
8080
userLanguage, true);
8181
loginCall.enqueue(new Callback<LoginResponse>() {
8282
@Override
@@ -117,15 +117,15 @@ public void onFailure(@NonNull Call<LoginResponse> call, @NonNull Throwable t) {
117117

118118
public void loginBlocking(@NonNull final WikiSite wiki, @NonNull final String userName,
119119
@NonNull final String password, @Nullable final String twoFactorCode) throws Throwable {
120-
Response<MwQueryResponse> tokenResponse = ServiceFactory.get(wiki).getLoginToken().execute();
120+
Response<MwQueryResponse> tokenResponse = ServiceFactory.get(wiki, LoginInterface.class).getLoginToken().execute();
121121
if (tokenResponse.body() == null || TextUtils.isEmpty(tokenResponse.body().query().loginToken())) {
122122
throw new IOException("Unexpected response when getting login token.");
123123
}
124124
String loginToken = tokenResponse.body().query().loginToken();
125125

126126
Call<LoginResponse> tempLoginCall = StringUtils.defaultIfEmpty(twoFactorCode, "").isEmpty()
127-
? ServiceFactory.get(wiki).postLogIn(userName, password, loginToken, userLanguage, Service.WIKIPEDIA_URL)
128-
: ServiceFactory.get(wiki).postLogIn(userName, password, null, twoFactorCode, loginToken,
127+
? ServiceFactory.get(wiki, LoginInterface.class).postLogIn(userName, password, loginToken, userLanguage, Service.WIKIPEDIA_URL)
128+
: ServiceFactory.get(wiki, LoginInterface.class).postLogIn(userName, password, null, twoFactorCode, loginToken,
129129
userLanguage, true);
130130
Response<LoginResponse> response = tempLoginCall.execute();
131131
LoginResponse loginResponse = response.body();
@@ -153,7 +153,7 @@ public void loginBlocking(@NonNull final WikiSite wiki, @NonNull final String us
153153
@SuppressLint("CheckResult")
154154
private void getExtendedInfo(@NonNull final WikiSite wiki, @NonNull String userName,
155155
@NonNull final LoginResult loginResult, @NonNull final LoginCallback cb) {
156-
ServiceFactory.get(wiki).getUserInfo(userName)
156+
ServiceFactory.get(wiki, LoginInterface.class).getUserInfo(userName)
157157
.subscribeOn(Schedulers.io())
158158
.observeOn(AndroidSchedulers.mainThread())
159159
.subscribe(response -> {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package fr.free.nrw.commons.auth.login
2+
3+
import io.reactivex.Observable
4+
import org.wikipedia.dataclient.Service
5+
import org.wikipedia.dataclient.mwapi.MwQueryResponse
6+
import retrofit2.Call
7+
import retrofit2.http.Field
8+
import retrofit2.http.FormUrlEncoded
9+
import retrofit2.http.GET
10+
import retrofit2.http.Headers
11+
import retrofit2.http.POST
12+
import retrofit2.http.Query
13+
14+
interface LoginInterface {
15+
@Headers("Cache-Control: no-cache")
16+
@GET(Service.MW_API_PREFIX + "action=query&meta=tokens&type=login")
17+
fun getLoginToken(): Call<MwQueryResponse?>
18+
19+
@Headers("Cache-Control: no-cache")
20+
@FormUrlEncoded
21+
@POST(Service.MW_API_PREFIX + "action=clientlogin&rememberMe=")
22+
fun postLogIn(
23+
@Field("username") user: String?,
24+
@Field("password") pass: String?,
25+
@Field("logintoken") token: String?,
26+
@Field("uselang") userLanguage: String?,
27+
@Field("loginreturnurl") url: String?
28+
): Call<LoginClient.LoginResponse?>
29+
30+
@Headers("Cache-Control: no-cache")
31+
@FormUrlEncoded
32+
@POST(Service.MW_API_PREFIX + "action=clientlogin&rememberMe=")
33+
fun postLogIn(
34+
@Field("username") user: String?,
35+
@Field("password") pass: String?,
36+
@Field("retype") retypedPass: String?,
37+
@Field("OATHToken") twoFactorCode: String?,
38+
@Field("logintoken") token: String?,
39+
@Field("uselang") userLanguage: String?,
40+
@Field("logincontinue") loginContinue: Boolean
41+
): Call<LoginClient.LoginResponse?>
42+
43+
@GET(Service.MW_API_PREFIX + "action=query&meta=userinfo&list=users&usprop=groups|cancreate")
44+
fun getUserInfo(@Query("ususers") userName: String): Observable<MwQueryResponse?>
45+
}

data-client/src/main/java/org/wikipedia/login/LoginOAuthResult.java renamed to app/src/main/java/fr/free/nrw/commons/auth/login/LoginOAuthResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.wikipedia.login;
1+
package fr.free.nrw.commons.auth.login;
22

33
import androidx.annotation.NonNull;
44
import androidx.annotation.Nullable;

data-client/src/main/java/org/wikipedia/login/LoginResetPasswordResult.java renamed to app/src/main/java/fr/free/nrw/commons/auth/login/LoginResetPasswordResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.wikipedia.login;
1+
package fr.free.nrw.commons.auth.login;
22

33
import androidx.annotation.NonNull;
44
import androidx.annotation.Nullable;

0 commit comments

Comments
 (0)