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() // 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") // } // } } } }