mirror of
https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
synced 2026-03-24 14:43:16 +08:00
Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ca0d800bbb | ||
|
|
31b48d7a6c | ||
|
|
ab96ae9413 | ||
|
|
3fc507b576 | ||
|
|
2f2dbbdb68 | ||
|
|
1543e76841 | ||
|
|
74c4719806 | ||
|
|
b80d7f5875 | ||
|
|
779950ab11 | ||
|
|
42404537e8 |
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sub-store",
|
||||
"version": "2.14.179",
|
||||
"version": "2.14.184",
|
||||
"description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.",
|
||||
"main": "src/main.js",
|
||||
"scripts": {
|
||||
|
||||
@@ -224,6 +224,19 @@ function lastParse(proxy) {
|
||||
.replace(/^\[/, '')
|
||||
.replace(/\]$/, '');
|
||||
}
|
||||
if (proxy.network === 'ws') {
|
||||
if (!proxy['ws-opts'] && (proxy['ws-path'] || proxy['ws-headers'])) {
|
||||
proxy['ws-opts'] = {};
|
||||
if (proxy['ws-path']) {
|
||||
proxy['ws-opts'].path = proxy['ws-path'];
|
||||
}
|
||||
if (proxy['ws-headers']) {
|
||||
proxy['ws-opts'].headers = proxy['ws-headers'];
|
||||
}
|
||||
}
|
||||
delete proxy['ws-path'];
|
||||
delete proxy['ws-headers'];
|
||||
}
|
||||
if (proxy.type === 'trojan') {
|
||||
if (proxy.network === 'tcp') {
|
||||
delete proxy.network;
|
||||
|
||||
@@ -578,6 +578,10 @@ function Clash_All() {
|
||||
}
|
||||
}
|
||||
|
||||
if (proxy.fingerprint) {
|
||||
proxy['tls-fingerprint'] = proxy.fingerprint;
|
||||
}
|
||||
|
||||
if (proxy['benchmark-url']) {
|
||||
proxy['test-url'] = proxy['benchmark-url'];
|
||||
}
|
||||
|
||||
@@ -46,8 +46,19 @@ function Clash() {
|
||||
};
|
||||
const parse = function (raw) {
|
||||
// Clash YAML format
|
||||
const proxies = safeLoad(raw).proxies;
|
||||
return proxies.map((p) => JSON.stringify(p)).join('\n');
|
||||
const {
|
||||
proxies,
|
||||
'global-client-fingerprint': globalClientFingerprint,
|
||||
} = safeLoad(raw);
|
||||
return proxies
|
||||
.map((p) => {
|
||||
// https://github.com/MetaCubeX/mihomo/blob/Alpha/docs/config.yaml#L73C1-L73C26
|
||||
if (globalClientFingerprint && !p['client-fingerprint']) {
|
||||
p['client-fingerprint'] = globalClientFingerprint;
|
||||
}
|
||||
return JSON.stringify(p);
|
||||
})
|
||||
.join('\n');
|
||||
};
|
||||
return { name, test, parse };
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ function HTML() {
|
||||
|
||||
function ClashProvider() {
|
||||
const name = 'Clash Provider';
|
||||
const test = (raw) => raw.indexOf('payload:') === 0;
|
||||
const test = (raw) => /^payload:/gm.exec(raw).index >= 0;
|
||||
const parse = (raw) => {
|
||||
return raw.replace('payload:', '').replace(/^\s*-\s*/gm, '');
|
||||
};
|
||||
|
||||
@@ -16,6 +16,7 @@ import registerPreviewRoutes from './preview';
|
||||
import registerSortingRoutes from './sort';
|
||||
import registerMiscRoutes from './miscs';
|
||||
import registerNodeInfoRoutes from './node-info';
|
||||
import registerParserRoutes from './parser';
|
||||
|
||||
export default function serve() {
|
||||
let port;
|
||||
@@ -38,6 +39,7 @@ export default function serve() {
|
||||
registerSyncRoutes($app);
|
||||
registerNodeInfoRoutes($app);
|
||||
registerMiscRoutes($app);
|
||||
registerParserRoutes($app);
|
||||
|
||||
$app.start();
|
||||
|
||||
|
||||
54
backend/src/restful/parser.js
Normal file
54
backend/src/restful/parser.js
Normal file
@@ -0,0 +1,54 @@
|
||||
import { success, failed } from '@/restful/response';
|
||||
import { ProxyUtils } from '@/core/proxy-utils';
|
||||
import { RuleUtils } from '@/core/rule-utils';
|
||||
|
||||
export default function register($app) {
|
||||
$app.route('/api/proxy/parse').post(proxy_parser);
|
||||
$app.route('/api/rule/parse').post(rule_parser);
|
||||
}
|
||||
|
||||
/***
|
||||
* 感谢 izhangxm 的 PR!
|
||||
* 目前没有节点操作, 没有支持完整参数, 以后再完善一下
|
||||
*/
|
||||
|
||||
/***
|
||||
* 代理服务器协议转换接口。
|
||||
* 请求方法为POST,数据为json。需要提供data和client字段。
|
||||
* data: string, 协议数据,每行一个或者是clash
|
||||
* client: string, 目标平台名称,见backend/src/core/proxy-utils/producers/index.js
|
||||
*
|
||||
*/
|
||||
function proxy_parser(req, res) {
|
||||
const { data, client, content, platform } = req.body;
|
||||
var result = {};
|
||||
try {
|
||||
var proxies = ProxyUtils.parse(data ?? content);
|
||||
var par_res = ProxyUtils.produce(proxies, client ?? platform);
|
||||
result['par_res'] = par_res;
|
||||
} catch (err) {
|
||||
failed(res, err);
|
||||
return;
|
||||
}
|
||||
success(res, result);
|
||||
}
|
||||
/**
|
||||
* 规则转换接口。
|
||||
* 请求方法为POST,数据为json。需要提供data和client字段。
|
||||
* data: string, 多行规则字符串
|
||||
* client: string, 目标平台名称,具体见backend/src/core/rule-utils/producers.js
|
||||
*/
|
||||
function rule_parser(req, res) {
|
||||
const { data, client, content, platform } = req.body;
|
||||
var result = {};
|
||||
try {
|
||||
const rules = RuleUtils.parse(data ?? content);
|
||||
var par_res = RuleUtils.produce(rules, client ?? platform);
|
||||
result['par_res'] = par_res;
|
||||
} catch (err) {
|
||||
failed(res, err);
|
||||
return;
|
||||
}
|
||||
|
||||
success(res, result);
|
||||
}
|
||||
Reference in New Issue
Block a user