pull/590/head
FongMi 9 months ago
parent c08043ec9e
commit 3e4c77da80
  1. 9
      catvod/src/main/java/com/github/catvod/net/OkHttp.java
  2. 48
      catvod/src/main/java/com/github/catvod/net/interceptor/AuthInterceptor.java
  3. 5
      catvod/src/main/java/com/github/catvod/utils/Util.java

@ -41,6 +41,7 @@ public class OkHttp {
private ResponseInterceptor responseInterceptor;
private RequestInterceptor requestInterceptor;
private AuthInterceptor authInterceptor;
private OkProxySelector selector;
private OkHttpClient client;
private OkDns dns;
@ -63,6 +64,7 @@ public class OkHttp {
cancelAll();
dns().clear();
selector().clear();
authInterceptor().clear();
requestInterceptor().clear();
}
@ -94,6 +96,11 @@ public class OkHttp {
return get().requestInterceptor = new RequestInterceptor();
}
public static AuthInterceptor authInterceptor() {
if (get().authInterceptor != null) return get().authInterceptor;
return get().authInterceptor = new AuthInterceptor();
}
public static OkProxySelector selector() {
if (get().selector != null) return get().selector;
return get().selector = new OkProxySelector();
@ -188,7 +195,7 @@ public class OkHttp {
}
private static OkHttpClient.Builder getBuilder() {
OkHttpClient.Builder builder = new OkHttpClient.Builder().cookieJar(OkCookieJar.get()).addInterceptor(requestInterceptor()).addInterceptor(new AuthInterceptor()).addNetworkInterceptor(responseInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).sslSocketFactory(getSSLContext().getSocketFactory(), trustAllCertificates());
OkHttpClient.Builder builder = new OkHttpClient.Builder().cookieJar(OkCookieJar.get()).addInterceptor(requestInterceptor()).addInterceptor(authInterceptor()).addNetworkInterceptor(responseInterceptor()).connectTimeout(TIMEOUT, TimeUnit.MILLISECONDS).readTimeout(TIMEOUT, TimeUnit.MILLISECONDS).writeTimeout(TIMEOUT, TimeUnit.MILLISECONDS).dns(dns()).hostnameVerifier((hostname, session) -> true).sslSocketFactory(getSSLContext().getSocketFactory(), trustAllCertificates());
HttpLoggingInterceptor logging = new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY);
builder.proxySelector(get().proxy ? selector() : defaultSelector);
//builder.addNetworkInterceptor(logging);

@ -7,6 +7,7 @@ import com.github.catvod.utils.Util;
import com.google.common.net.HttpHeaders;
import java.io.IOException;
import java.net.URI;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@ -16,39 +17,40 @@ import okhttp3.Response;
public class AuthInterceptor implements Interceptor {
private final Map<String, String> authCache;
private final Map<String, String> userMap;
public AuthInterceptor() {
authCache = new ConcurrentHashMap<>();
userMap = new ConcurrentHashMap<>();
}
public void clear() {
userMap.clear();
}
@NonNull
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request request = check(chain.request());
Response response = chain.proceed(request);
if (response.code() != 401) return response;
String host = request.url().host();
String user = request.url().uri().getUserInfo();
String header = response.header(HttpHeaders.WWW_AUTHENTICATE);
if (user == null && userMap.containsKey(host)) user = userMap.get(host);
if (user == null) return response;
else response.close();
String auth = digest(header) ? Util.digest(user, header, request) : Util.basic(user);
return chain.proceed(request.newBuilder().header(HttpHeaders.AUTHORIZATION, auth).build());
}
if (authCache.containsKey(host)) {
return chain.proceed(request.newBuilder().header(HttpHeaders.AUTHORIZATION, authCache.get(host)).build());
}
private boolean digest(String header) {
return header != null && header.startsWith("Digest");
}
Response response = chain.proceed(request);
if (response.code() != 401 || user == null) {
return response;
}
String authValue;
String authHeader = response.header(HttpHeaders.WWW_AUTHENTICATE);
if (authHeader != null && authHeader.startsWith("Digest")) {
authValue = Util.digest(authHeader, request);
} else {
authValue = Util.basic(user);
}
response.close();
authCache.put(host, authValue);
return chain.proceed(request.newBuilder().header(HttpHeaders.AUTHORIZATION, authValue).build());
private Request check(Request request) {
URI uri = request.url().uri();
if (uri.getUserInfo() == null) return request;
userMap.put(request.url().host(), uri.getUserInfo());
return request.newBuilder().header(HttpHeaders.AUTHORIZATION, Util.basic(uri.getUserInfo())).build();
}
}

@ -126,9 +126,8 @@ public class Util {
}
}
public static String digest(String authHeader, Request request) {
Map<String, String> params = parse(authHeader.substring(7));
String userInfo = request.url().uri().getUserInfo();
public static String digest(String userInfo, String header, Request request) {
Map<String, String> params = parse(header.substring(7));
String[] parts = userInfo.split(":", 2);
String nc = "00000001";
String username = parts[0];

Loading…
Cancel
Save