From f6f4c7df10de830e98717912122b96799053a7f2 Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 16 Jun 2020 10:32:26 +0200 Subject: [PATCH 1/2] Add mock interceptor to mock network requests Signed-off-by: tobiasKaminsky --- .../com/nextcloud/common/NextcloudClient.kt | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/nextcloud/common/NextcloudClient.kt b/src/main/java/com/nextcloud/common/NextcloudClient.kt index 611cff5bca..f9d1104dca 100644 --- a/src/main/java/com/nextcloud/common/NextcloudClient.kt +++ b/src/main/java/com/nextcloud/common/NextcloudClient.kt @@ -40,6 +40,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.utils.Log_OC import okhttp3.CookieJar +import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.Request import org.apache.commons.httpclient.HttpStatus @@ -52,34 +53,43 @@ import javax.net.ssl.TrustManager class NextcloudClient(var baseUri: Uri, var userId: String, - val credentials: String, - val client: OkHttpClient) { + var credentials: String, + var client: OkHttpClient) { var followRedirects = true companion object { @JvmStatic val TAG = NextcloudClient::class.java.simpleName - private fun createDefaultClient(context: Context) : OkHttpClient { + private fun createDefaultClient(context: Context, interceptor: Interceptor?): OkHttpClient { val trustManager = AdvancedX509TrustManager(NetworkUtils.getKnownServersStore(context)) val sslContext = SSLContext.getInstance("TLSv1") sslContext.init(null, arrayOf(trustManager), null) val sslSocketFactory = sslContext.socketFactory - return OkHttpClient.Builder() + val builder = OkHttpClient.Builder() .cookieJar(CookieJar.NO_COOKIES) .callTimeout(DEFAULT_DATA_TIMEOUT_LONG, TimeUnit.MILLISECONDS) .sslSocketFactory(sslSocketFactory, trustManager) .hostnameVerifier { _: String?, _: SSLSession? -> true } - .build() + + interceptor?.let { builder.addInterceptor(it) } + + return builder.build() } } constructor(baseUri: Uri, userId: String, credentials: String, - context: Context) : this(baseUri, userId, credentials, createDefaultClient(context)) - + context: Context) : this(baseUri, userId, credentials, createDefaultClient(context, null)) + + constructor(baseUri: Uri, + userId: String, + credentials: String, + interceptor: Interceptor, + context: Context) : this(baseUri, userId, credentials, createDefaultClient(context, interceptor)) + fun execute(remoteOperation: RemoteOperation): RemoteOperationResult { return try { remoteOperation.run(this) From b73e7ec54c5a7d196f3967a352fea6a32139001f Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 16 Jun 2020 12:34:55 +0200 Subject: [PATCH 2/2] Add mock interceptor to mock network requests Signed-off-by: tobiasKaminsky --- .../lib/common/OwnCloudClientFactory.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/owncloud/android/lib/common/OwnCloudClientFactory.java b/src/main/java/com/owncloud/android/lib/common/OwnCloudClientFactory.java index 597e38ae01..255479bec9 100644 --- a/src/main/java/com/owncloud/android/lib/common/OwnCloudClientFactory.java +++ b/src/main/java/com/owncloud/android/lib/common/OwnCloudClientFactory.java @@ -45,6 +45,7 @@ import java.security.GeneralSecurityException; import okhttp3.Credentials; +import okhttp3.Interceptor; public class OwnCloudClientFactory { @@ -158,6 +159,14 @@ public static OwnCloudClient createOwnCloudClient(Uri uri, Context context, bool return client; } + public static NextcloudClient createNextcloudClient(Uri uri, + String userId, + String credentials, + Context context, + boolean followRedirects) { + return createNextcloudClient(uri, userId, credentials, context, followRedirects, null); + } + /** * Creates a OwnCloudClient to access a URL and sets the desired parameters for ownCloud * client connections. @@ -170,7 +179,8 @@ public static NextcloudClient createNextcloudClient(Uri uri, String userId, String credentials, Context context, - boolean followRedirects) { + boolean followRedirects, + Interceptor interceptor) { try { NetworkUtils.registerAdvancedSslContext(true, context); } catch (GeneralSecurityException e) { @@ -182,7 +192,13 @@ public static NextcloudClient createNextcloudClient(Uri uri, " in the system will be used for HTTPS connections", e); } - NextcloudClient client = new NextcloudClient(uri, userId, credentials, context); + NextcloudClient client; + + if (interceptor == null) { + client = new NextcloudClient(uri, userId, credentials, context); + } else { + client = new NextcloudClient(uri, userId, credentials, interceptor, context); + } client.setFollowRedirects(followRedirects); return client; @@ -195,6 +211,7 @@ public static NextcloudClient createNextcloudClient(Uri uri, * * @param account The nextcloud account * @param appContext Android application context + * @param interceptor * @return A Nextcloud object ready to be used * @throws AuthenticatorException If the authenticator failed to get the authorization * token for the account. @@ -204,7 +221,7 @@ public static NextcloudClient createNextcloudClient(Uri uri, * authorization token for the account. * @throws AccountNotFoundException If 'account' is unknown for the AccountManager */ - public static NextcloudClient createNextcloudClient(Account account, Context appContext) + public static NextcloudClient createNextcloudClient(Account account, Context appContext, Interceptor interceptor) throws OperationCanceledException, AuthenticatorException, IOException, AccountNotFoundException { //Log_OC.d(TAG, "Creating OwnCloudClient associated to " + account.name); @@ -222,9 +239,9 @@ public static NextcloudClient createNextcloudClient(Account account, Context app // AccountUtils.restoreCookies(account, client, appContext); return createNextcloudClient(baseUri, - userId, - Credentials.basic(username, password), + userId, Credentials.basic(username, password), appContext, - true); + true, + interceptor); } }