Skip to content

Commit 8db0b54

Browse files
authored
Remove the data-client app adapter implementation (commons-app#5499)
* logErrorsInsteadOfCrashing only ever returned false, so remove it and simplify logger * Removed unused getMediaWikiBaseUrl() * Removed getDesiredLeadImageDp() from commons app adapter, since it's unused * Inlined the isLoggedIn() method of the app adapter * Inline the app adapter username/password * Removed the unused getRestbaseUriFormat() from the commons app adapter * Remove references to the data-client SharedPreferenceCookieManager * Manage our own OkHttpClient and remove the AppAdapter implementation
1 parent ab9e57f commit 8db0b54

File tree

57 files changed

+422
-518
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+422
-518
lines changed

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

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

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import fr.free.nrw.commons.settings.Prefs;
4242
import fr.free.nrw.commons.upload.FileUtils;
4343
import fr.free.nrw.commons.utils.ConfigUtils;
44+
import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar;
4445
import io.reactivex.Completable;
4546
import io.reactivex.android.schedulers.AndroidSchedulers;
4647
import io.reactivex.internal.functions.Functions;
@@ -58,7 +59,6 @@
5859
import org.acra.annotation.AcraDialog;
5960
import org.acra.annotation.AcraMailSender;
6061
import org.acra.data.StringFormat;
61-
import org.wikipedia.AppAdapter;
6262
import org.wikipedia.language.AppLanguageLookUpTable;
6363
import timber.log.Timber;
6464

@@ -94,6 +94,9 @@ public class CommonsApplication extends MultiDexApplication {
9494
@Named("default_preferences")
9595
JsonKvStore defaultPrefs;
9696

97+
@Inject
98+
CommonsCookieJar cookieJar;
99+
97100
@Inject
98101
CustomOkHttpNetworkFetcher customOkHttpNetworkFetcher;
99102

@@ -161,8 +164,6 @@ public void onCreate() {
161164
.getCommonsApplicationComponent()
162165
.inject(this);
163166

164-
AppAdapter.set(new CommonsAppAdapter(sessionManager, defaultPrefs));
165-
166167
initTimber();
167168

168169
if (!defaultPrefs.getBoolean("has_user_manually_removed_location")) {

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

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

33
import androidx.annotation.NonNull;
4+
import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar;
45
import java.io.File;
56
import java.io.IOException;
6-
import java.util.Arrays;
77
import java.util.Collections;
88
import java.util.List;
99
import java.util.concurrent.TimeUnit;
@@ -15,28 +15,27 @@
1515
import okhttp3.ResponseBody;
1616
import okhttp3.logging.HttpLoggingInterceptor;
1717
import okhttp3.logging.HttpLoggingInterceptor.Level;
18-
import org.wikipedia.dataclient.SharedPreferenceCookieManager;
1918
import org.wikipedia.dataclient.okhttp.HttpStatusException;
2019
import timber.log.Timber;
2120

2221
public final class OkHttpConnectionFactory {
2322
private static final String CACHE_DIR_NAME = "okhttp-cache";
2423
private static final long NET_CACHE_SIZE = 64 * 1024 * 1024;
25-
@NonNull private static final Cache NET_CACHE = new Cache(new File(CommonsApplication.getInstance().getCacheDir(),
26-
CACHE_DIR_NAME), NET_CACHE_SIZE);
2724

28-
@NonNull
29-
private static final OkHttpClient CLIENT = createClient();
25+
public static OkHttpClient CLIENT;
3026

31-
@NonNull public static OkHttpClient getClient() {
27+
@NonNull public static OkHttpClient getClient(final CommonsCookieJar cookieJar) {
28+
if (CLIENT == null) {
29+
CLIENT = createClient(cookieJar);
30+
}
3231
return CLIENT;
3332
}
3433

3534
@NonNull
36-
private static OkHttpClient createClient() {
35+
private static OkHttpClient createClient(final CommonsCookieJar cookieJar) {
3736
return new OkHttpClient.Builder()
38-
.cookieJar(SharedPreferenceCookieManager.getInstance())
39-
.cache(NET_CACHE)
37+
.cookieJar(cookieJar)
38+
.cache(new Cache(new File(CommonsApplication.getInstance().getCacheDir(), CACHE_DIR_NAME), NET_CACHE_SIZE))
4039
.connectTimeout(120, TimeUnit.SECONDS)
4140
.writeTimeout(120, TimeUnit.SECONDS)
4241
.readTimeout(120, TimeUnit.SECONDS)

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

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package fr.free.nrw.commons.auth.csrf
22

33
import androidx.annotation.VisibleForTesting
44
import fr.free.nrw.commons.auth.SessionManager
5-
import org.wikipedia.AppAdapter
6-
import org.wikipedia.dataclient.SharedPreferenceCookieManager
75
import org.wikipedia.dataclient.mwapi.MwQueryResponse
86
import fr.free.nrw.commons.auth.login.LoginClient
97
import fr.free.nrw.commons.auth.login.LoginCallback
@@ -19,16 +17,17 @@ import java.util.concurrent.Executors.newSingleThreadExecutor
1917
class CsrfTokenClient(
2018
private val sessionManager: SessionManager,
2119
private val csrfTokenInterface: CsrfTokenInterface,
22-
private val loginClient: LoginClient
20+
private val loginClient: LoginClient,
21+
private val logoutClient: LogoutClient
2322
) {
2423
private var retries = 0
2524
private var csrfTokenCall: Call<MwQueryResponse?>? = null
2625

2726
@Throws(Throwable::class)
2827
fun getTokenBlocking(): String {
2928
var token = ""
30-
val userName = AppAdapter.get().getUserName()
31-
val password = AppAdapter.get().getPassword()
29+
val userName = sessionManager.userName ?: ""
30+
val password = sessionManager.password ?: ""
3231

3332
for (retry in 0 until MAX_RETRIES_OF_LOGIN_BLOCKING) {
3433
try {
@@ -47,7 +46,7 @@ class CsrfTokenClient(
4746
}
4847

4948
token = response.body()!!.query()!!.csrfToken()!!
50-
if (AppAdapter.get().isLoggedIn() && token == ANON_TOKEN) {
49+
if (sessionManager.isUserLoggedIn && token == ANON_TOKEN) {
5150
throw RuntimeException("App believes we're logged in, but got anonymous token.")
5251
}
5352
break
@@ -66,7 +65,7 @@ class CsrfTokenClient(
6665
fun request(service: CsrfTokenInterface, cb: Callback): Call<MwQueryResponse?> =
6766
requestToken(service, object : Callback {
6867
override fun success(token: String?) {
69-
if (AppAdapter.get().isLoggedIn() && token == ANON_TOKEN) {
68+
if (sessionManager.isUserLoggedIn && token == ANON_TOKEN) {
7069
retryWithLogin(cb) {
7170
RuntimeException("App believes we're logged in, but got anonymous token.")
7271
}
@@ -102,11 +101,11 @@ class CsrfTokenClient(
102101
}
103102

104103
private fun retryWithLogin(callback: Callback, caught: () -> Throwable?) {
105-
val userName = AppAdapter.get().getUserName()
106-
val password = AppAdapter.get().getPassword()
104+
val userName = sessionManager.userName
105+
val password = sessionManager.password
107106
if (retries < MAX_RETRIES && !userName.isNullOrEmpty() && !password.isNullOrEmpty()) {
108107
retries++
109-
SharedPreferenceCookieManager.getInstance().clearAllCookies()
108+
logoutClient.logout()
110109
login(userName, password, callback) {
111110
Timber.i("retrying...")
112111
cancel()
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package fr.free.nrw.commons.auth.csrf
2+
3+
import fr.free.nrw.commons.wikidata.cookies.CommonsCookieStorage
4+
import javax.inject.Inject
5+
6+
class LogoutClient @Inject constructor(private val store: CommonsCookieStorage) {
7+
fun logout() = store.clear()
8+
}

app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,8 @@ public Scheduler providesMainThread() {
257257

258258
@Named("username")
259259
@Provides
260-
public String provideLoggedInUsername() {
261-
return Objects.toString(AppAdapter.get().getUserName(), "");
260+
public String provideLoggedInUsername(SessionManager sessionManager) {
261+
return Objects.toString(sessionManager.getUserName(), "");
262262
}
263263

264264
@Provides

app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
import fr.free.nrw.commons.actions.PageEditInterface;
1313
import fr.free.nrw.commons.actions.ThanksInterface;
1414
import fr.free.nrw.commons.auth.SessionManager;
15+
import fr.free.nrw.commons.auth.csrf.CsrfTokenClient;
1516
import fr.free.nrw.commons.auth.csrf.CsrfTokenInterface;
17+
import fr.free.nrw.commons.auth.csrf.LogoutClient;
18+
import fr.free.nrw.commons.auth.login.LoginClient;
1619
import fr.free.nrw.commons.auth.login.LoginInterface;
1720
import fr.free.nrw.commons.category.CategoryInterface;
1821
import fr.free.nrw.commons.explore.depictions.DepictsClient;
@@ -30,6 +33,8 @@
3033
import fr.free.nrw.commons.upload.depicts.DepictsInterface;
3134
import fr.free.nrw.commons.wikidata.CommonsServiceFactory;
3235
import fr.free.nrw.commons.wikidata.WikidataInterface;
36+
import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar;
37+
import fr.free.nrw.commons.wikidata.cookies.CommonsCookieStorage;
3338
import java.io.File;
3439
import java.util.Locale;
3540
import java.util.concurrent.TimeUnit;
@@ -40,11 +45,8 @@
4045
import okhttp3.OkHttpClient;
4146
import okhttp3.logging.HttpLoggingInterceptor;
4247
import okhttp3.logging.HttpLoggingInterceptor.Level;
43-
import fr.free.nrw.commons.auth.csrf.CsrfTokenClient;
44-
import org.wikipedia.AppAdapter;
4548
import org.wikipedia.dataclient.WikiSite;
4649
import org.wikipedia.json.GsonUtil;
47-
import fr.free.nrw.commons.auth.login.LoginClient;
4850
import timber.log.Timber;
4951

5052
@Module
@@ -78,8 +80,8 @@ public OkHttpClient provideOkHttpClient(Context context,
7880

7981
@Provides
8082
@Singleton
81-
public CommonsServiceFactory serviceFactory() {
82-
return new CommonsServiceFactory(AppAdapter.get().getOkHttpClient());
83+
public CommonsServiceFactory serviceFactory(CommonsCookieJar cookieJar) {
84+
return new CommonsServiceFactory(OkHttpConnectionFactory.getClient(cookieJar));
8385
}
8486

8587
@Provides
@@ -107,12 +109,27 @@ public OkHttpJsonApiClient provideOkHttpJsonApiClient(OkHttpClient okHttpClient,
107109
gson);
108110
}
109111

112+
@Provides
113+
@Singleton
114+
public CommonsCookieStorage provideCookieStorage(
115+
@Named("default_preferences") JsonKvStore preferences) {
116+
CommonsCookieStorage cookieStorage = new CommonsCookieStorage(preferences);
117+
cookieStorage.load();
118+
return cookieStorage;
119+
}
120+
121+
@Provides
122+
@Singleton
123+
public CommonsCookieJar provideCookieJar(CommonsCookieStorage storage) {
124+
return new CommonsCookieJar(storage);
125+
}
126+
110127
@Named(NAMED_COMMONS_CSRF)
111128
@Provides
112129
@Singleton
113130
public CsrfTokenClient provideCommonsCsrfTokenClient(SessionManager sessionManager,
114-
CsrfTokenInterface tokenInterface, LoginClient loginClient) {
115-
return new CsrfTokenClient(sessionManager, tokenInterface, loginClient);
131+
CsrfTokenInterface tokenInterface, LoginClient loginClient, LogoutClient logoutClient) {
132+
return new CsrfTokenClient(sessionManager, tokenInterface, loginClient, logoutClient);
116133
}
117134

118135
@Provides

0 commit comments

Comments
 (0)