diff --git a/owncloudComLibrary/build.gradle b/owncloudComLibrary/build.gradle index 031b5383..cb504523 100644 --- a/owncloudComLibrary/build.gradle +++ b/owncloudComLibrary/build.gradle @@ -8,6 +8,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion" api 'com.gitlab.ownclouders:dav4android:oc_support_1.0.1' api 'com.github.hannesa2:Logcat:1.6.0' + api 'net.openid:appauth:0.7.1' } allOpen { diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuthConnectionBuilder.java b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuthConnectionBuilder.java new file mode 100644 index 00000000..f191ce92 --- /dev/null +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/authentication/oauth/OAuthConnectionBuilder.java @@ -0,0 +1,38 @@ +package com.owncloud.android.lib.common.authentication.oauth; + +import android.net.Uri; + +import androidx.annotation.NonNull; +import net.openid.appauth.Preconditions; +import net.openid.appauth.connectivity.ConnectionBuilder; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.concurrent.TimeUnit; + +/** + * Based on {@link net.openid.appauth.connectivity.DefaultConnectionBuilder} but permitting http connections in addition + * to https connections + */ +public final class OAuthConnectionBuilder implements ConnectionBuilder { + + /** + * The singleton instance of the default connection builder. + */ + public static final OAuthConnectionBuilder INSTANCE = new OAuthConnectionBuilder(); + + private static final int CONNECTION_TIMEOUT_MS = (int) TimeUnit.SECONDS.toMillis(15); + private static final int READ_TIMEOUT_MS = (int) TimeUnit.SECONDS.toMillis(10); + + @NonNull + @Override + public HttpURLConnection openConnection(@NonNull Uri uri) throws IOException { + Preconditions.checkNotNull(uri, "url must not be null"); + HttpURLConnection conn = (HttpURLConnection) new URL(uri.toString()).openConnection(); + conn.setConnectTimeout(CONNECTION_TIMEOUT_MS); + conn.setReadTimeout(READ_TIMEOUT_MS); + conn.setInstanceFollowRedirects(false); + return conn; + } +}