fix (core): Clash Vmess servername does parse correctly

This commit is contained in:
Peng-YM
2022-07-11 23:20:21 +08:00
parent 2c4e47166d
commit b143476e71
7 changed files with 72 additions and 17 deletions

View File

@@ -281,7 +281,30 @@ function Clash_All() {
}
return true;
};
const parse = (line) => JSON.parse(line);
const parse = (line) => {
const proxy = JSON.parse(line);
if (
![
'ss',
'ssr',
'vmess',
'socks',
'http',
'snell',
'trojan',
].includes(proxy.type)
) {
throw new Error(
`Clash does not support proxy with type: ${proxy.type}`,
);
}
// handle vmess sni
proxy.sni = proxy.servername;
delete proxy.servername;
return proxy;
};
return { name, test, parse };
}

View File

@@ -1,16 +1,33 @@
import { isPresent } from '@/core/proxy-utils/producers/utils';
export default function Clash_Producer() {
const type = 'ALL';
const produce = (proxies) => {
proxies.filter((proxy) => {
if (proxy.type === 'vless') return false;
return true;
});
// filter unsupported proxies
proxies = proxies.filter((proxy) =>
['ss', 'ssr', 'vmess', 'socks', 'http', 'snell', 'trojan'].includes(
proxy.type,
),
);
return (
'proxies:\n' +
proxies
.map((proxy) => {
if (proxy.type === 'vmess') {
// handle vmess aead
if (isPresent(proxy, 'aead')) {
if (proxy.aead) {
proxy.alterId = 0;
}
delete proxy.aead;
}
if (isPresent(proxy, 'sni')) {
proxy.servername = proxy.sni;
delete proxy.sni;
}
}
delete proxy['tls-fingerprint'];
delete proxy['aead'];
return ' - ' + JSON.stringify(proxy) + '\n';
})
.join('')

View File

@@ -1,3 +1,5 @@
import { isPresent } from '@/core/proxy-utils/producers/utils';
export default function Stash_Producer() {
const type = 'ALL';
const produce = (proxies) => {
@@ -5,8 +7,21 @@ export default function Stash_Producer() {
'proxies:\n' +
proxies
.map((proxy) => {
if (proxy.type === 'vmess') {
// handle vmess aead
if (isPresent(proxy, 'aead')) {
if (proxy.aead) {
proxy.alterId = 0;
}
delete proxy.aead;
}
if (isPresent(proxy, 'sni')) {
proxy.servername = proxy.sni;
delete proxy.sni;
}
}
delete proxy['tls-fingerprint'];
delete proxy['aead'];
return ' - ' + JSON.stringify(proxy) + '\n';
})
.join('')