Skip to content

Commit

Permalink
feat: 支持为 mellow 输出 ss uri
Browse files Browse the repository at this point in the history
  • Loading branch information
geekdada committed Mar 12, 2020
1 parent 40b6714 commit c26cdb5
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 8 deletions.
15 changes: 10 additions & 5 deletions lib/utils/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { logger } from '@surgio/logger';
import assert from 'assert';
import Debug from 'debug';
import fs from 'fs-extra';
Expand All @@ -10,7 +11,6 @@ import { JsonObject } from 'type-fest';
import { default as legacyUrl } from 'url';
import URLSafeBase64 from 'urlsafe-base64';
import YAML from 'yaml';
import { logger } from '@surgio/logger';

import {
HttpNodeConfig,
Expand All @@ -25,15 +25,15 @@ import {
ShadowsocksrNodeConfig,
SimpleNodeConfig,
SnellNodeConfig,
SortedNodeNameFilterType, SubscriptionUserinfo, TrojanNodeConfig,
SortedNodeNameFilterType,
TrojanNodeConfig,
VmessNodeConfig,
} from '../types';
import { ConfigCache } from './cache';
import { NETWORK_TIMEOUT, OBFS_UA, PROXY_TEST_INTERVAL, PROXY_TEST_URL } from './constant';
import { isIp } from './dns';
import { validateFilter } from './filter';
import { parseSSRUri } from './ssr';
import { formatVmessUri } from './v2ray';
import { ConfigCache, SubsciptionCacheItem, SubscriptionCache } from './cache';

const debug = Debug('surgio:utils');

Expand Down Expand Up @@ -561,7 +561,7 @@ export const getClashNodes = (
};

export const getMellowNodes = (
list: ReadonlyArray<VmessNodeConfig>,
list: ReadonlyArray<VmessNodeConfig|ShadowsocksNodeConfig>,
filter?: NodeFilterType|SortedNodeNameFilterType
): string => {
const result = applyFilter(list, filter)
Expand All @@ -572,6 +572,11 @@ export const getMellowNodes = (
return [nodeConfig.nodeName, 'vmess1', uri.trim().replace('vmess://', 'vmess1://')].join(', ');
}

case NodeTypeEnum.Shadowsocks: {
const uri = getShadowsocksNodes([nodeConfig]);
return [nodeConfig.nodeName, 'ss', uri.trim()].join(', ');
}

// istanbul ignore next
default:
logger.warn(`不支持为 Mellow 生成 ${nodeConfig!.type} 的节点,节点 ${nodeConfig!.nodeName} 会被省略`);
Expand Down
13 changes: 13 additions & 0 deletions test/snapshots/cli.test.ts.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,21 @@ Generated by [AVA](https://avajs.dev).
----␊
测试中文 = external, exec = "/usr/local/bin/ssr-local", args = "-s", args = "127.0.0.1", args = "-p", args = "1234", args = "-m", args = "aes-128-cfb", args = "-o", args = "tls1.2_ticket_auth", args = "-O", args = "auth_aes128_md5", args = "-k", args = "aaabbb", args = "-l", args = "61105", args = "-b", args = "127.0.0.1", args = "-g", args = "breakwa11.moe", local-port = 61105, addresses = 127.0.0.1␊
----␊
🇺🇸US 1, ss, ss://[email protected]:443/?plugin=obfs-local%3Bobfs%3Dtls%3Bobfs-host%3Dgateway-carry.icloud.com&group=Surgio#%F0%9F%87%BA%F0%9F%87%B8US%201␊
🇺🇸US 2, ss, ss://[email protected]:443/?group=Surgio#%F0%9F%87%BA%F0%9F%87%B8US%202␊
🇺🇸US 3, ss, ss://[email protected]:443/?plugin=obfs-local%3Bobfs%3Dwss%3Bobfs-host%3Dgateway-carry.icloud.com&group=Surgio#%F0%9F%87%BA%F0%9F%87%B8US%203␊
🇺🇲 US, ss, ss://[email protected]:443/?plugin=obfs-local%3Bobfs%3Dtls%3Bobfs-host%3Dgateway-carry.icloud.com&group=Surgio#%F0%9F%87%BA%F0%9F%87%B2%20US␊
🇺🇸US 1, ss, ss://[email protected]:443/?plugin=obfs-local%3Bobfs%3Dtls%3Bobfs-host%3Dgateway-carry.icloud.com&group=Surgio#%F0%9F%87%BA%F0%9F%87%B8US%201␊
🇺🇸US 2, ss, ss://[email protected]:444/?group=Surgio#%F0%9F%87%BA%F0%9F%87%B8US%202␊
🇺🇸US 3, ss, ss://[email protected]:445/?plugin=obfs-local%3Bobfs%3Dtls%3Bobfs-host%3Dwww.bing.com&group=Surgio#%F0%9F%87%BA%F0%9F%87%B8US%203␊
🇺🇸US 4, ss, ss://[email protected]:80/?plugin=obfs-local%3Bobfs%3Dhttp%3Bobfs-host%3Dwww.bing.com&group=Surgio#%F0%9F%87%BA%F0%9F%87%B8US%204␊
测试 1, vmess1, vmess1://[email protected]:8080/?network=ws&tls=false␊
测试 2, vmess1, vmess1://[email protected]:8080/?network=tcp&tls=false␊
ss1, ss, ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpwYXNzd29yZA@server:443/?group=Surgio#ss1␊
ss2, ss, ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpwYXNzd29yZA@server:443/?plugin=obfs-local%3Bobfs%3Dtls%3Bobfs-host%3Dwww.bing.com&group=Surgio#ss2␊
ss3, ss, ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpwYXNzd29yZA@server:443/?plugin=obfs-local%3Bobfs%3Dws%3Bobfs-host%3Dserver&group=Surgio#ss3␊
ss4, ss, ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpwYXNzd29yZA@server:443/?plugin=obfs-local%3Bobfs%3Dtls%3Bobfs-host%3Dexample.com&group=Surgio#ss4␊
ss-wss, ss, ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpwYXNzd29yZA@server:443/?plugin=obfs-local%3Bobfs%3Dwss%3Bobfs-host%3Dcloudflare.com&group=Surgio#ss-wss␊
----␊
Proxy:␊
- type: ss␊
Expand Down
Binary file modified test/snapshots/cli.test.ts.snap
Binary file not shown.
14 changes: 12 additions & 2 deletions test/utils/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ test('getShadowsocksNodes', async t => {
});

test('getMellowNodes', async t => {
const nodeList: ReadonlyArray<VmessNodeConfig> = [
const nodeList: ReadonlyArray<VmessNodeConfig|ShadowsocksNodeConfig> = [
{
alterId: '64',
host: 'example.com',
Expand Down Expand Up @@ -505,7 +505,17 @@ test('getMellowNodes', async t => {
tls: true,
type: NodeTypeEnum.Vmess,
uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd',
},
}, {
nodeName: '🇭🇰HK(Example)',
type: NodeTypeEnum.Shadowsocks,
hostname: 'example.com',
port: '8443',
method: 'chacha20-ietf-poly1305',
password: 'password',
obfs: 'tls',
'obfs-host': 'gateway.icloud.com',
'udp-relay': true,
}
];

t.snapshot(utils.getMellowNodes(nodeList));
Expand Down
3 changes: 2 additions & 1 deletion test/utils/snapshots/index.test.ts.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ Generated by [AVA](https://avajs.dev).
`Test Node 3, vmess1, vmess1://[email protected]:8080/?network=ws&tls=false␊
Test Node 4, vmess1, vmess1://[email protected]:8080/?network=tcp&tls=false␊
Test Node 5, vmess1, vmess1://[email protected]:8080/?network=tcp&tls=true`
Test Node 5, vmess1, vmess1://[email protected]:8080/?network=tcp&tls=true␊
🇭🇰HK(Example), ss, ss://[email protected]:8443/?plugin=obfs-local%3Bobfs%3Dtls%3Bobfs-host%3Dgateway.icloud.com&group=Surgio#%F0%9F%87%AD%F0%9F%87%B0HK(Example)`

> Snapshot 2
Expand Down
Binary file modified test/utils/snapshots/index.test.ts.snap
Binary file not shown.

0 comments on commit c26cdb5

Please sign in to comment.