Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 17 additions & 7 deletions src/main/java/com/nextcloud/common/NextcloudClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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>(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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import java.security.GeneralSecurityException;

import okhttp3.Credentials;
import okhttp3.Interceptor;

public class OwnCloudClientFactory {

Expand Down Expand Up @@ -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.
Expand All @@ -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) {
Expand All @@ -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;
Expand All @@ -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.
Expand All @@ -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);
Expand All @@ -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);
}
}