去掉转换入口,加测延迟,改掉刷新时丢状态的毛病
最要紧的是第三条:之前每次改完都会先切到「读取中」,页面被拆掉重建, 选中的那一路入站随之丢失,改个设置还得重新找回原来的位置。现在只有首次加载显示占位, 之后都是原地更新。切换策略组还做成了乐观更新——那一步不写配置文件, 没必要让点击等一个往返,真失败了随后的刷新会纠正回来。 测延迟按钮让内核并发测整个策略组。测不通是关于线路的结论而不是 Patchbay 出了问题, 所以全部超时用中性提示,不弹红框。
This commit is contained in:
+7
-1
@@ -16,6 +16,12 @@ import { tokenFromRequest, tokenMatches } from './auth.ts'
|
||||
import type { ConfigObject } from '../vendor/config-editor/index.ts'
|
||||
import type { Env } from './env.ts'
|
||||
|
||||
/**
|
||||
* 延迟测试。名字里可能有斜杠和中文,所以按前缀匹配而不是列进上面那个精确白名单。
|
||||
* 它是 GET 但会真的发起网络连接,属于「读」里比较重的一类,单独列出来提醒这一点。
|
||||
*/
|
||||
const DELAY_PATH = /^\/(proxies|group)\/.+\/delay$/
|
||||
|
||||
/** 允许透传的管理接口路径。白名单而不是黑名单——多开一个口子要有意为之。 */
|
||||
const READABLE_KERNEL_PATHS = new Set([
|
||||
'/version',
|
||||
@@ -118,7 +124,7 @@ export function createRouter(env: Env, token: string) {
|
||||
|
||||
if (path.startsWith('/api/kernel/') && req.method === 'GET') {
|
||||
const target = path.slice('/api/kernel'.length)
|
||||
if (!READABLE_KERNEL_PATHS.has(target)) {
|
||||
if (!READABLE_KERNEL_PATHS.has(target) && !DELAY_PATH.test(target)) {
|
||||
return json({ error: `不允许透传这个路径:${target}` }, 403)
|
||||
}
|
||||
const upstream = await proxyGet(env, target + url.search)
|
||||
|
||||
Reference in New Issue
Block a user