Fix bug and clean code

pull/585/head
FongMi 1 year ago
parent e193fafcf3
commit d2e422444f
  1. 46
      app/src/main/java/com/fongmi/android/tv/api/Decoder.java
  2. 13
      app/src/main/java/com/fongmi/android/tv/api/LiveParser.java
  3. 15
      app/src/main/java/com/fongmi/android/tv/api/config/LiveConfig.java
  4. 15
      app/src/main/java/com/fongmi/android/tv/api/config/VodConfig.java
  5. 3
      app/src/main/java/com/fongmi/android/tv/api/loader/JarLoader.java
  6. 8
      catvod/src/main/java/com/github/catvod/utils/Path.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("#$")));

@ -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<String, String> 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 {

@ -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();

@ -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();

@ -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")) {

@ -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()];

Loading…
Cancel
Save