修正了几个订阅解析错误

- 修复了Quantmult格式VMess的obfs-path和obfs-header解析错误的问题。
- 修复了SSR URI格式protoparams和obfsparams解析错误的问题
This commit is contained in:
Peng-YM 2020-12-01 14:55:35 +08:00
parent 8195fb8235
commit f54b87dff3
2 changed files with 17 additions and 12 deletions

View File

@ -833,21 +833,21 @@ var ProxyUtils = (function () {
supported, supported,
}; };
// get other params // get other params
params = {}; const other_params = {};
line = line.split("/?")[1].split("&"); line = line.split("/?")[1].split("&");
if (line.length > 1) { if (line.length > 1) {
for (const item of line) { for (const item of line) {
const [key, val] = item.split("="); const [key, val] = item.split("=");
params[key] = val; other_params[key] = val.trim();
} }
} }
proxy = { proxy = {
...proxy, ...proxy,
name: Base64.safeDecode(params.remarks), name: other_params.remarks ? Base64.safeDecode(other_params.remarks) : proxy.server,
"protocol-param": "protocol-param":
Base64.safeDecode(params.protoparam).replace(/\s/g, "") || "", Base64.safeDecode(other_params.protoparam || "").replace(/\s/g, ""),
"obfs-param": "obfs-param":
Base64.safeDecode(params.obfsparam).replace(/\s/g, "") || "", Base64.safeDecode(other_params.obfsparam || "").replace(/\s/g, ""),
}; };
return proxy; return proxy;
}; };
@ -869,8 +869,8 @@ var ProxyUtils = (function () {
line = line.split("vmess://")[1]; line = line.split("vmess://")[1];
const content = Base64.safeDecode(line); const content = Base64.safeDecode(line);
if (/=\s*vmess/.test(content)) { if (/=\s*vmess/.test(content)) {
const partitions = content.split(",").map((p) => p.trim());
// Quantumult VMess URI format // Quantumult VMess URI format
const partitions = content.split(",").map((p) => p.trim());
// get keyword params // get keyword params
const params = {}; const params = {};
for (const part of partitions) { for (const part of partitions) {
@ -888,16 +888,21 @@ var ProxyUtils = (function () {
cipher: partitions[3], cipher: partitions[3],
uuid: partitions[4].match(/^"(.*)"$/)[1], uuid: partitions[4].match(/^"(.*)"$/)[1],
tls: params.obfs === "over-tls" || params.obfs === "wss", tls: params.obfs === "over-tls" || params.obfs === "wss",
udp: JSON.parse(params["udp-relay"] || "false"),
tfo: JSON.parse(params["fast-open"] || "false"),
}; };
if (typeof params['udp-relay'] !== "undefined") proxy.udp = JSON.parse(params["udp-relay"]);
if (typeof params['fast-open'] !== "undefined") proxy.udp = JSON.parse(params["fast-open"]);
// handle ws headers // handle ws headers
if (params.obfs === "ws" || params.obfs === "wss") { if (params.obfs === "ws" || params.obfs === "wss") {
proxy.network = "ws"; proxy.network = "ws";
proxy["ws-path"] = params["obfs-uri"]; proxy["ws-path"] = (params["obfs-path"] || '"/"').match(/^"(.*)"$/)[1];
let obfs_host = params["obfs-header"];
if (obfs_host && obfs_host.indexOf("Host") !== -1) {
obfs_host = obfs_host.match(/Host:\s*([a-zA-Z0-9-.]*)/)[1];
}
proxy["ws-headers"] = { proxy["ws-headers"] = {
Host: params["obfs-host"] || proxy.server, // if no host provided, use the same as server Host: obfs_host || proxy.server, // if no host provided, use the same as server
}; };
} }

File diff suppressed because one or more lines are too long