yijianlianUI/app/src/main/java/com/yingmao/clash/base/PublicViewMode.kt

168 lines
6.4 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.yingmao.clash.base
import android.text.TextUtils
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.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://yingmao.oss-cn-hongkong.aliyuncs.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try { //TODO bug 会引起崩溃
var host = if (BuildConfig.is_ym) {
rt.getHost()
} else if (BuildConfig.is_tz) {
rt.getHostTZ()
} else {
rt.getHostDef()
}
// Log.e("data", "2:$host")
if (!TextUtils.isEmpty(host)) {
host = AESUtil.decrypt(host)
val hostSet = host.split("+").toSet()
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostSet)
}
// 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.getHostGithub()
}
BuildConfig.is_tz -> {
rt.getHostTZ()
}
else -> {
rt.getHostDef()
}
}
host?.takeIf { it.isNotEmpty() }?.let {
com.cncat.vpn.common.log.Log.d("getHostByGithub host-->${it}")
val decryptedHost = AESUtil.decrypt(it)
com.cncat.vpn.common.log.Log.d("getHostByGithub decryptedHost-->${decryptedHost}")
val hostSet = decryptedHost.split("+").toSet()
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostSet)
}
callback.suc()
} catch (e: Exception) {
e.printStackTrace()
callback.err()
}
}
}
fun getHostByAWS(callback: AsyncCallback) {
val rt = NetService.instances.createFreeBaseUrl("https://yingmao2.s3.ap-east-1.amazonaws.com/")
doAsyncNoNeedReturn(HttpReqType.GET_HOST) {
try {
val host = when {
BuildConfig.is_ym -> {
rt.getHostAWS()
}
BuildConfig.is_tz -> {
rt.getHostTZ()
}
else -> {
rt.getHostDef()
}
}
host?.takeIf { it.isNotEmpty() }?.let {
com.cncat.vpn.common.log.Log.d("getHostByAWS host-->${it}")
val decryptedHost = AESUtil.decrypt(it)
com.cncat.vpn.common.log.Log.d("getHostByAWS decryptedHost-->${decryptedHost}")
val hostSet = decryptedHost.split("+").toSet()
MMKV.defaultMMKV().encode(BZYConstants.MMKV_KEY_ROUTER_HOST, hostSet)
}
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>()
// proxyPattern0全局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")
// }
// }
}
}
}