正在查看: Glean v1.1.34 应用的 OkHttpFileUrlInterceptor.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Glean v1.1.34 应用的 OkHttpFileUrlInterceptor.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package expo.modules.fetch;
import android.content.Context;
import com.google.mlkit.common.MlKitException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.net.URL;
import java.net.URLConnection;
import kotlin.Metadata;
import kotlin.jvm.internal.DefaultConstructorMarker;
import kotlin.jvm.internal.Intrinsics;
import kotlin.text.StringsKt;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import okio.BufferedSource;
import okio.Okio;
@Metadata(d1 = {"\u0000F\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000e\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0000\u0018\u0000 \u00162\u00020\u0001:\u0001\u0016B\r\u0012\u0006\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004J\u0016\u0010\u0006\u001a\u00020\u00072\u0006\u0010\u0002\u001a\u00020\u00032\u0006\u0010\b\u001a\u00020\tJ\u0010\u0010\n\u001a\u00020\u000b2\u0006\u0010\f\u001a\u00020\rH\u0002J\u0010\u0010\u000e\u001a\u00020\u000f2\u0006\u0010\b\u001a\u00020\tH\u0002J\u0010\u0010\u0010\u001a\u00020\u000b2\u0006\u0010\u0011\u001a\u00020\u0012H\u0016J\u0010\u0010\u0013\u001a\u00020\t2\u0006\u0010\u0014\u001a\u00020\u0015H\u0002R\u0014\u0010\u0002\u001a\b\u0012\u0004\u0012\u00020\u00030\u0005X\u0082\u0004¢\u0006\u0002\n\u0000¨\u0006\u0017"}, d2 = {"Lexpo/modules/fetch/OkHttpFileUrlInterceptor;", "Lokhttp3/Interceptor;", "context", "Landroid/content/Context;", "(Landroid/content/Context;)V", "Ljava/lang/ref/WeakReference;", "createAssetResponseBody", "Lokhttp3/ResponseBody;", "fileName", "", "createFileNotFoundResponse", "Lokhttp3/Response;", "request", "Lokhttp3/Request;", "createMediaType", "Lokhttp3/MediaType;", "intercept", "chain", "Lokhttp3/Interceptor$Chain;", "restoreFileUrl", "url", "Lokhttp3/HttpUrl;", "Companion", "expo_release"}, k = 1, mv = {1, 9, 0}, xi = 48)
public final class OkHttpFileUrlInterceptor implements Interceptor {
public static final Companion INSTANCE = new Companion(null);
private final WeakReference<Context> context;
public OkHttpFileUrlInterceptor(Context context) {
Intrinsics.checkNotNullParameter(context, "context");
this.context = new WeakReference<>(context);
}
public Response intercept(Interceptor.Chain chain) {
Intrinsics.checkNotNullParameter(chain, "chain");
Request request = chain.request();
String restoreFileUrl = restoreFileUrl(request.url());
if (!StringsKt.startsWith$default(restoreFileUrl, "file://", false, 2, (Object) null)) {
return chain.proceed(request);
}
if (StringsKt.startsWith$default(restoreFileUrl, "file:///android_asset/", false, 2, (Object) null)) {
String removePrefix = StringsKt.removePrefix(restoreFileUrl, "file:///android_asset/");
Context context = this.context.get();
if (context == null) {
throw new FetchAndroidContextLostException();
}
try {
return new Response.Builder().request(request).protocol(Protocol.HTTP_1_1).code(MlKitException.CODE_SCANNER_UNAVAILABLE).message("OK").body(createAssetResponseBody(context, removePrefix)).build();
} catch (IOException unused) {
return createFileNotFoundResponse(request);
}
}
String substring = restoreFileUrl.substring(7);
Intrinsics.checkNotNullExpressionValue(substring, "substring(...)");
File file = new File(substring);
if (!file.exists()) {
return createFileNotFoundResponse(request);
}
ResponseBody.Companion companion = ResponseBody.Companion;
BufferedSource buffer = Okio.buffer(Okio.source(file));
String name = file.getName();
Intrinsics.checkNotNullExpressionValue(name, "getName(...)");
return new Response.Builder().request(request).protocol(Protocol.HTTP_1_1).code(MlKitException.CODE_SCANNER_UNAVAILABLE).message("OK").body(companion.create(buffer, createMediaType(name), file.length())).build();
}
private final String restoreFileUrl(HttpUrl url) {
return StringsKt.replaceFirst$default(url.toString(), "http://filesystem.local", "file://", false, 4, (Object) null);
}
private final Response createFileNotFoundResponse(Request request) {
return new Response.Builder().request(request).protocol(Protocol.HTTP_1_1).code(404).message("File not found").body(ResponseBody.Companion.create("File not found", MediaType.Companion.get("text/plain"))).build();
}
private final MediaType createMediaType(String fileName) {
String guessContentTypeFromName = URLConnection.guessContentTypeFromName(fileName);
if (guessContentTypeFromName == null) {
guessContentTypeFromName = "application/octet-stream";
}
MediaType parse = MediaType.Companion.parse(guessContentTypeFromName);
return parse == null ? MediaType.Companion.get("application/octet-stream") : parse;
}
public final ResponseBody createAssetResponseBody(Context context, String fileName) throws IOException {
Intrinsics.checkNotNullParameter(context, "context");
Intrinsics.checkNotNullParameter(fileName, "fileName");
InputStream open = context.getAssets().open(fileName);
Intrinsics.checkNotNullExpressionValue(open, "open(...)");
return ResponseBody.Companion.create$default(ResponseBody.Companion, Okio.buffer(Okio.source(open)), createMediaType(fileName), 0L, 2, (Object) null);
}
@Metadata(d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0086\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u000e\u0010\u0003\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u0004¨\u0006\u0006"}, d2 = {"Lexpo/modules/fetch/OkHttpFileUrlInterceptor$Companion;", "", "()V", "handleFileUrl", "Ljava/net/URL;", "url", "expo_release"}, k = 1, mv = {1, 9, 0}, xi = 48)
public static final class Companion {
public Companion(DefaultConstructorMarker defaultConstructorMarker) {
this();
}
private Companion() {
}
public final URL handleFileUrl(URL url) {
Intrinsics.checkNotNullParameter(url, "url");
if (!Intrinsics.areEqual(url.getProtocol(), "file")) {
return url;
}
return new URL("http://filesystem.local" + url.getPath());
}
}
}