From d2e422444fa9319e51c0387e6aeee4e3d90edc3e Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 1 Feb 2025 18:25:38 +0800 Subject: [PATCH] Fix bug and clean code --- .../com/fongmi/android/tv/api/Decoder.java | 46 +++---------------- .../com/fongmi/android/tv/api/LiveParser.java | 13 +----- .../android/tv/api/config/LiveConfig.java | 15 +----- .../android/tv/api/config/VodConfig.java | 15 +----- .../android/tv/api/loader/JarLoader.java | 3 -- .../java/com/github/catvod/utils/Path.java | 8 ---- 6 files changed, 12 insertions(+), 88 deletions(-) diff --git a/app/src/main/java/com/fongmi/android/tv/api/Decoder.java b/app/src/main/java/com/fongmi/android/tv/api/Decoder.java index c52c9ac85..cc7d493b2 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/Decoder.java +++ b/app/src/main/java/com/fongmi/android/tv/api/Decoder.java @@ -4,12 +4,9 @@ import android.util.Base64; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.net.OkHttp; -import com.github.catvod.utils.Asset; import com.github.catvod.utils.Json; -import com.github.catvod.utils.Path; import com.github.catvod.utils.Util; -import java.io.File; import java.nio.charset.StandardCharsets; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -18,19 +15,22 @@ import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; +import okhttp3.Response; + public class Decoder { private static final Pattern JS_URI = Pattern.compile("\"(\\.|\\.\\.)/(.?|.+?)\\.js\\?(.?|.+?)\""); public static String getJson(String url) throws Exception { - String key = url.contains(";") ? url.split(";")[2] : ""; - url = url.contains(";") ? url.split(";")[0] : url; - String data = getData(url); + Response res = OkHttp.newCall(UrlUtil.convert(url)).execute(); + return verify(res.request().url().toString(), res.body().string()); + } + + private static String verify(String url, String data) throws Exception { if (data.isEmpty()) throw new Exception(); if (Json.valid(data)) return fix(url, data); if (data.contains("**")) data = base64(data); if (data.startsWith("2423")) data = cbc(data); - if (key.length() > 0) data = ecb(data, key); return fix(url, data); } @@ -52,38 +52,6 @@ public class Decoder { return data.replace(ext, t); } - public static String getExt(String ext) { - try { - return base64(getData(ext.substring(4))); - } catch (Exception ignored) { - return ""; - } - } - - public static File getSpider(String url) { - try { - File file = Path.jar(url); - String data = extract(getData(url.substring(4))); - return data.isEmpty() ? file : Path.write(file, Base64.decode(data, Base64.DEFAULT)); - } catch (Exception ignored) { - return Path.jar(url); - } - } - - private static String getData(String url) { - if (url.startsWith("file")) return Path.read(url); - if (url.startsWith("assets")) return Asset.read(url); - if (url.startsWith("http")) return OkHttp.string(url); - return ""; - } - - private static String ecb(String data, String key) throws Exception { - SecretKeySpec spec = new SecretKeySpec(padEnd(key).getBytes(), "AES"); - Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - cipher.init(Cipher.DECRYPT_MODE, spec); - return new String(cipher.doFinal(Util.hex2byte(data)), StandardCharsets.UTF_8); - } - private static String cbc(String data) throws Exception { String decode = new String(Util.hex2byte(data)).toLowerCase(); String key = padEnd(decode.substring(decode.indexOf("$#") + 2, decode.indexOf("#$"))); diff --git a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java index 870653051..6ef518617 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java +++ b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java @@ -1,7 +1,5 @@ package com.fongmi.android.tv.api; -import android.util.Base64; - import androidx.media3.common.MimeTypes; import com.fongmi.android.tv.bean.Catchup; @@ -16,7 +14,6 @@ import com.fongmi.android.tv.bean.XStream; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.net.OkHttp; import com.github.catvod.utils.Json; -import com.github.catvod.utils.Path; import java.util.Arrays; import java.util.HashMap; @@ -163,15 +160,7 @@ public class LiveParser { private static String getText(Live live) { if (live.isXtream() && !XtreamParser.isGetUrl(live.getUrl())) return ""; - return getText(live.getUrl(), live.getHeaders()); - } - - private static String getText(String url, Map header) { - if (url.startsWith("file")) return Path.read(url); - if (url.startsWith("http")) return OkHttp.string(url, header); - if (url.startsWith("assets") || url.startsWith("proxy")) return getText(UrlUtil.convert(url), header); - if (!url.isEmpty() && url.length() % 4 == 0) return getText(new String(Base64.decode(url, Base64.DEFAULT)), header); - return ""; + return OkHttp.string(UrlUtil.convert(live.getUrl()), live.getHeaders()); } private static class Setting { diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java index 6c624be5a..60157b119 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java @@ -184,8 +184,8 @@ public class LiveConfig { for (JsonElement element : Json.safeListElement(object, "lives")) { Live live = Live.objectFrom(element); if (lives.contains(live)) continue; - live.setApi(parseApi(live.getApi())); - live.setExt(parseExt(live.getExt())); + live.setApi(UrlUtil.convert(live.getApi())); + live.setExt(UrlUtil.convert(live.getExt())); live.setJar(parseJar(live, spider)); lives.add(live.check().sync()); } @@ -202,17 +202,6 @@ public class LiveConfig { setAds(Json.safeListString(object, "ads")); } - private String parseApi(String api) { - if (api.startsWith("file") || api.startsWith("assets")) return UrlUtil.convert(api); - return api; - } - - private String parseExt(String ext) { - if (ext.startsWith("file") || ext.startsWith("assets")) return UrlUtil.convert(ext); - if (ext.startsWith("img+")) return Decoder.getExt(ext); - return ext; - } - private String parseJar(Live live, String spider) { if (live.getJar().isEmpty() && live.getApi().startsWith("csp_")) return spider; return live.getJar(); diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java index d7ccc6b81..f966468c3 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java @@ -170,8 +170,8 @@ public class VodConfig { for (JsonElement element : Json.safeListElement(object, "sites")) { Site site = Site.objectFrom(element); if (sites.contains(site)) continue; - site.setApi(parseApi(site.getApi())); - site.setExt(parseExt(site.getExt())); + site.setApi(UrlUtil.convert(site.getApi())); + site.setExt(UrlUtil.convert(site.getExt())); site.setJar(parseJar(site, spider)); sites.add(site.trans().sync()); } @@ -207,17 +207,6 @@ public class VodConfig { setAds(Json.safeListString(object, "ads")); } - private String parseApi(String api) { - if (api.startsWith("file") || api.startsWith("assets")) return UrlUtil.convert(api); - return api; - } - - private String parseExt(String ext) { - if (ext.startsWith("file") || ext.startsWith("assets")) return UrlUtil.convert(ext); - if (ext.startsWith("img+")) return Decoder.getExt(ext); - return ext; - } - private String parseJar(Site site, String spider) { if (site.getJar().isEmpty() && site.getApi().startsWith("csp_")) return spider; return site.getJar(); diff --git a/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java b/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java index dcfb665ac..0672dacfb 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java +++ b/app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java @@ -3,7 +3,6 @@ package com.fongmi.android.tv.api.loader; import android.content.Context; import com.fongmi.android.tv.App; -import com.fongmi.android.tv.api.Decoder; import com.fongmi.android.tv.utils.UrlUtil; import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.SpiderNull; @@ -93,8 +92,6 @@ public class JarLoader { jar = texts[0]; if (!md5.isEmpty() && Util.equals(jar, md5)) { load(key, Path.jar(jar)); - } else if (jar.startsWith("img+")) { - load(key, Decoder.getSpider(jar)); } else if (jar.startsWith("http")) { load(key, download(jar)); } else if (jar.startsWith("file")) { diff --git a/catvod/src/main/java/com/github/catvod/utils/Path.java b/catvod/src/main/java/com/github/catvod/utils/Path.java index ca3fbf464..4c921a149 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Path.java +++ b/catvod/src/main/java/com/github/catvod/utils/Path.java @@ -134,14 +134,6 @@ public class Path { } } - public static String read(String path) { - try { - return read(new FileInputStream(local(path))); - } catch (Exception e) { - return ""; - } - } - public static String read(InputStream is) { try { byte[] data = new byte[is.available()];