318 lines
12 KiB
Kotlin
318 lines
12 KiB
Kotlin
package com.yingmao.clash.base
|
||
|
||
|
||
import android.text.TextUtils
|
||
import com.cncat.vpn.common.log.Log
|
||
import com.yingmao.clash.net.http.HttpApi
|
||
import com.yingmao.clash.net.http.NetService
|
||
import com.orhanobut.logger.Logger
|
||
import com.tencent.mmkv.MMKV
|
||
import com.yingmao.clash.BuildConfig
|
||
import com.yingmao.clash.conf.BZYConstants
|
||
import com.yingmao.clash.entity.DomainRsp
|
||
import com.yingmao.clash.listener.AsyncBodyCallback
|
||
import com.yingmao.clash.listener.AsyncCallback
|
||
import com.yingmao.clash.net.http.HttpReqType
|
||
import com.yingmao.clash.util.AESUtil
|
||
import kotlinx.coroutines.GlobalScope
|
||
import kotlinx.coroutines.launch
|
||
import java.util.ArrayList
|
||
|
||
open class PublicViewMode : BaseViewMode() {
|
||
// fun hasLocalAcl() :Boolean{
|
||
// val acls = Acl.getFile(Acl.CUSTOM_RULES).readLines()
|
||
// Logger.d("sss ====> "+acls+"size:${acls.size}")
|
||
// //默认的acl有3个 小于3个表示需要从服务器获取acl
|
||
// return acls.size > 3
|
||
// }
|
||
|
||
fun getHost(callback: AsyncCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://pubtofile.oss-cn-hongkong.aliyuncs.com/app_host/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try { //TODO bug 会引起崩溃
|
||
val host = when {
|
||
BuildConfig.is_ym -> {
|
||
rt.getHost()
|
||
}
|
||
|
||
BuildConfig.is_tz -> {
|
||
rt.getTzHostGithub()
|
||
}
|
||
|
||
BuildConfig.is_yunti -> {
|
||
rt.getYunTiHost()
|
||
}
|
||
|
||
else -> {
|
||
rt.getBzyHostGithub()
|
||
}
|
||
}
|
||
// Log.e("data", "2:$host")
|
||
host?.takeIf { it.isNotEmpty() }?.let {
|
||
val decryptedHost = AESUtil.decrypt(it)
|
||
val hostList = decryptedHost.split("+")
|
||
if (hostList.isNotEmpty()) {
|
||
//第一个为推荐域名
|
||
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_FIRST_HOST, hostList[0])
|
||
MMKV.defaultMMKV()
|
||
.encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostList.toSet())
|
||
}
|
||
}
|
||
// Log.e("data", "22:$host")
|
||
|
||
callback.suc()
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
fun getHostByGithub(callback: AsyncCallback) {
|
||
val rt = NetService.instances.createFreeBaseUrl("https://raw.githubusercontent.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try {
|
||
val host = when {
|
||
BuildConfig.is_ym -> {
|
||
rt.getHostGithubjl()
|
||
}
|
||
|
||
BuildConfig.is_tz -> {
|
||
rt.getTzHostGithub()
|
||
}
|
||
|
||
BuildConfig.is_yunti -> {
|
||
rt.getYunTiHostGithub()
|
||
}
|
||
|
||
else -> {
|
||
rt.getBzyHostGithub()
|
||
}
|
||
}
|
||
host?.takeIf { it.isNotEmpty() }?.let {
|
||
val decryptedHost = AESUtil.decrypt(it)
|
||
val hostList = decryptedHost.split("+")
|
||
if (hostList.isNotEmpty()) {
|
||
//第一个为推荐域名
|
||
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_FIRST_HOST, hostList[0])
|
||
|
||
MMKV.defaultMMKV()
|
||
.encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostList.toSet())
|
||
}
|
||
}
|
||
callback.suc()
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
fun getHostByAWS(callback: AsyncCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://wfjsq.s3.ap-east-1.amazonaws.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try {
|
||
val host = when {
|
||
BuildConfig.is_ym -> {
|
||
rt.getHostAWS()
|
||
}
|
||
|
||
BuildConfig.is_tz -> {
|
||
rt.getTzHostAWS()
|
||
}
|
||
else -> {
|
||
rt.getBzyHostAWS()
|
||
}
|
||
}
|
||
host?.takeIf { it.isNotEmpty() }?.let {
|
||
val decryptedHost = AESUtil.decrypt(it)
|
||
val hostList = decryptedHost.split("+")
|
||
if (hostList.isNotEmpty()) {
|
||
//第一个为推荐域名
|
||
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_FIRST_HOST, hostList[0])
|
||
MMKV.defaultMMKV()
|
||
.encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostList.toSet())
|
||
}
|
||
}
|
||
callback.suc()
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
fun getServiceAclAndSet() {
|
||
val httpApi = NetService.instances.createHttpsEncodeStr(HttpApi::class.java)
|
||
GlobalScope.launch {
|
||
val rsp = doAsyncEncodeStrBg(DomainRsp::class.java) { httpApi.getDomain() }
|
||
Logger.d("~~~~~! ${rsp}")
|
||
val acls = ArrayList<String>()
|
||
// proxyPattern:0:全局,1:代理
|
||
(rsp as DomainRsp).let {
|
||
if (it.data?.proxyPattern == 0) {
|
||
acls.add("[proxy_all]")
|
||
acls.add("[bypass_list]")
|
||
} else {
|
||
acls.add("[bypass_all]")
|
||
acls.add("[proxy_list]")
|
||
}
|
||
|
||
it.data?.domain?.let { domains ->
|
||
domains.forEach { domain ->
|
||
var domainFormat = domain
|
||
// domainFormat =domainFormat.replace(".","\\.")
|
||
Logger.d("domainFormat : $domainFormat")
|
||
if (domainFormat.startsWith("https://www.", true)) {
|
||
domainFormat = domainFormat.replaceFirst("https://www.", "")
|
||
Logger.d("domainFormat 1 : $domainFormat")
|
||
} else {
|
||
// domainFormat = "(^|\\.)${domainFormat}"
|
||
Logger.d("domainFormat 2 : $domainFormat")
|
||
}
|
||
if (domainFormat.endsWith("/")) {
|
||
domainFormat = domainFormat.substring(0, domainFormat.lastIndex)
|
||
Logger.d("domainFormat 3 : $domainFormat")
|
||
}
|
||
// domainFormat = "${domainFormat}$"
|
||
Logger.d("domainFormat 11 : $domainFormat")
|
||
acls.add(domainFormat)
|
||
//youtobe 播放视频需要添加的域名
|
||
// acls.add("youtu.be")
|
||
// acls.add("youtube.com")
|
||
// acls.add("ytimg.com")
|
||
// acls.add("googlevideo.com")
|
||
|
||
}
|
||
}
|
||
}
|
||
// Acl.getFile(Acl.CUSTOM_RULES).printWriter().use {
|
||
// val printWriter = it
|
||
// acls.forEach {
|
||
// printWriter.write(it)
|
||
// printWriter.write("\n")
|
||
// }
|
||
// }
|
||
}
|
||
}
|
||
|
||
fun getYmKefuHost(callback: AsyncBodyCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://pubtofile.oss-cn-hongkong.aliyuncs.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try { //TODO bug 会引起崩溃
|
||
var host = rt.getYingMaoKefuHost()
|
||
callback.suc(host)
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
fun getTzKefuHost(callback: AsyncBodyCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try { //TODO bug 会引起崩溃
|
||
var host = rt.getTaiZiKefuHost()
|
||
callback.suc(host)
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
fun getBzyKefuHost(callback: AsyncBodyCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try { //TODO bug 会引起崩溃
|
||
var host = rt.getBzyKefuHost()
|
||
callback.suc(host)
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
fun getYunTiKefuHost(callback: AsyncBodyCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try { //TODO bug 会引起崩溃
|
||
var host = rt.getYunTiKefuHost()
|
||
callback.suc(host)
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
fun getRegisterHost(callback: AsyncBodyCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try { //TODO bug 会引起崩溃
|
||
var host = rt.getYmRegister()
|
||
callback.suc(host)
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
fun getTzRegisterHost(pId: String, callback: AsyncBodyCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try { //TODO bug 会引起崩溃
|
||
var host = ""
|
||
if (pId == "182269") {
|
||
host = rt.getTz182269Register()
|
||
} else {
|
||
host = rt.getTzRegister()
|
||
}
|
||
callback.suc(host)
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
fun getBzyRegisterHost(callback: AsyncBodyCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try { //TODO bug 会引起崩溃
|
||
var host = rt.getBzyRegister()
|
||
callback.suc(host)
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
|
||
fun getYunTiRegisterHost(callback: AsyncBodyCallback) {
|
||
val rt =
|
||
NetService.instances.createFreeBaseUrl("https://yingmao.oss-cn-hongkong.aliyuncs.com/")
|
||
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
|
||
try { //TODO bug 会引起崩溃
|
||
var host = rt.getYuntiRegister()
|
||
callback.suc(host)
|
||
} catch (e: Exception) {
|
||
e.printStackTrace()
|
||
callback.err()
|
||
}
|
||
}
|
||
}
|
||
} |