feat: Loon 正式支持 Shadow-TLS

This commit is contained in:
xream 2025-02-03 13:47:17 +08:00
parent 2a76eb6462
commit 74ec133a79
No known key found for this signature in database
GPG Key ID: 1D2C5225471789F9
2 changed files with 4 additions and 22 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "sub-store", "name": "sub-store",
"version": "2.16.24", "version": "2.16.25",
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
"main": "src/main.js", "main": "src/main.js",
"scripts": { "scripts": {

View File

@ -15,9 +15,9 @@ export default function Loon_Producer() {
const produce = (proxy, type, opts = {}) => { const produce = (proxy, type, opts = {}) => {
switch (proxy.type) { switch (proxy.type) {
case 'ss': case 'ss':
return shadowsocks(proxy, opts['include-unsupported-proxy']); return shadowsocks(proxy);
case 'ssr': case 'ssr':
return shadowsocksr(proxy, opts['include-unsupported-proxy']); return shadowsocksr(proxy);
case 'trojan': case 'trojan':
return trojan(proxy); return trojan(proxy);
case 'vmess': case 'vmess':
@ -40,7 +40,7 @@ export default function Loon_Producer() {
return { produce }; return { produce };
} }
function shadowsocks(proxy, includeUnsupportedProxy) { function shadowsocks(proxy) {
const result = new Result(proxy); const result = new Result(proxy);
if ( if (
![ ![
@ -74,8 +74,6 @@ function shadowsocks(proxy, includeUnsupportedProxy) {
`${proxy.name}=shadowsocks,${proxy.server},${proxy.port},${proxy.cipher},"${proxy.password}"`, `${proxy.name}=shadowsocks,${proxy.server},${proxy.port},${proxy.cipher},"${proxy.password}"`,
); );
let isShadowTLS;
// obfs // obfs
if (isPresent(proxy, 'plugin')) { if (isPresent(proxy, 'plugin')) {
if (proxy.plugin === 'obfs') { if (proxy.plugin === 'obfs') {
@ -107,7 +105,6 @@ function shadowsocks(proxy, includeUnsupportedProxy) {
); );
// udp-port // udp-port
result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port'); result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port');
isShadowTLS = true;
} else if (['shadow-tls'].includes(proxy.plugin) && proxy['plugin-opts']) { } else if (['shadow-tls'].includes(proxy.plugin) && proxy['plugin-opts']) {
const password = proxy['plugin-opts'].password; const password = proxy['plugin-opts'].password;
const host = proxy['plugin-opts'].host; const host = proxy['plugin-opts'].host;
@ -130,7 +127,6 @@ function shadowsocks(proxy, includeUnsupportedProxy) {
`,udp-port=${proxy['udp-port']}`, `,udp-port=${proxy['udp-port']}`,
'udp-port', 'udp-port',
); );
isShadowTLS = true;
} }
} }
@ -142,11 +138,6 @@ function shadowsocks(proxy, includeUnsupportedProxy) {
result.append(`,udp=true`); result.append(`,udp=true`);
} }
if (!includeUnsupportedProxy && isShadowTLS) {
throw new Error(
`shadow-tls is not supported(请使用 includeUnsupportedProxy 参数)`,
);
}
const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version']; const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version'];
result.appendIfPresent(`,ip-mode=${ip_version}`, 'ip-version'); result.appendIfPresent(`,ip-mode=${ip_version}`, 'ip-version');
@ -170,8 +161,6 @@ function shadowsocksr(proxy, includeUnsupportedProxy) {
result.appendIfPresent(`,obfs=${proxy.obfs}`, 'obfs'); result.appendIfPresent(`,obfs=${proxy.obfs}`, 'obfs');
result.appendIfPresent(`,obfs-param=${proxy['obfs-param']}`, 'obfs-param'); result.appendIfPresent(`,obfs-param=${proxy['obfs-param']}`, 'obfs-param');
let isShadowTLS;
// shadow-tls // shadow-tls
if (isPresent(proxy, 'shadow-tls-password')) { if (isPresent(proxy, 'shadow-tls-password')) {
result.append(`,shadow-tls-password=${proxy['shadow-tls-password']}`); result.append(`,shadow-tls-password=${proxy['shadow-tls-password']}`);
@ -186,7 +175,6 @@ function shadowsocksr(proxy, includeUnsupportedProxy) {
); );
// udp-port // udp-port
result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port'); result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port');
isShadowTLS = true;
} else if (['shadow-tls'].includes(proxy.plugin) && proxy['plugin-opts']) { } else if (['shadow-tls'].includes(proxy.plugin) && proxy['plugin-opts']) {
const password = proxy['plugin-opts'].password; const password = proxy['plugin-opts'].password;
const host = proxy['plugin-opts'].host; const host = proxy['plugin-opts'].host;
@ -209,7 +197,6 @@ function shadowsocksr(proxy, includeUnsupportedProxy) {
`,udp-port=${proxy['udp-port']}`, `,udp-port=${proxy['udp-port']}`,
'udp-port', 'udp-port',
); );
isShadowTLS = true;
} }
} }
@ -221,11 +208,6 @@ function shadowsocksr(proxy, includeUnsupportedProxy) {
result.append(`,udp=true`); result.append(`,udp=true`);
} }
if (!includeUnsupportedProxy && isShadowTLS) {
throw new Error(
`shadow-tls is not supported(请使用 includeUnsupportedProxy 参数)`,
);
}
const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version']; const ip_version = ipVersions[proxy['ip-version']] || proxy['ip-version'];
result.appendIfPresent(`,ip-mode=${ip_version}`, 'ip-version'); result.appendIfPresent(`,ip-mode=${ip_version}`, 'ip-version');