修复未知格式时错误重复最后一个节点的 bug,以及支持部分 https 格式的URI

This commit is contained in:
Shawn
2020-06-01 10:49:08 +08:00
parent ed7f61c65e
commit 4f21fd891f

View File

@@ -1,11 +1,11 @@
/** /**
# Quantumult X 资源解析器 (2020-05-31: 12:59 ) # Quantumult X 资源解析器 (2020-06-01: 10:59 )
解析器作者: Shawn(请勿私聊问怎么用) 解析器作者: Shawn(请勿私聊问怎么用)
有bug请反馈: @Shawn_KOP_bot 有bug请反馈: @Shawn_KOP_bot
更新请关注tg频道: https://t.me/QuanX_API 更新请关注tg频道: https://t.me/QuanX_API
主要功能: 将各类服务器订阅解析成 QuantumultX 格式引用(支持 V2RayN/SSR/SS/Trojan/QuanX(conf&list)/Surge(conf&list)格式),并提供 1⃣ 中的可选参数; 主要功能: 将各类服务器订阅解析成 QuantumultX 格式引用(支持 V2RayN/SSR/SS/Trojan/QuanX(conf&list)/Surge(conf&list)/https(仅部分格式) 订阅),并提供 1⃣ 中的可选参数;
附加功能: rewrite(重写) /filter(分流) 过滤, 可用于解决无法单独禁用远程引用中某(几)条 rewrite/hostname/filter, 以及直接导入 Surge 类型规则 list 的问题 附加功能: rewrite(重写) /filter(分流) 过滤, 可用于解决无法单独禁用远程引用中某(几)条 rewrite/hostname/filter, 以及直接导入 Surge 类型规则 list 的问题
@@ -397,14 +397,16 @@ function SubsEd2QX(subs,Pudp,Ptfo,Pcert,Ptls13){
var QuanXK=["shadowsocks=","trojan=","vmess=","http="]; var QuanXK=["shadowsocks=","trojan=","vmess=","http="];
var SurgeK=["=ss","=vmess","=trojan","=http","=custom"]; var SurgeK=["=ss","=vmess","=trojan","=http","=custom"];
var QXlist=[]; var QXlist=[];
var node=""
for(i=0;i<list0.length;i++){ for(i=0;i<list0.length;i++){
var node=""
if(list0[i].trim().length>3){ if(list0[i].trim().length>3){
var type=list0[i].split("://")[0].trim() var type=list0[i].split("://")[0].trim()
//$notify(type)
var listi=list0[i].replace(/ /g,"") var listi=list0[i].replace(/ /g,"")
const QuanXCheck = (item) => listi.toLowerCase().indexOf(item)!=-1; const QuanXCheck = (item) => listi.toLowerCase().indexOf(item)!=-1;
const SurgeCheck = (item) => listi.toLowerCase().indexOf(item)!=-1; const SurgeCheck = (item) => listi.toLowerCase().indexOf(item)!=-1;
if(type=="vmess"){ if(type=="vmess"){
node= V2QX(list0[i],Pudp,Ptfo,Pcert,Ptls13) node= V2QX(list0[i],Pudp,Ptfo,Pcert,Ptls13)
}else if(type=="ssr"){ }else if(type=="ssr"){
node= SSR2QX(list0[i],Pudp,Ptfo) node= SSR2QX(list0[i],Pudp,Ptfo)
@@ -412,6 +414,8 @@ function SubsEd2QX(subs,Pudp,Ptfo,Pcert,Ptls13){
node = SS2QX(list0[i],Pudp,Ptfo) node = SS2QX(list0[i],Pudp,Ptfo)
}else if(type=="trojan"){ }else if(type=="trojan"){
node = TJ2QX(list0[i],Pudp,Ptfo,Pcert,Ptls13) node = TJ2QX(list0[i],Pudp,Ptfo,Pcert,Ptls13)
}else if(type="https"){ //subs,Ptfo,Pcert,Ptls13
node = HPS2QX(list0[i],Ptfo,Pcert,Ptls13)
}else if(QuanXK.some(QuanXCheck)){ }else if(QuanXK.some(QuanXCheck)){
node = list0[i] node = list0[i]
}else if(SurgeK.some(SurgeCheck)){ }else if(SurgeK.some(SurgeCheck)){
@@ -431,8 +435,8 @@ function Subs2QX(subs,Pudp,Ptfo,Pcert,Ptls13){
var QuanXK=["shadowsocks=","trojan=","vmess=","http="]; var QuanXK=["shadowsocks=","trojan=","vmess=","http="];
var SurgeK=["=ss","=vmess","=trojan","=http"]; var SurgeK=["=ss","=vmess","=trojan","=http"];
var QXlist=[]; var QXlist=[];
var node=""
for(i=0;i<list0.length;i++){ for(i=0;i<list0.length;i++){
var node=""
if(list0[i].trim().length>3){ if(list0[i].trim().length>3){
var type=list0[i].split("://")[0].trim() var type=list0[i].split("://")[0].trim()
var listi=list0[i].replace(/ /g,"") var listi=list0[i].replace(/ /g,"")
@@ -446,6 +450,8 @@ function Subs2QX(subs,Pudp,Ptfo,Pcert,Ptls13){
node = SS2QX(list0[i],Pudp,Ptfo) node = SS2QX(list0[i],Pudp,Ptfo)
}else if(type=="trojan"){ }else if(type=="trojan"){
node = TJ2QX(list0[i],Pudp,Ptfo,Pcert,Ptls13) node = TJ2QX(list0[i],Pudp,Ptfo,Pcert,Ptls13)
}else if(type="https"){
node = HPS2QX(list0[i],Ptfo,Pcert,Ptls13)
}else if(QuanXK.some(QuanXCheck)){ }else if(QuanXK.some(QuanXCheck)){
node = list0[i] node = list0[i]
}else if(SurgeK.some(SurgeCheck)){ }else if(SurgeK.some(SurgeCheck)){
@@ -488,7 +494,27 @@ function TagCheck_QX(content){
} }
return Nlist return Nlist
} }
//http=example.com:443, username=name, password=pwd, over-tls=true, tls-host=example.com, tls-verification=true, tls13=true, fast-open=false, udp-relay=false, tag=http-tls-02
//HTTPS 类型 URI 转换成 QUANX 格式
function HPS2QX(subs,Ptfo,Pcert,Ptls13){
var server=Base64.decode(subs.replace("https://","")).trim().split("\u0000")[0];
var nss=[]
if(server!=""){
var ipport="http="+server.split("@")[1].split("#")[0].split("/")[0];
var uname="username="+server.split(":")[0];
var pwd="password="+server.split("@")[0].split(":")[1];
var tag="tag="+server.split("#")[1];
var tls="over-tls=true";
var cert=Pcert!=0? "tls-verification=true":"tls-verification=false";
var tfo=Ptfo==1? "fast-open=true":"fast-open=false";
var tls13=Ptls13==1? "tls13=true":"tls13=false";
nss.push(ipport,uname,pwd,tls,cert,tfo,tls13,tag)
}
var QX=nss.join(",");
return QX
//$notify("ts","content",QX)
}
//V2RayN uri转换成 QUANX 格式 //V2RayN uri转换成 QUANX 格式
function V2QX(subs,Pudp,Ptfo,Pcert,Ptls13){ function V2QX(subs,Pudp,Ptfo,Pcert,Ptls13){