summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java45
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/BasicAuthorizationInterceptor.java67
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java2
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java65
4 files changed, 73 insertions, 106 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java b/core/src/main/java/de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java
index f02334af5..8a13944e1 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/glide/ApOkHttpUrlLoader.java
@@ -11,6 +11,7 @@ import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.load.model.ModelLoader;
import com.bumptech.glide.load.model.ModelLoaderFactory;
+import de.danoeh.antennapod.core.service.BasicAuthorizationInterceptor;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
@@ -49,7 +50,6 @@ class ApOkHttpUrlLoader implements ModelLoader<String, InputStream> {
if (internalClient == null) {
OkHttpClient.Builder builder = AntennapodHttpClient.newBuilder();
builder.interceptors().add(new NetworkAllowanceInterceptor());
- builder.interceptors().add(new BasicAuthenticationInterceptor());
internalClient = builder.build();
}
}
@@ -123,48 +123,5 @@ class ApOkHttpUrlLoader implements ModelLoader<String, InputStream> {
.build();
}
}
-
- }
-
- private static class BasicAuthenticationInterceptor implements Interceptor {
-
- @Override
- public Response intercept(Chain chain) throws IOException {
- Request request = chain.request();
- String url = request.url().toString();
- String authentication = DBReader.getImageAuthentication(url);
-
- if(TextUtils.isEmpty(authentication)) {
- Log.d(TAG, "no credentials for '" + url + "'");
- return chain.proceed(request);
- }
-
- // add authentication
- String[] auth = authentication.split(":");
- if (auth.length != 2) {
- Log.d(TAG, "Invalid credentials for '" + url + "'");
- return chain.proceed(request);
- }
-
- String credentials = HttpDownloader.encodeCredentials(auth[0], auth[1], "ISO-8859-1");
- Request newRequest = request
- .newBuilder()
- .addHeader("Authorization", credentials)
- .build();
- Log.d(TAG, "Basic authentication with ISO-8859-1 encoding");
- Response response = chain.proceed(newRequest);
- if (!response.isSuccessful() && response.code() == HttpURLConnection.HTTP_UNAUTHORIZED) {
- credentials = HttpDownloader.encodeCredentials(auth[0], auth[1], "UTF-8");
- newRequest = request
- .newBuilder()
- .addHeader("Authorization", credentials)
- .build();
- Log.d(TAG, "Basic authentication with UTF-8 encoding");
- return chain.proceed(newRequest);
- } else {
- return response;
- }
- }
}
-
} \ No newline at end of file
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/BasicAuthorizationInterceptor.java b/core/src/main/java/de/danoeh/antennapod/core/service/BasicAuthorizationInterceptor.java
new file mode 100644
index 000000000..394eb3943
--- /dev/null
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/BasicAuthorizationInterceptor.java
@@ -0,0 +1,67 @@
+package de.danoeh.antennapod.core.service;
+
+import android.text.TextUtils;
+import android.util.Log;
+import androidx.annotation.NonNull;
+import de.danoeh.antennapod.core.service.download.DownloadRequest;
+import de.danoeh.antennapod.core.service.download.HttpDownloader;
+import de.danoeh.antennapod.core.storage.DBReader;
+import de.danoeh.antennapod.core.util.URIUtil;
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import okhttp3.Interceptor;
+import okhttp3.Request;
+import okhttp3.Response;
+
+public class BasicAuthorizationInterceptor implements Interceptor {
+ private static final String TAG = "BasicAuthInterceptor";
+
+ @Override
+ @NonNull
+ public Response intercept(Chain chain) throws IOException {
+ Request request = chain.request();
+
+ Response response = chain.proceed(request);
+
+ if (response.code() != HttpURLConnection.HTTP_UNAUTHORIZED) {
+ return response;
+ }
+
+ String userInfo;
+ if (request.tag() instanceof DownloadRequest) {
+ DownloadRequest downloadRequest = (DownloadRequest) request.tag();
+ userInfo = URIUtil.getURIFromRequestUrl(downloadRequest.getSource()).getUserInfo();
+ if (TextUtils.isEmpty(userInfo)) {
+ userInfo = downloadRequest.getUsername() + ":" + downloadRequest.getPassword();
+ }
+ } else {
+ userInfo = DBReader.getImageAuthentication(request.url().toString());
+ }
+
+ if (TextUtils.isEmpty(userInfo)) {
+ Log.d(TAG, "no credentials for '" + request.url() + "'");
+ return response;
+ }
+
+ String[] parts = userInfo.split(":");
+ if (parts.length != 2) {
+ Log.d(TAG, "Invalid credentials for '" + request.url() + "'");
+ return response;
+ }
+
+ Request.Builder newRequest = request.newBuilder();
+ Log.d(TAG, "Authorization failed, re-trying with ISO-8859-1 encoded credentials");
+ String credentials = HttpDownloader.encodeCredentials(parts[0], parts[1], "ISO-8859-1");
+ newRequest.header("Authorization", credentials);
+ response = chain.proceed(newRequest.build());
+
+ if (response.code() != HttpURLConnection.HTTP_UNAUTHORIZED) {
+ return response;
+ }
+
+ Log.d(TAG, "Authorization failed, re-trying with UTF-8 encoded credentials");
+ credentials = HttpDownloader.encodeCredentials(parts[0], parts[1], "UTF-8");
+ newRequest.header("Authorization", credentials);
+ return chain.proceed(newRequest.build());
+ }
+}
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java
index 672cbe9e1..8f368c76e 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/AntennapodHttpClient.java
@@ -5,6 +5,7 @@ import androidx.annotation.NonNull;
import android.text.TextUtils;
import android.util.Log;
+import de.danoeh.antennapod.core.service.BasicAuthorizationInterceptor;
import java.io.IOException;
import java.net.CookieManager;
import java.net.CookiePolicy;
@@ -112,6 +113,7 @@ public class AntennapodHttpClient {
}
return response;
});
+ builder.interceptors().add(new BasicAuthorizationInterceptor());
// set cookie handler
CookieManager cm = new CookieManager();
diff --git a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java
index 8abfa3da3..551a20bf2 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/service/download/HttpDownloader.java
@@ -4,6 +4,7 @@ import androidx.annotation.NonNull;
import android.text.TextUtils;
import android.util.Log;
+import de.danoeh.antennapod.core.service.BasicAuthorizationInterceptor;
import org.apache.commons.io.IOUtils;
import java.io.BufferedInputStream;
@@ -54,9 +55,7 @@ public class HttpDownloader extends Downloader {
return;
}
- OkHttpClient.Builder httpClientBuilder = AntennapodHttpClient.newBuilder();
- httpClientBuilder.interceptors().add(new BasicAuthorizationInterceptor(request));
- OkHttpClient httpClient = httpClientBuilder.build();
+ OkHttpClient httpClient = AntennapodHttpClient.getHttpClient();
RandomAccessFile out = null;
InputStream connection;
ResponseBody responseBody = null;
@@ -65,6 +64,7 @@ public class HttpDownloader extends Downloader {
final URI uri = URIUtil.getURIFromRequestUrl(request.getSource());
Request.Builder httpReq = new Request.Builder().url(uri.toURL())
.header("User-Agent", ClientConfig.USER_AGENT);
+ httpReq.tag(request);
if (request.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) {
// set header explicitly so that okhttp doesn't do transparent gzip
Log.d(TAG, "addHeader(\"Accept-Encoding\", \"identity\")");
@@ -308,63 +308,4 @@ public class HttpDownloader extends Downloader {
throw new AssertionError(e);
}
}
-
- private static class BasicAuthorizationInterceptor implements Interceptor {
-
- private final DownloadRequest downloadRequest;
-
- public BasicAuthorizationInterceptor(DownloadRequest downloadRequest) {
- this.downloadRequest = downloadRequest;
- }
-
- @Override
- public Response intercept(Chain chain) throws IOException {
- Request request = chain.request();
- String userInfo = URIUtil.getURIFromRequestUrl(downloadRequest.getSource()).getUserInfo();
-
- Response response = chain.proceed(request);
-
- if (response.code() != HttpURLConnection.HTTP_UNAUTHORIZED) {
- return response;
- }
-
- Request.Builder newRequest = request.newBuilder();
-
- Log.d(TAG, "Authorization failed, re-trying with ISO-8859-1 encoded credentials");
- if (userInfo != null) {
- String[] parts = userInfo.split(":");
- if (parts.length == 2) {
- String credentials = encodeCredentials(parts[0], parts[1], "ISO-8859-1");
- newRequest.header("Authorization", credentials);
- }
- } else if (!TextUtils.isEmpty(downloadRequest.getUsername()) && downloadRequest.getPassword() != null) {
- String credentials = encodeCredentials(downloadRequest.getUsername(), downloadRequest.getPassword(),
- "ISO-8859-1");
- newRequest.header("Authorization", credentials);
- }
-
- response = chain.proceed(newRequest.build());
-
- if (response.code() != HttpURLConnection.HTTP_UNAUTHORIZED) {
- return response;
- }
-
- Log.d(TAG, "Authorization failed, re-trying with UTF-8 encoded credentials");
- if (userInfo != null) {
- String[] parts = userInfo.split(":");
- if (parts.length == 2) {
- String credentials = encodeCredentials(parts[0], parts[1], "UTF-8");
- newRequest.header("Authorization", credentials);
- }
- } else if (!TextUtils.isEmpty(downloadRequest.getUsername()) && downloadRequest.getPassword() != null) {
- String credentials = encodeCredentials(downloadRequest.getUsername(), downloadRequest.getPassword(),
- "UTF-8");
- newRequest.header("Authorization", credentials);
- }
-
- return chain.proceed(newRequest.build());
- }
-
- }
-
}