mirror of
				https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
				synced 2025-10-31 08:51:04 +08:00 
			
		
		
		
	feat: Loon 使用 includeUnsupportedProxy 参数开启 Shadowsocks + Shadow TLS V3
This commit is contained in:
		
							parent
							
								
									589a6bfadb
								
							
						
					
					
						commit
						e6f6d51608
					
				| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "sub-store", |   "name": "sub-store", | ||||||
|   "version": "2.16.5", |   "version": "2.16.6", | ||||||
|   "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": { | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ shadowsocksr = tag equals "shadowsocksr"i address method password (ssr_protocol/ | |||||||
|     // handle ssr obfs
 |     // handle ssr obfs
 | ||||||
|     proxy.obfs = obfs.type; |     proxy.obfs = obfs.type; | ||||||
| } | } | ||||||
| shadowsocks = tag equals "shadowsocks"i address method password (obfs_typev obfs_hostv)? (obfs_ss/obfs_host/obfs_uri/fast_open/udp_relay/others)* { | shadowsocks = tag equals "shadowsocks"i address method password (obfs_typev obfs_hostv)? (obfs_ss/obfs_host/obfs_uri/fast_open/udp_relay/udp_port/shadow_tls_version/shadow_tls_sni/shadow_tls_password/others)* { | ||||||
|     proxy.type = "ss"; |     proxy.type = "ss"; | ||||||
|     // handle ss obfs
 |     // handle ss obfs
 | ||||||
|     if (obfs.type == "http" || obfs.type === "tls") { |     if (obfs.type == "http" || obfs.type === "tls") { | ||||||
| @ -169,6 +169,11 @@ ssr_protocol_param = comma "protocol-param" equals param:$[^=,]+ { proxy["protoc | |||||||
| 
 | 
 | ||||||
| vmess_alterId = comma "alterId" equals alterId:$[0-9]+ { proxy.alterId = parseInt(alterId); }  | vmess_alterId = comma "alterId" equals alterId:$[0-9]+ { proxy.alterId = parseInt(alterId); }  | ||||||
| 
 | 
 | ||||||
|  | udp_port = comma "udp-port" equals match:$[0-9]+ { proxy["udp-port"] = parseInt(match.trim()); } | ||||||
|  | shadow_tls_version = comma "shadow-tls-version" equals match:$[0-9]+ { proxy["shadow-tls-version"] = parseInt(match.trim()); } | ||||||
|  | shadow_tls_sni = comma "shadow-tls-sni" equals match:[^,]+ { proxy["shadow-tls-sni"] = match.join(""); } | ||||||
|  | shadow_tls_password = comma "shadow-tls-password" equals match:[^,]+ { proxy["shadow-tls-password"] = match.join(""); } | ||||||
|  | 
 | ||||||
| over_tls = comma "over-tls" equals flag:bool { proxy.tls = flag; } | over_tls = comma "over-tls" equals flag:bool { proxy.tls = flag; } | ||||||
| tls_host = comma sni:("tls-name"/"sni") equals host:domain { proxy.sni = host; } | tls_host = comma sni:("tls-name"/"sni") equals host:domain { proxy.sni = host; } | ||||||
| tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; } | tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; } | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ shadowsocksr = tag equals "shadowsocksr"i address method password (ssr_protocol/ | |||||||
|     // handle ssr obfs |     // handle ssr obfs | ||||||
|     proxy.obfs = obfs.type; |     proxy.obfs = obfs.type; | ||||||
| } | } | ||||||
| shadowsocks = tag equals "shadowsocks"i address method password (obfs_typev obfs_hostv)? (obfs_ss/obfs_host/obfs_uri/fast_open/udp_relay/others)* { | shadowsocks = tag equals "shadowsocks"i address method password (obfs_typev obfs_hostv)? (obfs_ss/obfs_host/obfs_uri/fast_open/udp_relay/udp_port/shadow_tls_version/shadow_tls_sni/shadow_tls_password/others)* { | ||||||
|     proxy.type = "ss"; |     proxy.type = "ss"; | ||||||
|     // handle ss obfs |     // handle ss obfs | ||||||
|     if (obfs.type == "http" || obfs.type === "tls") { |     if (obfs.type == "http" || obfs.type === "tls") { | ||||||
| @ -167,6 +167,11 @@ ssr_protocol_param = comma "protocol-param" equals param:$[^=,]+ { proxy["protoc | |||||||
| 
 | 
 | ||||||
| vmess_alterId = comma "alterId" equals alterId:$[0-9]+ { proxy.alterId = parseInt(alterId); }  | vmess_alterId = comma "alterId" equals alterId:$[0-9]+ { proxy.alterId = parseInt(alterId); }  | ||||||
| 
 | 
 | ||||||
|  | udp_port = comma "udp-port" equals match:$[0-9]+ { proxy["udp-port"] = parseInt(match.trim()); } | ||||||
|  | shadow_tls_version = comma "shadow-tls-version" equals match:$[0-9]+ { proxy["shadow-tls-version"] = parseInt(match.trim()); } | ||||||
|  | shadow_tls_sni = comma "shadow-tls-sni" equals match:[^,]+ { proxy["shadow-tls-sni"] = match.join(""); } | ||||||
|  | shadow_tls_password = comma "shadow-tls-password" equals match:[^,]+ { proxy["shadow-tls-password"] = match.join(""); } | ||||||
|  | 
 | ||||||
| over_tls = comma "over-tls" equals flag:bool { proxy.tls = flag; } | over_tls = comma "over-tls" equals flag:bool { proxy.tls = flag; } | ||||||
| tls_host = comma sni:("tls-name"/"sni") equals host:domain { proxy.sni = host; } | tls_host = comma sni:("tls-name"/"sni") equals host:domain { proxy.sni = host; } | ||||||
| tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; } | tls_verification = comma "skip-cert-verify" equals flag:bool { proxy["skip-cert-verify"] = flag; } | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ export default function Loon_Producer() { | |||||||
|     return { produce }; |     return { produce }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function shadowsocks(proxy) { | function shadowsocks(proxy, includeUnsupportedProxy) { | ||||||
|     const result = new Result(proxy); |     const result = new Result(proxy); | ||||||
|     if ( |     if ( | ||||||
|         ![ |         ![ | ||||||
| @ -78,11 +78,50 @@ function shadowsocks(proxy) { | |||||||
|                 `,obfs-uri=${proxy['plugin-opts'].path}`, |                 `,obfs-uri=${proxy['plugin-opts'].path}`, | ||||||
|                 'plugin-opts.path', |                 'plugin-opts.path', | ||||||
|             ); |             ); | ||||||
|         } else { |         } else if (!['shadow-tls'].includes(proxy.plugin)) { | ||||||
|             throw new Error(`plugin ${proxy.plugin} is not supported`); |             throw new Error(`plugin ${proxy.plugin} is not supported`); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     // shadow-tls
 | ||||||
|  |     if (isPresent(proxy, 'shadow-tls-password')) { | ||||||
|  |         result.append(`,shadow-tls-password=${proxy['shadow-tls-password']}`); | ||||||
|  | 
 | ||||||
|  |         result.appendIfPresent( | ||||||
|  |             `,shadow-tls-version=${proxy['shadow-tls-version']}`, | ||||||
|  |             'shadow-tls-version', | ||||||
|  |         ); | ||||||
|  |         result.appendIfPresent( | ||||||
|  |             `,shadow-tls-sni=${proxy['shadow-tls-sni']}`, | ||||||
|  |             'shadow-tls-sni', | ||||||
|  |         ); | ||||||
|  |         // udp-port
 | ||||||
|  |         result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port'); | ||||||
|  |     } else if (['shadow-tls'].includes(proxy.plugin) && proxy['plugin-opts']) { | ||||||
|  |         const password = proxy['plugin-opts'].password; | ||||||
|  |         const host = proxy['plugin-opts'].host; | ||||||
|  |         const version = proxy['plugin-opts'].version; | ||||||
|  |         if (password) { | ||||||
|  |             result.append(`,shadow-tls-password=${password}`); | ||||||
|  |             if (host) { | ||||||
|  |                 result.append(`,shadow-tls-sni=${host}`); | ||||||
|  |             } | ||||||
|  |             if (version) { | ||||||
|  |                 if (version < 2) { | ||||||
|  |                     throw new Error( | ||||||
|  |                         `shadow-tls version ${version} is not supported`, | ||||||
|  |                     ); | ||||||
|  |                 } | ||||||
|  |                 result.append(`,shadow-tls-version=${version}`); | ||||||
|  |             } | ||||||
|  |             // udp-port
 | ||||||
|  |             result.appendIfPresent( | ||||||
|  |                 `,udp-port=${proxy['udp-port']}`, | ||||||
|  |                 'udp-port', | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     // tfo
 |     // tfo
 | ||||||
|     result.appendIfPresent(`,fast-open=${proxy.tfo}`, 'tfo'); |     result.appendIfPresent(`,fast-open=${proxy.tfo}`, 'tfo'); | ||||||
| 
 | 
 | ||||||
| @ -91,6 +130,12 @@ function shadowsocks(proxy) { | |||||||
|         result.append(`,udp=true`); |         result.append(`,udp=true`); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     if (!includeUnsupportedProxy && result.includes(',shadow-tls-password=')) { | ||||||
|  |         throw new Error( | ||||||
|  |             `shadow-tls is not supported(请使用 includeUnsupportedProxy 参数)`, | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     return result.toString(); |     return result.toString(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -127,8 +127,6 @@ function shadowsocks(proxy, includeUnsupportedProxy) { | |||||||
| 
 | 
 | ||||||
|     // udp
 |     // udp
 | ||||||
|     result.appendIfPresent(`,udp-relay=${proxy.udp}`, 'udp'); |     result.appendIfPresent(`,udp-relay=${proxy.udp}`, 'udp'); | ||||||
|     // udp-port
 |  | ||||||
|     result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port'); |  | ||||||
| 
 | 
 | ||||||
|     // test-url
 |     // test-url
 | ||||||
|     result.appendIfPresent(`,test-url=${proxy['test-url']}`, 'test-url'); |     result.appendIfPresent(`,test-url=${proxy['test-url']}`, 'test-url'); | ||||||
| @ -160,6 +158,8 @@ function shadowsocks(proxy, includeUnsupportedProxy) { | |||||||
|             `,shadow-tls-sni=${proxy['shadow-tls-sni']}`, |             `,shadow-tls-sni=${proxy['shadow-tls-sni']}`, | ||||||
|             'shadow-tls-sni', |             'shadow-tls-sni', | ||||||
|         ); |         ); | ||||||
|  |         // udp-port
 | ||||||
|  |         result.appendIfPresent(`,udp-port=${proxy['udp-port']}`, 'udp-port'); | ||||||
|     } 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; | ||||||
| @ -177,6 +177,11 @@ function shadowsocks(proxy, includeUnsupportedProxy) { | |||||||
|                 } |                 } | ||||||
|                 result.append(`,shadow-tls-version=${version}`); |                 result.append(`,shadow-tls-version=${version}`); | ||||||
|             } |             } | ||||||
|  |             // udp-port
 | ||||||
|  |             result.appendIfPresent( | ||||||
|  |                 `,udp-port=${proxy['udp-port']}`, | ||||||
|  |                 'udp-port', | ||||||
|  |             ); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 xream
						xream