mirror of
https://github.com/sub-store-org/Sub-Store.git
synced 2025-08-10 00:52:40 +00:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ae70eca09 | ||
|
|
d0acf49b83 | ||
|
|
c51f3511dd |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "sub-store",
|
"name": "sub-store",
|
||||||
"version": "2.14.142",
|
"version": "2.14.145",
|
||||||
"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": {
|
||||||
|
|||||||
@@ -333,10 +333,13 @@ function URI_VLESS() {
|
|||||||
line = line.split('vless://')[1];
|
line = line.split('vless://')[1];
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
let [__, uuid, server, port, ___, addons = '', name] =
|
let [__, uuid, server, port, ___, addons = '', name] =
|
||||||
/^(.*?)@(.*?):(\d+)\/?(\?(.*?))?(?:#(.*?))$/.exec(line);
|
/^(.*?)@(.*?):(\d+)\/?(\?(.*?))?(?:#(.*?))?$/.exec(line);
|
||||||
port = parseInt(`${port}`, 10);
|
port = parseInt(`${port}`, 10);
|
||||||
uuid = decodeURIComponent(uuid);
|
uuid = decodeURIComponent(uuid);
|
||||||
name = decodeURIComponent(name) ?? `VLESS ${server}:${port}`;
|
if (name != null) {
|
||||||
|
name = decodeURIComponent(name);
|
||||||
|
}
|
||||||
|
name = name ?? `VLESS ${server}:${port}`;
|
||||||
const proxy = {
|
const proxy = {
|
||||||
type: 'vless',
|
type: 'vless',
|
||||||
name,
|
name,
|
||||||
@@ -415,13 +418,16 @@ function URI_Hysteria2() {
|
|||||||
line = line.split(/(hysteria2|hy2):\/\//)[2];
|
line = line.split(/(hysteria2|hy2):\/\//)[2];
|
||||||
// eslint-disable-next-line no-unused-vars
|
// eslint-disable-next-line no-unused-vars
|
||||||
let [__, password, server, ___, port, ____, addons = '', name] =
|
let [__, password, server, ___, port, ____, addons = '', name] =
|
||||||
/^(.*?)@(.*?)(:(\d+))?\/?(\?(.*?))?(?:#(.*?))$/.exec(line);
|
/^(.*?)@(.*?)(:(\d+))?\/?(\?(.*?))?(?:#(.*?))?$/.exec(line);
|
||||||
port = parseInt(`${port}`, 10);
|
port = parseInt(`${port}`, 10);
|
||||||
if (isNaN(port)) {
|
if (isNaN(port)) {
|
||||||
port = 443;
|
port = 443;
|
||||||
}
|
}
|
||||||
password = decodeURIComponent(password);
|
password = decodeURIComponent(password);
|
||||||
name = decodeURIComponent(name) ?? `Hysteria2 ${server}:${port}`;
|
if (name != null) {
|
||||||
|
name = decodeURIComponent(name);
|
||||||
|
}
|
||||||
|
name = name ?? `Hysteria2 ${server}:${port}`;
|
||||||
|
|
||||||
const proxy = {
|
const proxy = {
|
||||||
type: 'hysteria2',
|
type: 'hysteria2',
|
||||||
|
|||||||
@@ -12,7 +12,10 @@ export default function register($app) {
|
|||||||
.patch(updateFile)
|
.patch(updateFile)
|
||||||
.delete(deleteFile);
|
.delete(deleteFile);
|
||||||
|
|
||||||
|
$app.route('/api/wholeFile/:name').get(getWholeFile);
|
||||||
|
|
||||||
$app.route('/api/files').get(getAllFiles).post(createFile).put(replaceFile);
|
$app.route('/api/files').get(getAllFiles).post(createFile).put(replaceFile);
|
||||||
|
$app.route('/api/wholeFiles').get(getAllWholeFiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
// file API
|
// file API
|
||||||
@@ -43,7 +46,25 @@ function getFile(req, res) {
|
|||||||
const allFiles = $.read(FILES_KEY);
|
const allFiles = $.read(FILES_KEY);
|
||||||
const file = findByName(allFiles, name);
|
const file = findByName(allFiles, name);
|
||||||
if (file) {
|
if (file) {
|
||||||
res.status(200).json(file.content);
|
res.set('Content-Type', 'text/plain; charset=utf-8').send(file.content);
|
||||||
|
} else {
|
||||||
|
failed(
|
||||||
|
res,
|
||||||
|
new ResourceNotFoundError(
|
||||||
|
`FILE_NOT_FOUND`,
|
||||||
|
`File ${name} does not exist`,
|
||||||
|
404,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function getWholeFile(req, res) {
|
||||||
|
let { name } = req.params;
|
||||||
|
name = decodeURIComponent(name);
|
||||||
|
const allFiles = $.read(FILES_KEY);
|
||||||
|
const file = findByName(allFiles, name);
|
||||||
|
if (file) {
|
||||||
|
success(res, file);
|
||||||
} else {
|
} else {
|
||||||
failed(
|
failed(
|
||||||
res,
|
res,
|
||||||
@@ -102,6 +123,11 @@ function getAllFiles(req, res) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getAllWholeFiles(req, res) {
|
||||||
|
const allFiles = $.read(FILES_KEY);
|
||||||
|
success(res, allFiles);
|
||||||
|
}
|
||||||
|
|
||||||
function replaceFile(req, res) {
|
function replaceFile(req, res) {
|
||||||
const allFiles = req.body;
|
const allFiles = req.body;
|
||||||
$.write(allFiles, FILES_KEY);
|
$.write(allFiles, FILES_KEY);
|
||||||
|
|||||||
@@ -47,7 +47,9 @@ function getModule(req, res) {
|
|||||||
const allModules = $.read(MODULES_KEY);
|
const allModules = $.read(MODULES_KEY);
|
||||||
const module = findByName(allModules, name);
|
const module = findByName(allModules, name);
|
||||||
if (module) {
|
if (module) {
|
||||||
res.status(200).json(module.content);
|
res.set('Content-Type', 'text/plain; charset=utf-8').send(
|
||||||
|
module.content,
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
failed(
|
failed(
|
||||||
res,
|
res,
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
import { ARTIFACTS_KEY, COLLECTIONS_KEY, SUBS_KEY } from '@/constants';
|
import {
|
||||||
|
ARTIFACTS_KEY,
|
||||||
|
COLLECTIONS_KEY,
|
||||||
|
SUBS_KEY,
|
||||||
|
FILES_KEY,
|
||||||
|
} from '@/constants';
|
||||||
import $ from '@/core/app';
|
import $ from '@/core/app';
|
||||||
import { success } from '@/restful/response';
|
import { success } from '@/restful/response';
|
||||||
|
|
||||||
@@ -6,6 +11,7 @@ export default function register($app) {
|
|||||||
$app.post('/api/sort/subs', sortSubs);
|
$app.post('/api/sort/subs', sortSubs);
|
||||||
$app.post('/api/sort/collections', sortCollections);
|
$app.post('/api/sort/collections', sortCollections);
|
||||||
$app.post('/api/sort/artifacts', sortArtifacts);
|
$app.post('/api/sort/artifacts', sortArtifacts);
|
||||||
|
$app.post('/api/sort/files', sortFiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
function sortSubs(req, res) {
|
function sortSubs(req, res) {
|
||||||
@@ -33,3 +39,11 @@ function sortArtifacts(req, res) {
|
|||||||
$.write(allArtifacts, ARTIFACTS_KEY);
|
$.write(allArtifacts, ARTIFACTS_KEY);
|
||||||
success(res, allArtifacts);
|
success(res, allArtifacts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sortFiles(req, res) {
|
||||||
|
const orders = req.body;
|
||||||
|
const allFiles = $.read(FILES_KEY);
|
||||||
|
allFiles.sort((a, b) => orders.indexOf(a.name) - orders.indexOf(b.name));
|
||||||
|
$.write(allFiles, FILES_KEY);
|
||||||
|
success(res, allFiles);
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {
|
|||||||
COLLECTIONS_KEY,
|
COLLECTIONS_KEY,
|
||||||
RULES_KEY,
|
RULES_KEY,
|
||||||
SUBS_KEY,
|
SUBS_KEY,
|
||||||
|
FILES_KEY,
|
||||||
} from '@/constants';
|
} from '@/constants';
|
||||||
import { failed, success } from '@/restful/response';
|
import { failed, success } from '@/restful/response';
|
||||||
import { InternalServerError, ResourceNotFoundError } from '@/restful/errors';
|
import { InternalServerError, ResourceNotFoundError } from '@/restful/errors';
|
||||||
@@ -327,6 +328,10 @@ async function produceArtifact({
|
|||||||
]);
|
]);
|
||||||
// produce output
|
// produce output
|
||||||
return RuleUtils.produce(rules, platform);
|
return RuleUtils.produce(rules, platform);
|
||||||
|
} else if (type === 'file') {
|
||||||
|
const allFiles = $.read(FILES_KEY);
|
||||||
|
const file = findByName(allFiles, name);
|
||||||
|
return file?.content ?? '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user