Compare commits

...

141 Commits

Author SHA1 Message Date
刘祥超
3945e94f71 DNS服务商中的密钥数据以掩码方式显示 2024-03-18 10:18:38 +08:00
刘祥超
9cd3618d9b 部分API文档 2024-03-18 09:29:54 +08:00
刘祥超
4389ffb397 集群设置--网站设置中“处理未绑定域名方式”支持跳转到网址 2024-03-16 08:59:37 +08:00
刘祥超
debb72c2d3 智能DNS中国家/地区线路下支持省/州的细分 2024-03-14 20:12:24 +08:00
刘祥超
b314f7e96c 优化“页面优化”功能相关代码 2024-03-14 14:24:22 +08:00
刘祥超
823e519d58 优化代码 2024-03-10 16:25:52 +08:00
刘祥超
5a54390f1d 在缓存任务键值中增加集群信息 2024-03-10 11:24:50 +08:00
刘祥超
704d3af982 增加单体应用初始化标识 2024-01-29 18:56:28 +08:00
刘祥超
96b48f2bbc 增加通过管理员用户名查找管理员信息的API 2024-01-29 18:55:23 +08:00
刘祥超
4a1c9be931 优化IP库加载速度 2024-01-23 10:04:01 +08:00
刘祥超
f0dc9e0577 增加修改节点停用/启用状态API 2024-01-21 17:43:28 +08:00
刘祥超
1cf38864de 查询集群列表API增加ID排序 2024-01-21 16:57:22 +08:00
刘祥超
5f9e7e981c 部分部分API文档 2024-01-21 14:40:07 +08:00
刘祥超
7073467128 WAF允许ALLOW动作增加有效范围 2024-01-20 21:26:21 +08:00
刘祥超
adc4b945e7 WAF策略增加显示页面动作默认设置 2024-01-20 16:18:49 +08:00
刘祥超
12f6a1e3ce 默认不支持${serverAddr}变量 2024-01-20 10:04:51 +08:00
刘祥超
4f89360902 优化HLS相关API角色 2024-01-20 10:03:51 +08:00
刘祥超
d422dc6b85 WAF操作符增加“包含SQL注入-严格模式” 2024-01-16 20:42:13 +08:00
刘祥超
0dc678e38a 配置代码增加多媒体 2024-01-14 21:10:52 +08:00
刘祥超
05de67318b 网站设置增加HLS加密功能(商业版本) 2024-01-14 20:32:30 +08:00
刘祥超
575e916088 套餐增加文件最大上传尺寸设置 2024-01-13 19:32:41 +08:00
刘祥超
489795dba0 字符编码设置增加“强制替换”选项 2024-01-13 16:28:45 +08:00
刘祥超
3e8fc126b8 5秒盾增加匹配条件 2024-01-12 17:13:34 +08:00
刘祥超
64c3d76fb2 添加快捷添加和删除网站源站API 2024-01-12 11:48:47 +08:00
刘祥超
3bd3ef5f78 套餐API增加查找套餐基本信息API 2024-01-11 18:41:17 +08:00
刘祥超
827eeeb506 实现批量删除网站功能 2024-01-11 18:41:04 +08:00
刘祥超
36cf357984 变量表达式支持修饰符 2024-01-11 16:41:08 +08:00
刘祥超
46140bbdb5 套餐可以设置带宽限制 2024-01-11 15:22:37 +08:00
刘祥超
6a671f67bc 增加用户系统门户页、文章相关管理 2024-01-09 10:20:29 +08:00
刘祥超
ea991f5a97 TLS选项中取出SSL3.0(golang已经不再支持) 2024-01-06 20:47:48 +08:00
刘祥超
5bcbf29fc6 WAF操作符增加“包含XSS注入-严格模式” 2024-01-04 14:52:47 +08:00
刘祥超
e70d6bb33b 增加列出IP名单中的IP ID列表的API 2023-12-24 10:51:03 +08:00
刘祥超
8a8803cee9 优化WAF“阻止”动作的文字提示 2023-12-24 10:13:37 +08:00
刘祥超
184fbd384e WAF参数中增加“请求来源” 2023-12-24 10:03:01 +08:00
刘祥超
fc3c607c8d 优化IP库GC性能 2023-12-24 09:24:37 +08:00
刘祥超
1760e8b9c8 增加请求脚本审核机制 2023-12-23 20:55:01 +08:00
刘祥超
deea02b1ab 优化编译脚本 2023-12-23 10:04:37 +08:00
刘祥超
7f0822000c 增加多语言编译说明 2023-12-23 09:59:29 +08:00
刘祥超
6a36625bc2 增加多处英文菜单 2023-12-23 09:42:24 +08:00
刘祥超
eca0b997f8 增加套餐相关API/给套餐相关API添加更多注释 2023-12-21 15:09:28 +08:00
刘祥超
8746107b73 增加若干功能代号 2023-12-20 17:35:07 +08:00
刘祥超
729311f605 增加若干API/增加多个网站功能项 2023-12-20 15:09:09 +08:00
刘祥超
99a2801591 修改套餐菜单名 2023-12-19 16:20:07 +08:00
刘祥超
8a045c77c9 套餐增加Websocket连接数限制 2023-12-19 14:57:03 +08:00
刘祥超
619ae043e2 修复多语言消息无法读取参数的问题 2023-12-19 08:29:41 +08:00
刘祥超
9ee5c896d1 缓存设置中可以设置缓存主域名,用来复用多域名下的缓存 2023-12-13 18:41:24 +08:00
刘祥超
4209969214 增加保存管理员语言选择的API 2023-12-12 22:40:16 +08:00
刘祥超
a59c84ef0d 增加多处英文翻译 2023-12-12 12:11:33 +08:00
刘祥超
988aca8d84 部分菜单实现中英文切换 2023-12-12 11:48:19 +08:00
刘祥超
310875f8ec WebP策略变化时只更新相关配置 2023-12-11 11:08:48 +08:00
刘祥超
615fdc24d8 WebP转换质量转移到WebP策略配置 2023-12-11 10:17:46 +08:00
刘祥超
acd78085fa 增加“修改用户界面设置”语言消息 2023-12-10 11:08:11 +08:00
刘祥超
0d90dde90b 用户系统界面设置增加“自定义客户端IP报头” 2023-12-10 10:59:51 +08:00
刘祥超
3996a051ff 修复一处消息提示参数 2023-12-10 10:59:16 +08:00
刘祥超
dd14b4ab3d 管理系统安全设置增加“自定义客户端IP报头” 2023-12-10 10:46:55 +08:00
刘祥超
e50bcdf181 WAF策略模板将部分拦截动作(block)改为显示网页(page) 2023-12-09 19:25:06 +08:00
刘祥超
a145b799a2 优化WAF规则模板 2023-12-09 18:15:27 +08:00
刘祥超
cad0fd5ff2 WAF规则模板中XSS注入检测规则使用“包含XSS注入”操作符替代以往的正则表达式 2023-12-09 17:02:01 +08:00
刘祥超
57c249b791 将WAF策略模板SQL注入默认动作修改为“显示页面” 2023-12-09 15:54:57 +08:00
刘祥超
7ee1cc9cf4 WAF规则模板中SQL注入规则使用“包含SQL注入”操作符替代以往的正则表达式 2023-12-09 15:28:55 +08:00
刘祥超
605b01db64 WAF检查项增加“所有报头名称” 2023-12-08 15:38:21 +08:00
刘祥超
bbe76743b1 将WAF checkpoint中名称和描述部分的Header改为“报头” 2023-12-08 15:15:46 +08:00
刘祥超
53563f040f 优化WAF checkpoint参数文字提示 2023-12-08 15:09:32 +08:00
刘祥超
9226001362 优化部分WAF操作符文字提示 2023-12-08 10:18:38 +08:00
刘祥超
4270c08ab7 WAF增加“包含XSS注入”操作符 2023-12-08 10:15:29 +08:00
刘祥超
671fd5dcc2 WAF增加“包含SQL注入”操作符 2023-12-07 20:24:55 +08:00
刘祥超
e8a3dfba71 修复一处单词拼写错误 2023-12-07 12:14:21 +08:00
刘祥超
ba41c16123 WAF操作符增加包含任一单词、包含所有单词、不包含任一单词 2023-12-07 11:43:34 +08:00
刘祥超
490a17558c 进一步缩短WAF Request Body检查尺寸 2023-12-05 16:53:43 +08:00
刘祥超
61f7a14428 页面优化增加例外URL和限制URL 2023-11-30 15:49:19 +08:00
刘祥超
a7336fafbf 增加“极验-行为验”验证码集成支持 2023-11-29 16:58:24 +08:00
刘祥超
7dbf5add34 增加API文档注释 2023-11-24 09:06:36 +08:00
刘祥超
7c5c6267d4 节点配置中增加节点IP信息 2023-11-18 12:10:16 +08:00
刘祥超
8fdc98cde9 CA证书也支持IP地址 2023-11-18 10:39:32 +08:00
刘祥超
d4413b8afe SSL证书支持IP地址 2023-11-18 09:50:34 +08:00
刘祥超
826bf7bf7d 发送短信时加入验证码(code)参数 2023-11-17 15:00:11 +08:00
刘祥超
c6e95eda15 实现用户系统手机号码绑定和登录(商业版) 2023-11-17 11:51:02 +08:00
刘祥超
539016c2f6 源站支持404内容自动重试其他源站 2023-11-15 19:06:51 +08:00
刘祥超
92f4ea0dc4 WAF人机识别实现点击验证和滑动解锁验证/单个网站可以设置默认的人机识别方式 2023-11-15 15:12:08 +08:00
刘祥超
d430eebe8c 增加用户列表菜单 2023-11-13 11:53:36 +08:00
刘祥超
30ff3ecde5 自定义页面增加例外URL和限制URL设置 2023-11-13 10:45:23 +08:00
刘祥超
f0b5f6ed76 自定义页面增加“跳转URL”功能 2023-11-10 16:36:14 +08:00
刘祥超
4c7de6bdc2 URL跳转中增加例外域名和仅限域名 2023-11-10 11:05:21 +08:00
刘祥超
412704c9f3 优化节点阈值设置 2023-11-03 11:57:56 +08:00
刘祥超
f264426099 优化商业版验证 2023-11-02 17:20:16 +08:00
刘祥超
03a6e9ccb9 访问日志存储策略增加“停止默认数据库存储”选项 2023-10-30 19:03:48 +08:00
刘祥超
9b899dff74 实现网络数据包相关统计(商业版本) 2023-10-26 17:17:48 +08:00
刘祥超
5bfd5de90d 删除指标统计项目中的“请求协议Proto“(因为和HTTP协议一样) 2023-10-25 20:56:04 +08:00
刘祥超
2177f97bdb WAF记录IP动作中IP名单如果为空时,默认为全局黑名单 2023-10-15 09:34:33 +08:00
刘祥超
5340e5ad52 取消反向代理中默认自动50x尝试 2023-10-15 09:02:48 +08:00
刘祥超
06a3db911c 增加修改消息任务状态API 2023-10-14 18:16:13 +08:00
刘祥超
a7ae7ea2db 优化消息通知相关代码 2023-10-14 17:15:52 +08:00
刘祥超
f949e31c0f 优化消息发送API 2023-10-12 20:11:34 +08:00
刘祥超
d0e1dfe1af 支持批量复制WAF设置 2023-10-09 19:52:44 +08:00
刘祥超
083ccfed7d 申请证书任务列表区分管理员和用户 2023-10-09 16:18:40 +08:00
刘祥超
347bbe1b96 证书列表区分管理员和用户证书 2023-10-09 15:54:11 +08:00
刘祥超
16cf11b366 完善API文档 2023-10-09 08:45:44 +08:00
刘祥超
01e211560d WAF策略中默认不启用SynFlood检测 2023-10-08 16:01:50 +08:00
刘祥超
96ce664202 集群设置中增加“自动调节系统参数”选项 2023-10-08 16:01:21 +08:00
刘祥超
2b8191001b 将全局设置的TCP相关设置移到“集群设置--网站设置”中 2023-09-18 16:55:30 +08:00
刘祥超
6799f3f9ae 将全局的通用设置--域名审核设置移到“集群设置--网站设置”中 2023-09-18 16:09:46 +08:00
刘祥超
55e2c38cd8 访客IP设置中支持多个请求报头 2023-09-17 19:14:28 +08:00
刘祥超
534d8e471d 全局网站设置中增加Ln请求调度方法 2023-09-17 18:37:08 +08:00
刘祥超
3c81bd6d5d 优化访客IP地址设置 2023-09-07 18:01:58 +08:00
刘祥超
f2d087a6ce 套餐增加请求数(日/月)限制 2023-09-07 11:46:20 +08:00
刘祥超
2497a81e09 重新实现套餐相关功能 2023-09-06 16:31:14 +08:00
刘祥超
972b487db8 爬虫规则中将php改为php\b,避免屏蔽某些安卓WebView 2023-08-30 10:13:16 +08:00
刘祥超
170e6ebfb8 增加API注释 2023-08-29 14:22:53 +08:00
刘祥超
9e80750309 网站设置增加是否支持${serverAddr}选项 2023-08-25 15:31:13 +08:00
刘祥超
f056a9c5bd IP库增加多个辅助查询函数 2023-08-24 12:21:26 +08:00
刘祥超
6a42827ebd 增加检查中国特殊区域的函数 2023-08-24 11:50:47 +08:00
刘祥超
2d25c385fa 改进若干API注释 2023-08-21 15:54:44 +08:00
刘祥超
8a6c20db01 反向代理增加是否重试50X选项,默认为启用 2023-08-20 15:49:49 +08:00
刘祥超
22d00a6c92 WAF增加通配符匹配/不匹配操作符 2023-08-13 10:37:31 +08:00
刘祥超
51f8fd0f31 WAF操作符元数据中增加数据类型选项,以便于优化交互界面 2023-08-13 10:01:24 +08:00
刘祥超
15708ec1bb 编译proto文件时捕捉错误提示 2023-08-12 20:48:53 +08:00
刘祥超
b6667fc323 在README.md中增加多语言配置langs说明 2023-08-12 20:33:50 +08:00
刘祥超
43cf3b57dd 优化API错误相关提示 2023-08-12 20:33:28 +08:00
刘祥超
58dcab31ae 调整WAF通配符顺序 2023-08-12 08:16:54 +08:00
刘祥超
712a9397a1 优化错误处理相关代码 2023-08-11 16:14:47 +08:00
刘祥超
fe00446003 优化错误提示相关代码 2023-08-11 15:26:59 +08:00
刘祥超
c098732e51 静态分发增加例外URL、限制URL、排除隐藏文件等选项 2023-08-10 11:27:00 +08:00
刘祥超
5c1a9fb8ff WAF策略可以自定义默认的区域/省份封禁提示 2023-08-10 10:30:05 +08:00
刘祥超
4b52a9703b 修复proto文件不能编译的问题 2023-08-10 10:29:43 +08:00
刘祥超
1aebbc8e39 减少默认的WAF检查尺寸 2023-08-09 17:56:15 +08:00
刘祥超
9df5a409e6 Update .golangci.yaml 2023-08-09 08:11:47 +08:00
刘祥超
c9bb7fb8a5 添加golangci-lint配置 2023-08-08 18:50:12 +08:00
刘祥超
6a2803187e 优化代码 2023-08-08 15:12:28 +08:00
刘祥超
3c5c961cd5 使用最新的protoc-gen-go和protoc-gen-go-grpc插件编译proto文件 2023-08-07 10:26:22 +08:00
刘祥超
be5c6b12bb 增加脚本使用指南 2023-08-07 09:46:10 +08:00
刘祥超
e6af6b6575 使用最新的protoc-gen-go和protoc-gen-go-grpc插件 2023-08-06 23:36:50 +08:00
刘祥超
65be70d015 增加一些API注释 2023-08-06 19:33:45 +08:00
刘祥超
117c89ff62 缓存策略增加“缓存磁盘最小空余空间”选项 2023-08-06 18:07:33 +08:00
刘祥超
6d8156b10b 缓存策略增加预热超时时间设置(默认20分钟) 2023-08-06 17:06:39 +08:00
刘祥超
9cc9c4e2b3 增加PROXY Protocol版本号校验 2023-08-06 09:55:16 +08:00
刘祥超
7271046cb3 将一些比较耗时的WAF规则分组设为默认不开启 2023-08-02 17:14:24 +08:00
刘祥超
2a67b2b2d6 修复一处编译错误 2023-08-02 17:02:55 +08:00
刘祥超
31de0d5112 WAF策略增加“最多检查内容尺寸“选项 2023-08-02 17:00:40 +08:00
刘祥超
e80ea8a0e2 节点状态中加入磁盘预估写入速度 2023-08-02 14:48:42 +08:00
刘祥超
c08d7c48f2 缓存条件增加“强制Range回源选项” 2023-07-31 17:31:58 +08:00
刘祥超
e44e54fbf4 缓存条件增加是否允许异步读取源站选项 2023-07-31 15:47:24 +08:00
668 changed files with 78556 additions and 61881 deletions

75
.golangci.yaml Normal file
View File

@@ -0,0 +1,75 @@
# https://golangci-lint.run/usage/configuration/
linters:
enable-all: true
disable:
- ifshort
- exhaustivestruct
- golint
- nosnakecase
- scopelint
- varcheck
- structcheck
- interfacer
- maligned
- deadcode
- dogsled
- wrapcheck
- wastedassign
- varnamelen
- testpackage
- thelper
- nilerr
- sqlclosecheck
- paralleltest
- nonamedreturns
- nlreturn
- nakedret
- ireturn
- interfacebloat
- gosmopolitan
- gomnd
- goerr113
- gochecknoglobals
- exhaustruct
- errorlint
- depguard
- exhaustive
- containedctx
- wsl
- cyclop
- dupword
- errchkjson
- contextcheck
- tagalign
- dupl
- forbidigo
- funlen
- goconst
- godox
- gosec
- lll
- nestif
- revive
- unparam
- stylecheck
- gocritic
- gofumpt
- gomoddirectives
- godot
- gofmt
- gocognit
- mirror
- gocyclo
- gochecknoinits
- gci
- maintidx
- prealloc
- goimports
- errname
- musttag
- forcetypeassert
- whitespace
- noctx
- tagliatelle
- nilnil

View File

@@ -3,15 +3,16 @@ GoEdge公共配置项。
目录结构:
~~~
pkg/
dnsconfigs - 域名解析和NameServer相关配置
messageconfigs - 消息通知相关配置
monitorconfigs - 监控相关配置
nodeconfigs - 边缘节点相关配置
nodeutils - 边缘节点相关函数
serverconfigs - 网站服务相关配置
systemconfigs - 系统全局配置
reporterconfigs - 区域监控终端配置
userconfigs - 用户相关配置
dnsconfigs/ - 域名解析和NameServer相关配置
langs/ 多语言配置
messageconfigs/ - 消息通知相关配置
monitorconfigs/ - 监控相关配置
nodeconfigs/ - 边缘节点相关配置
nodeutils/ - 边缘节点相关函数
serverconfigs/ - 网站服务相关配置
systemconfigs/ - 系统全局配置
reporterconfigs/ - 区域监控终端配置
userconfigs/ - 用户相关配置
configutils/ - 配置公共函数等
iplibrary/ - IP库

View File

@@ -1,3 +1,31 @@
每次 `.proto` 文件有更新的时候,请运行 `build.sh` 重新生成相应的源代码。
# 脚本使用指南
如果文件名有更改,请清空 `pkg/rpc/pb/*.go` 文件,然后再次运行 `build.sh`
## 编译多语言相关源文件
~~~bash
./build-messages.sh
~~~
## 编译API相关源文件
在使用 `build.sh` 编译 `.proto` 文件之前,你需要确保已经为 `protoc` 安装了对应的插件:
~~~bash
# install protoc-gen-go plugin
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
# install protoc-gen-go-grpc plugin
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
~~~
之后每次 `.proto` 文件有更新的时候,请运行 `build.sh` 重新生成相应的Go源代码和`rpc.json`文件:
~~~bash
./build.sh
~~~
如果文件名有更改,请清空 `pkg/rpc/pb/*.go` 文件,然后再次运行 `build.sh`
## 生成RPC列表文件
运行:
~~~bash
./proto-json.sh
~~~
可以重新生成 `rpc.json` 文件。

View File

@@ -2,22 +2,27 @@
echo "starting ..."
function assert() {
RESULT=$?
if [ "${RESULT}" != "0" ]; then
exit
fi
}
#rm -f ../pkg/rpc/pb/*.pb.go
protoc --go_out=../pkg/rpc --proto_path=../pkg/rpc/protos ../pkg/rpc/protos/*.proto
assert
protoc --go_out=plugins=grpc:../pkg/rpc --proto_path=../pkg/rpc/protos ../pkg/rpc/protos/*.proto
RESULT=$?
if [ "${RESULT}" != "0" ]; then
exit
fi
protoc --go-grpc_out=../pkg/rpc --go-grpc_opt=require_unimplemented_servers=false --proto_path=../pkg/rpc/protos ../pkg/rpc/protos/*.proto
assert
protoc --go_out=plugins=grpc:../pkg/rpc --proto_path=../pkg/rpc/protos ../pkg/rpc/protos/models/*.proto
protoc --go_out=../pkg/rpc --proto_path=../pkg/rpc/protos ../pkg/rpc/protos/models/*.proto
RESULT=$?
if [ "${RESULT}" != "0" ]; then
exit
fi
assert
# generate rpc.json
./proto-json.sh --quiet
assert
echo "ok"

File diff suppressed because it is too large Load Diff

View File

@@ -285,9 +285,9 @@ func init() {
}
}
messageMapJSON, err := json.Marshal(filteredMessages)
if err != nil {
fmt.Println("[ERROR]marshal message map failed: " + err.Error())
messageMapJSON, jsonErr := json.Marshal(filteredMessages)
if jsonErr != nil {
fmt.Println("[ERROR]marshal message map failed: " + jsonErr.Error())
return
}
err = os.WriteFile(targetFile, []byte(`// generated by 'langs generate'
@@ -296,6 +296,17 @@ window.LANG_MESSAGES = `+string(messageMapJSON)+";\n"), 0666)
fmt.Println("[ERROR]write file '" + targetFile + "' failed: " + err.Error())
return
}
// base.js
if lang == "zh-cn" {
var baseJSFile = filepath.Dir(targetFile) + "/base.js"
err = os.WriteFile(baseJSFile, []byte(`// generated by 'langs generate'
window.LANG_MESSAGES_BASE = `+string(messageMapJSON)+";\n"), 0666)
if err != nil {
fmt.Println("[ERROR]write file '" + baseJSFile + "' failed: " + err.Error())
return
}
}
}
}
}

View File

@@ -7,7 +7,7 @@ import (
var whitespaceReg = regexp.MustCompile(`\s+`)
// 关键词匹配
// MatchKeyword 关键词匹配
func MatchKeyword(source, keyword string) bool {
if len(keyword) == 0 {
return false
@@ -16,7 +16,7 @@ func MatchKeyword(source, keyword string) bool {
pieces := whitespaceReg.Split(keyword, -1)
source = strings.ToLower(source)
for _, piece := range pieces {
if strings.Index(source, strings.ToLower(piece)) > -1 {
if strings.Contains(source, strings.ToLower(piece)) {
return true
}
}

View File

@@ -1,21 +1,30 @@
package configutils
import (
"crypto/sha1"
"crypto/sha256"
"encoding/base64"
"fmt"
stringutil "github.com/iwind/TeaGo/utils/string"
"net/url"
"regexp"
"strings"
"sync"
)
// VariableHolder 变量信息存储类型
type VariableHolder string
type VariableHolders = []interface{}
type VariableHolder struct {
Param string
Modifiers []string
}
type VariableHolders = []any
var variableMapping = map[string][]interface{}{} // source => [holder1, ...]
var variableLocker = sync.RWMutex{}
var regexpNamedVariable = regexp.MustCompile(`\${[@\w.-]+}`)
var variableMapping = map[string][]any{} // source => [holder1, ...]
var variableLocker = &sync.RWMutex{}
var regexpNamedVariable = regexp.MustCompile(`\${[@\w.|-]+}`)
var stringBuilderPool = sync.Pool{
New: func() interface{} {
New: func() any {
return &strings.Builder{}
},
}
@@ -46,7 +55,11 @@ func ParseVariables(source string, replacer func(varName string) (value string))
var h = holders[0]
holder, ok := h.(VariableHolder)
if ok {
return replacer(string(holder))
var value = replacer(holder.Param)
if holder.Modifiers != nil {
value = doStringModifiers(value, holder.Modifiers)
}
return replacer(value)
}
return source
}
@@ -58,7 +71,11 @@ func ParseVariables(source string, replacer func(varName string) (value string))
for _, h := range holders {
holder, ok := h.(VariableHolder)
if ok {
builder.WriteString(replacer(string(holder)))
var value = replacer(holder.Param)
if holder.Modifiers != nil {
value = doStringModifiers(value, holder.Modifiers)
}
builder.WriteString(value)
} else {
builder.Write(h.([]byte))
}
@@ -86,11 +103,15 @@ func ParseVariablesFromHolders(holders VariableHolders, replacer func(varName st
}
// replace
result := strings.Builder{}
var result = strings.Builder{}
for _, h := range holders {
holder, ok := h.(VariableHolder)
if ok {
result.WriteString(replacer(string(holder)))
var value = replacer(holder.Param)
if holder.Modifiers != nil {
value = doStringModifiers(value, holder.Modifiers)
}
result.WriteString(value)
} else {
result.Write(h.([]byte))
}
@@ -100,12 +121,24 @@ func ParseVariablesFromHolders(holders VariableHolders, replacer func(varName st
// ParseHolders 分析占位
func ParseHolders(source string) (holders VariableHolders) {
indexes := regexpNamedVariable.FindAllStringIndex(source, -1)
before := 0
var indexes = regexpNamedVariable.FindAllStringIndex(source, -1)
var before = 0
for _, loc := range indexes {
holders = append(holders, []byte(source[before:loc[0]]))
holder := source[loc[0]+2 : loc[1]-1]
holders = append(holders, VariableHolder(holder))
var holder = source[loc[0]+2 : loc[1]-1]
if strings.Contains(holder, "|") {
var holderPieces = strings.Split(holder, "|")
holders = append(holders, VariableHolder{
Param: holderPieces[0],
Modifiers: holderPieces[1:],
})
} else {
holders = append(holders, VariableHolder{
Param: holder,
Modifiers: nil,
})
}
before = loc[1]
}
if before < len(source) {
@@ -121,3 +154,36 @@ func HasVariables(source string) bool {
}
return regexpNamedVariable.MatchString(source)
}
// 执行变量后的修饰符
func doStringModifiers(value string, modifiers []string) string {
for _, modifier := range modifiers {
switch modifier {
case "urlEncode":
value = url.QueryEscape(value)
case "urlDecode":
value2, err := url.QueryUnescape(value)
if err == nil {
value = value2
}
case "base64Encode":
value = base64.StdEncoding.EncodeToString([]byte(value))
case "base64Decode":
value2, err := base64.StdEncoding.DecodeString(value)
if err == nil {
value = string(value2)
}
case "md5":
value = stringutil.Md5(value)
case "sha1":
value = fmt.Sprintf("%x", sha1.Sum([]byte(value)))
case "sha256":
value = fmt.Sprintf("%x", sha256.Sum256([]byte(value)))
case "toLowerCase":
value = strings.ToLower(value)
case "toUpperCase":
value = strings.ToUpper(value)
}
}
return value
}

View File

@@ -1,6 +1,8 @@
package configutils
package configutils_test
import (
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
"github.com/iwind/TeaGo/assert"
"github.com/iwind/TeaGo/types"
"runtime"
"strconv"
@@ -8,48 +10,128 @@ import (
)
func TestParseVariables(t *testing.T) {
var a = assert.NewAssertion(t)
{
v := ParseVariables("hello, ${name}, world", func(s string) string {
var v = configutils.ParseVariables("hello, ${name}, world", func(s string) string {
return "Lu"
})
t.Log(v)
a.IsTrue(v == "hello, Lu, world")
}
{
v := ParseVariables("hello, world", func(s string) string {
var v = configutils.ParseVariables("hello, world", func(s string) string {
return "Lu"
})
t.Log(v)
a.IsTrue(v == "hello, world")
}
{
v := ParseVariables("${name}", func(s string) string {
var v = configutils.ParseVariables("${name}", func(s string) string {
return "Lu"
})
t.Log(v)
a.IsTrue(v == "Lu")
}
}
func TestParseNoVariables(t *testing.T) {
for i := 0; i < 2; i++ {
v := ParseVariables("hello, world", func(s string) string {
var v = configutils.ParseVariables("hello, world", func(s string) string {
return "Lu"
})
t.Log(v)
}
}
func TestParseVariables_Modifier(t *testing.T) {
t.Log(configutils.ParseVariables("${url|urlEncode}", func(varName string) (value string) {
switch varName {
case "url":
return "/hello/world?a=1"
}
return "${" + varName + "}"
}))
t.Log(configutils.ParseVariables("${url|urlDecode}", func(varName string) (value string) {
switch varName {
case "url":
return "%2Fhello%2Fworld%3Fa%3D1"
}
return "${" + varName + "}"
}))
t.Log(configutils.ParseVariables("${url|urlDecode|urlEncode}", func(varName string) (value string) {
switch varName {
case "url":
return "%2Fhello%2Fworld%3Fa%3D1"
}
return "${" + varName + "}"
}))
t.Log(configutils.ParseVariables("${var|base64Encode}", func(varName string) (value string) {
switch varName {
case "var":
return "123456"
}
return "${" + varName + "}"
}))
t.Log(configutils.ParseVariables("${var|base64Encode|base64Decode}", func(varName string) (value string) {
switch varName {
case "var":
return "123456"
}
return "${" + varName + "}"
}))
t.Log(configutils.ParseVariables("${var|md5}", func(varName string) (value string) {
switch varName {
case "var":
return "123456"
}
return "${" + varName + "}"
}))
t.Log(configutils.ParseVariables("${var|sha1}", func(varName string) (value string) {
switch varName {
case "var":
return "123456"
}
return "${" + varName + "}"
}))
t.Log(configutils.ParseVariables("${var|sha256}", func(varName string) (value string) {
switch varName {
case "var":
return "123456"
}
return "${" + varName + "}"
}))
t.Log(configutils.ParseVariables("${var|toLowerCase}", func(varName string) (value string) {
switch varName {
case "var":
return "ABC"
}
return "${" + varName + "}"
}))
t.Log(configutils.ParseVariables("${var|toUpperCase}", func(varName string) (value string) {
switch varName {
case "var":
return "abc"
}
return "${" + varName + "}"
}))
}
func TestParseHolders(t *testing.T) {
var holders = ParseHolders("hello, ${name}, world")
var holders = configutils.ParseHolders("hello, ${name|urlencode}, world")
t.Log("===holders begin===")
for _, h := range holders {
t.Log(types.String(h))
}
t.Log("===holders end===")
t.Log("parse result:", ParseVariablesFromHolders(holders, func(s string) string {
t.Log("parse result:", configutils.ParseVariablesFromHolders(holders, func(s string) string {
return "[" + s + "]"
}))
}
func BenchmarkParseVariables(b *testing.B) {
_ = ParseVariables("hello, ${name}, ${age}, ${gender}, ${home}, world", func(s string) string {
_ = configutils.ParseVariables("hello, ${name}, ${age}, ${gender}, ${home}, world", func(s string) string {
return "Lu"
})
@@ -57,7 +139,7 @@ func BenchmarkParseVariables(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
_ = ParseVariables("hello, ${name}, ${age}, ${gender}, ${home}, world", func(s string) string {
_ = configutils.ParseVariables("hello, ${name}, ${age}, ${gender}, ${home}, world", func(s string) string {
return "Lu"
})
}
@@ -65,10 +147,10 @@ func BenchmarkParseVariables(b *testing.B) {
}
func BenchmarkParseVariablesFromHolders(b *testing.B) {
var holders = ParseHolders("hello, ${name}, ${age}, ${gender}, ${home}, world")
var holders = configutils.ParseHolders("hello, ${name}, ${age}, ${gender}, ${home}, world")
for i := 0; i < b.N; i++ {
_ = ParseVariablesFromHolders(holders, func(s string) string {
_ = configutils.ParseVariablesFromHolders(holders, func(s string) string {
return "Lu"
})
}
@@ -76,7 +158,7 @@ func BenchmarkParseVariablesFromHolders(b *testing.B) {
func BenchmarkParseVariablesUnique(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = ParseVariables("hello, ${name} "+strconv.Itoa(i), func(s string) string {
_ = configutils.ParseVariables("hello, ${name} "+strconv.Itoa(i%100_000), func(s string) string {
return "Lu"
})
}
@@ -86,7 +168,7 @@ func BenchmarkParseVariablesUnique_Single(b *testing.B) {
runtime.GOMAXPROCS(1)
for i := 0; i < b.N; i++ {
_ = ParseVariables("${name}", func(s string) string {
_ = configutils.ParseVariables("${name}", func(s string) string {
return "Lu"
})
}
@@ -94,7 +176,7 @@ func BenchmarkParseVariablesUnique_Single(b *testing.B) {
func BenchmarkParseNoVariables(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = ParseVariables("hello, world", func(s string) string {
_ = configutils.ParseVariables("hello, world", func(s string) string {
return "Lu"
})
}
@@ -102,7 +184,7 @@ func BenchmarkParseNoVariables(b *testing.B) {
func BenchmarkParseEmpty(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = ParseVariables("", func(s string) string {
_ = configutils.ParseVariables("", func(s string) string {
return "Lu"
})
}

View File

@@ -13,9 +13,9 @@ func (this *DetailedError) Code() string {
return this.code
}
func NewDetailedError(code string, error string) *DetailedError {
func NewDetailedError(code string, errString string) *DetailedError {
return &DetailedError{
msg: error,
msg: errString,
code: code,
}
}

View File

@@ -53,6 +53,18 @@ func LookupIP(ip string) *QueryResult {
return defaultLibrary.LookupIP(ip)
}
// LookupIPSummaries 查询一组IP对应的区域描述
func LookupIPSummaries(ipList []string) map[string]string /** ip => summary **/ {
var result = map[string]string{}
for _, ip := range ipList {
var region = LookupIP(ip)
if region != nil && region.IsOk() {
result[ip] = region.Summary()
}
}
return result
}
type IPLibrary struct {
reader *Reader
}

View File

@@ -86,6 +86,41 @@ func TestIPLibrary_LookupIP(t *testing.T) {
}
}
func TestIPLibrary_LookupIP_Summary(t *testing.T) {
var lib = iplibrary.NewIPLibrary()
err := lib.InitFromData(iplibrary.DefaultIPLibraryData(), "")
if err != nil {
t.Fatal(err)
}
for _, ip := range []string{
"66.249.66.69",
"123456", // wrong ip
"", // empty
} {
var result = lib.LookupIP(ip)
if result.IsOk() {
t.Log(ip, "=>", "region summary:", result.RegionSummary(), "summary:", result.Summary())
} else {
t.Log(ip, "=>", "region summary:", result.RegionSummary(), "summary:", result.Summary())
}
}
}
func TestIPLibrary_LookupIPSummaries(t *testing.T) {
_ = iplibrary.InitDefault()
t.Logf("%+v", iplibrary.LookupIPSummaries([]string{
"127.0.0.1",
"8.8.8.8",
"4.4.4.4",
"202.96.0.20",
"111.197.165.199",
"66.249.66.69",
"2222", // wrong ip
"2406:8c00:0:3401:133:18:168:70", // ipv6
}))
}
func BenchmarkIPLibrary_Lookup(b *testing.B) {
var lib = iplibrary.NewIPLibrary()
err := lib.InitFromData(iplibrary.DefaultIPLibraryData(), "")

View File

@@ -9,6 +9,7 @@ import (
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
"io"
"net"
"runtime"
"sort"
"strconv"
"strings"
@@ -20,8 +21,8 @@ type Reader struct {
regionMap map[string]*ipRegion // 缓存重复的区域用来节约内存
ipV4Items []*ipv4Item
ipV6Items []*ipv6Item
ipV4Items []ipv4Item
ipV6Items []ipv6Item
lastIPFrom uint64
lastCountryId uint16
@@ -36,6 +37,13 @@ func NewReader(reader io.Reader) (*Reader, error) {
var libReader = &Reader{
regionMap: map[string]*ipRegion{},
}
if runtime.NumCPU() >= 4 /** CPU数量较多的通常有着大内存 **/ {
libReader.ipV4Items = make([]ipv4Item, 0, 6_000_000)
} else {
libReader.ipV4Items = make([]ipv4Item, 0, 600_000)
}
err := libReader.load(reader)
if err != nil {
return nil, err
@@ -46,7 +54,7 @@ func NewReader(reader io.Reader) (*Reader, error) {
// 从Reader中加载数据
func (this *Reader) load(reader io.Reader) error {
var buf = make([]byte, 1024)
var metaLine = []byte{}
var metaLine []byte
var metaLineFound = false
var dataBuf = []byte{}
for {
@@ -162,11 +170,11 @@ func (this *Reader) Meta() *Meta {
return this.meta
}
func (this *Reader) IPv4Items() []*ipv4Item {
func (this *Reader) IPv4Items() []ipv4Item {
return this.ipV4Items
}
func (this *Reader) IPv6Items() []*ipv6Item {
func (this *Reader) IPv6Items() []ipv6Item {
return this.ipV6Items
}
@@ -296,13 +304,13 @@ func (this *Reader) parseLine(line []byte) error {
}
if version == "4" {
this.ipV4Items = append(this.ipV4Items, &ipv4Item{
this.ipV4Items = append(this.ipV4Items, ipv4Item{
IPFrom: uint32(ipFrom),
IPTo: uint32(ipTo),
Region: region,
})
} else {
this.ipV6Items = append(this.ipV6Items, &ipv6Item{
this.ipV6Items = append(this.ipV6Items, ipv6Item{
IPFrom: ipFrom,
IPTo: ipTo,
Region: region,

View File

@@ -5,7 +5,7 @@ package iplibrary
import (
"bytes"
"compress/gzip"
"errors"
"fmt"
"io"
"net"
"os"
@@ -13,7 +13,7 @@ import (
type FileReader struct {
rawReader *Reader
password string
//password string
}
func NewFileReader(path string, password string) (*FileReader, error) {
@@ -45,7 +45,7 @@ func NewFileDataReader(dataReader io.Reader, password string) (*FileReader, erro
gzReader, err := gzip.NewReader(dataReader)
if err != nil {
return nil, errors.New("create gzip reader failed: " + err.Error())
return nil, fmt.Errorf("create gzip reader failed: %w", err)
}
reader, err := NewReader(gzReader)

View File

@@ -183,13 +183,44 @@ func (this *QueryResult) Summary() string {
return strings.Join(pieces, " ")
}
func (this *QueryResult) RegionSummary() string {
if this.item == nil {
return ""
}
var pieces = []string{}
var countryName = this.CountryName()
var provinceName = this.ProvinceName()
var cityName = this.CityName()
var townName = this.TownName()
if len(countryName) > 0 {
pieces = append(pieces, countryName)
}
if len(provinceName) > 0 && !lists.ContainsString(pieces, provinceName) {
pieces = append(pieces, provinceName)
}
if len(cityName) > 0 && !lists.ContainsString(pieces, cityName) && !lists.ContainsString(pieces, strings.TrimSuffix(cityName, "市")) {
pieces = append(pieces, cityName)
}
if len(townName) > 0 && !lists.ContainsString(pieces, townName) && !lists.ContainsString(pieces, strings.TrimSuffix(townName, "县")) {
pieces = append(pieces, townName)
}
return strings.Join(pieces, " ")
}
func (this *QueryResult) realCountryId() uint16 {
if this.item != nil {
switch item := this.item.(type) {
case *ipv4Item:
return item.Region.CountryId
case ipv4Item:
return item.Region.CountryId
case *ipv6Item:
return item.Region.CountryId
case ipv6Item:
return item.Region.CountryId
}
}
@@ -201,8 +232,12 @@ func (this *QueryResult) realProvinceId() uint16 {
switch item := this.item.(type) {
case *ipv4Item:
return item.Region.ProvinceId
case ipv4Item:
return item.Region.ProvinceId
case *ipv6Item:
return item.Region.ProvinceId
case ipv6Item:
return item.Region.ProvinceId
}
}
@@ -214,8 +249,12 @@ func (this *QueryResult) realCityId() uint32 {
switch item := this.item.(type) {
case *ipv4Item:
return item.Region.CityId
case ipv4Item:
return item.Region.CityId
case *ipv6Item:
return item.Region.CityId
case ipv6Item:
return item.Region.CityId
}
}
@@ -227,8 +266,12 @@ func (this *QueryResult) realTownId() uint32 {
switch item := this.item.(type) {
case *ipv4Item:
return item.Region.TownId
case ipv4Item:
return item.Region.TownId
case *ipv6Item:
return item.Region.TownId
case ipv6Item:
return item.Region.TownId
}
}
@@ -240,8 +283,12 @@ func (this *QueryResult) realProviderId() uint16 {
switch item := this.item.(type) {
case *ipv4Item:
return item.Region.ProviderId
case ipv4Item:
return item.Region.ProviderId
case *ipv6Item:
return item.Region.ProviderId
case ipv6Item:
return item.Region.ProviderId
}
}

View File

@@ -4,6 +4,7 @@ package iplibrary
import (
"errors"
"fmt"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"io"
@@ -76,7 +77,7 @@ func (this *Updater) Init() error {
return nil
}
return errors.New("read ip library file failed '" + err.Error() + "'")
return fmt.Errorf("read ip library file failed '%w'", err)
}
defer func() {
_ = fp.Close()
@@ -167,7 +168,7 @@ func (this *Updater) Loop() error {
// write to file
fp, err := os.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
if err != nil {
return errors.New("create ip library file failed: " + err.Error())
return fmt.Errorf("create ip library file failed: %w", err)
}
var isOk = false
@@ -195,7 +196,7 @@ func (this *Updater) Loop() error {
err = this.loadFile(fp)
_ = fp.Close()
if err != nil {
return errors.New("load file failed: " + err.Error())
return fmt.Errorf("load file failed: %w", err)
}
isOk = true
@@ -215,7 +216,7 @@ func (this *Updater) loadFile(fp *os.File) error {
fileReader, err := NewFileDataReader(fp, "")
if err != nil {
return errors.New("load ip library from reader failed: " + err.Error())
return fmt.Errorf("load ip library from reader failed: %w", err)
}
var reader = fileReader.RawReader()
@@ -227,7 +228,7 @@ func (this *Updater) loadFile(fp *os.File) error {
func (this *Updater) createDefaultFile(sourcePath string, dir string) error {
sourceFp, err := os.Open(sourcePath)
if err != nil {
return errors.New("prepare to copy file to 'ip-library.db' failed: " + err.Error())
return fmt.Errorf("prepare to copy file to 'ip-library.db' failed: %w", err)
}
defer func() {
_ = sourceFp.Close()
@@ -235,14 +236,14 @@ func (this *Updater) createDefaultFile(sourcePath string, dir string) error {
dstFp, err := os.Create(dir + "/ip-library.db")
if err != nil {
return errors.New("prepare to copy file to 'ip-library.db' failed: " + err.Error())
return fmt.Errorf("prepare to copy file to 'ip-library.db' failed: %w", err)
}
defer func() {
_ = dstFp.Close()
}()
_, err = io.Copy(dstFp, sourceFp)
if err != nil {
return errors.New("copy file to 'ip-library.db' failed: " + err.Error())
return fmt.Errorf("copy file to 'ip-library.db' failed: %w", err)
}
return nil
}

View File

@@ -43,8 +43,10 @@ const (
AdminCommon_MenuSettingDNS langs.MessageCode = "admin_common@menu_setting_dns" // DNS设置
AdminCommon_MenuSettingHealthCheck langs.MessageCode = "admin_common@menu_setting_health_check" // 健康检查
AdminCommon_MenuSettingMetrics langs.MessageCode = "admin_common@menu_setting_metrics" // 统计指标
AdminCommon_MenuSettingSecurityPolicy langs.MessageCode = "admin_common@menu_setting_security_policy" // 网络安全
AdminCommon_MenuSettingWAFPolicy langs.MessageCode = "admin_common@menu_setting_waf_policy" // WAF策略
AdminCommon_MenuSettingWebP langs.MessageCode = "admin_common@menu_setting_webp" // WebP
AdminCommon_MenuSettingWebPPolicy langs.MessageCode = "admin_common@menu_setting_webp_policy" // WebP策略
AdminCommon_ServerError langs.MessageCode = "admin_common@server_error" // 服务器出了点小问题,请联系技术人员处理。
AdminCommon_System langs.MessageCode = "admin_common@system" // 系统
AdminDashboard_DiskUsageWarning langs.MessageCode = "admin_dashboard@disk_usage_warning" // 当前服务器磁盘空间不足,请立即扩充容量,文件路径:%s已使用%dG已使用比例%.2f%%,仅剩余空间:%.2f%%。<br/>如果是因为本机数据库数据过多,你可以:<a href="/settings/database/clean">[清理访问日志]</a> &nbsp; &nbsp; <a href="https://goedge.cn/docs/APINode/QA.md" target="_blank">[调整数据库binlog设置]</a>
@@ -94,6 +96,7 @@ const (
AdminMenu_NSRoutes langs.MessageCode = "admin_menu@ns_routes" // 线路管理
AdminMenu_NSSettings langs.MessageCode = "admin_menu@ns_settings" // 全局配置
AdminMenu_NSUserPlans langs.MessageCode = "admin_menu@ns_user_plans" // 用户套餐
AdminMenu_PlanList langs.MessageCode = "admin_menu@plan_list" // 套餐列表
AdminMenu_PlanUserPlans langs.MessageCode = "admin_menu@plan_user_plans" // 已购套餐
AdminMenu_Plans langs.MessageCode = "admin_menu@plans" // 套餐管理
AdminMenu_ServerAccessLogPolicies langs.MessageCode = "admin_menu@server_access_log_policies" // 日志策略
@@ -115,6 +118,8 @@ const (
AdminMenu_Settings langs.MessageCode = "admin_menu@settings" // 系统设置
AdminMenu_TicketCategory langs.MessageCode = "admin_menu@ticket_category" // 分类
AdminMenu_Tickets langs.MessageCode = "admin_menu@tickets" // 工单系统
AdminMenu_UserList langs.MessageCode = "admin_menu@user_list" // 用户列表
AdminMenu_UserScripts langs.MessageCode = "admin_menu@user_scripts" // 用户脚本
AdminMenu_UserSettings langs.MessageCode = "admin_menu@user_settings" // 用户设置
AdminMenu_Users langs.MessageCode = "admin_menu@users" // 平台用户
AdminProfile_LogUpdateProfile langs.MessageCode = "admin_profile@log_update_profile" // 修改个人资料
@@ -145,6 +150,7 @@ const (
AdminUpdate_LogIgnoreVersion langs.MessageCode = "admin_update@log_ignore_version" // 忽略升级版本 %s
AdminUpdate_LogResetIgnoreVersion langs.MessageCode = "admin_update@log_reset_ignore_version" // 重置忽略升级版本
AdminUpdate_LogUpdateCheckSettings langs.MessageCode = "admin_update@log_update_check_settings" // 修改检查更新设置
AdminUserUI_LogUpdateUISettings langs.MessageCode = "admin_user_ui@log_update_ui_settings" // 修改用户界面设置
APINode_LogCreateAPINode langs.MessageCode = "api_node@log_create_api_node" // 创建API节点 %d
APINode_LogDeleteAPINode langs.MessageCode = "api_node@log_delete_api_node" // 删除API节点 %d
APINode_LogUpdateAPINode langs.MessageCode = "api_node@log_update_api_node" // 修改API节点 %d
@@ -234,12 +240,14 @@ const (
MessageMediaInstance_LogCreateMessageMediaInstance langs.MessageCode = "message_media_instance@log_create_message_media_instance" // 创建消息媒介 %d
MessageMediaInstance_LogDeleteMessageMediaInstance langs.MessageCode = "message_media_instance@log_delete_message_media_instance" // 删除消息媒介 %d
MessageMediaInstance_LogUpdateMessageMediaInstance langs.MessageCode = "message_media_instance@log_update_message_media_instance" // 修改消息媒介 %d
MessageReciever_LogUpdateClusterMessageReceivers langs.MessageCode = "message_reciever@log_update_cluster_message_receivers" // 修改集群 %d 消息接收人
MessageReceiver_LogDeleteReceiver langs.MessageCode = "message_receiver@log_delete_receiver" // 删除接收人关联关系 %d
MessageReceiver_LogUpdateClusterMessageReceivers langs.MessageCode = "message_receiver@log_update_cluster_message_receivers" // 修改集群 %d 消息接收人
MessageRecipient_LogCreateMessageRecipient langs.MessageCode = "message_recipient@log_create_message_recipient" // 创建媒介接收人 %d
MessageRecipient_LogDeleteMessageRecipient langs.MessageCode = "message_recipient@log_delete_message_recipient" // 删除媒介接收人 %d
MessageRecipient_LogUpdateMessageRecipient langs.MessageCode = "message_recipient@log_update_message_recipient" // 修改媒介接收人 %d
MessageTask_LogCreateTestingMessageTask langs.MessageCode = "message_task@log_create_testing_message_task" // 创建媒介测试任务 %d
MessageTask_LogDeleteMessageTask langs.MessageCode = "message_task@log_delete_message_task" // 删除消息发送任务 %d
MessageTask_LogUpdateMessageTaskStatus langs.MessageCode = "message_task@log_update_message_task_status" // 修改消息任务 %d 状态为 %d
MetricChart_LogCreateMetricChart langs.MessageCode = "metric_chart@log_create_metric_chart" // 创建指标图表 %d
MetricChart_LogDeleteMetricChart langs.MessageCode = "metric_chart@log_delete_metric_chart" // 删除指标图表 %d
MetricChart_LogUpdateMetricChart langs.MessageCode = "metric_chart@log_update_metric_chart" // 修改指标图表 %d
@@ -261,6 +269,8 @@ const (
Node_LogUpNode langs.MessageCode = "node@log_up_node" // 手动上线节点 %d
Node_LogUpdateNode langs.MessageCode = "node@log_update_node" // 修改节点 %d 基本信息
Node_LogUpdateNodeInstallationStatus langs.MessageCode = "node@log_update_node_installation_status" // 修改节点安装状态 %d
Node_LogUpdateNodeOff langs.MessageCode = "node@log_update_node_off" // 停用节点 %d
Node_LogUpdateNodeOn langs.MessageCode = "node@log_update_node_on" // 启用节点 %d
Node_LogUpgradeNodeRemotely langs.MessageCode = "node@log_upgrade_node_remotely" // 远程升级节点 %d
Node_UngroupedLabel langs.MessageCode = "node@ungrouped_label" // 未分组
NodeAction_LogCopyNodeActionsToCluster langs.MessageCode = "node_action@log_copy_node_actions_to_cluster" // 复制节点 %d 调度动作到集群
@@ -288,6 +298,7 @@ const (
NodeClusterMenu_SettingNotification langs.MessageCode = "node_cluster_menu@setting_notification" // 消息通知
NodeClusterMenu_SettingPages langs.MessageCode = "node_cluster_menu@setting_pages" // 自定义页面
NodeClusterMenu_SettingSchedule langs.MessageCode = "node_cluster_menu@setting_schedule" // 智能调度
NodeClusterMenu_SettingSecurityPolicy langs.MessageCode = "node_cluster_menu@setting_security_policy" // 网络安全
NodeClusterMenu_SettingServiceGlobal langs.MessageCode = "node_cluster_menu@setting_service_global" // 网站设置
NodeClusterMenu_SettingSystemService langs.MessageCode = "node_cluster_menu@setting_system_service" // 系统服务
NodeClusterMenu_SettingThresholds langs.MessageCode = "node_cluster_menu@setting_thresholds" // 阈值设置
@@ -295,7 +306,7 @@ const (
NodeClusterMenu_SettingUAM langs.MessageCode = "node_cluster_menu@setting_uam" // 5秒盾
NodeClusterMenu_SettingWAFActions langs.MessageCode = "node_cluster_menu@setting_waf_actions" // WAF动作
NodeClusterMenu_SettingWAFPolicy langs.MessageCode = "node_cluster_menu@setting_waf_policy" // WAF策略
NodeClusterMenu_SettingWebP langs.MessageCode = "node_cluster_menu@setting_webp" // WebP
NodeClusterMenu_SettingWebP langs.MessageCode = "node_cluster_menu@setting_webp" // WebP策略
NodeClusterMenu_TabClusterDashboard langs.MessageCode = "node_cluster_menu@tab_cluster_dashboard" // 集群看板
NodeClusterMenu_TabClusterDelete langs.MessageCode = "node_cluster_menu@tab_cluster_delete" // 删除集群
NodeClusterMenu_TabClusterNodes langs.MessageCode = "node_cluster_menu@tab_cluster_nodes" // 节点列表
@@ -440,6 +451,11 @@ const (
Plan_LogDeletePlan langs.MessageCode = "plan@log_delete_plan" // 删除套餐 %d
Plan_LogSortPlans langs.MessageCode = "plan@log_sort_plans" // 对套餐进行排序
Plan_LogUpdatePlan langs.MessageCode = "plan@log_update_plan" // 修改套餐 %d
Post_LogCreatePost langs.MessageCode = "post@log_create_post" // 创建文章 %d
Post_LogDeletePost langs.MessageCode = "post@log_delete_post" // 删除文章 %d
Post_LogPublishPost langs.MessageCode = "post@log_publish_post" // 发布文章 %d
Post_LogUpdatePost langs.MessageCode = "post@log_update_post" // 修改文章 %d
Post_ProductGlobal langs.MessageCode = "post@product_global" // 全站
RegionCity_LogAddRegionCityCode langs.MessageCode = "region_city@log_add_region_city_code" // 添加城市/市 %d 别名 %s
RegionCity_LogUpdateRegionCityCustom langs.MessageCode = "region_city@log_update_region_city_custom" // 定制城市 %d 信息
RegionCountry_LogAddRegionCountryCode langs.MessageCode = "region_country@log_add_region_country_code" // 添加国家/地区 %d 别名 %s
@@ -477,6 +493,7 @@ const (
Server_LogCopyServerConfigs langs.MessageCode = "server@log_copy_server_configs" // 从网站 %d 中同步配置 %s
Server_LogCreateServer langs.MessageCode = "server@log_create_server" // 创建网站 %d
Server_LogDeleteServer langs.MessageCode = "server@log_delete_server" // 删除网站 %d
Server_LogDeleteServers langs.MessageCode = "server@log_delete_servers" // 批量删除网站
Server_LogDisableServer langs.MessageCode = "server@log_disable_server" // 停用网站 %d
Server_LogEnableServer langs.MessageCode = "server@log_enable_server" // 启用网站 %d
Server_LogSubmitAuditingServer langs.MessageCode = "server@log_submit_auditing_server" // 提交网站 %d 域名审核
@@ -484,7 +501,7 @@ const (
Server_LogUpdateServerBasic langs.MessageCode = "server@log_update_server_basic" // 修改网站 %d 基本信息
Server_LogUpdateServerGroups langs.MessageCode = "server@log_update_server_groups" // 修改网站 %d 所属分组
Server_LogUpdateServerIsOn langs.MessageCode = "server@log_update_server_is_on" // 修改网站 %d 启用状态
Server_LogUpdateServerName langs.MessageCode = "server@log_update_server_name" // 修改网站名称
Server_LogUpdateServerName langs.MessageCode = "server@log_update_server_name" // 修改网站 %d 名称
Server_MenuAccesslogHistory langs.MessageCode = "server@menu_accesslog_history" // 历史
Server_MenuAccesslogRealtime langs.MessageCode = "server@menu_accesslog_realtime" // 实时
Server_MenuAccesslogToday langs.MessageCode = "server@menu_accesslog_today" // 今天
@@ -507,6 +524,7 @@ const (
Server_MenuSettingHTTPProxy langs.MessageCode = "server@menu_setting_http_proxy" // HTTP代理
Server_MenuSettingHTTPS langs.MessageCode = "server@menu_setting_https" // HTTPS
Server_MenuSettingLocations langs.MessageCode = "server@menu_setting_locations" // 路由规则
Server_MenuSettingMultimedia langs.MessageCode = "server@menu_setting_multimedia" // 音视频设置
Server_MenuSettingOptimization langs.MessageCode = "server@menu_setting_optimization" // 页面优化
Server_MenuSettingOrigins langs.MessageCode = "server@menu_setting_origins" // 源站
Server_MenuSettingOthers langs.MessageCode = "server@menu_setting_others" // 其他设置
@@ -572,6 +590,7 @@ const (
ServerGroup_LogDeleteServerGroup langs.MessageCode = "server_group@log_delete_server_group" // 删除网站分组 %d
ServerGroup_LogSortServerGroups langs.MessageCode = "server_group@log_sort_server_groups" // 修改网站分组排序
ServerGroup_LogUpdateServerGroup langs.MessageCode = "server_group@log_update_server_group" // 修改网站分组 %d
ServerHls_LogUpdateHls langs.MessageCode = "server_hls@log_update_hls" // 修改Web %d 的HLS设置
ServerHTTP3_LogUpdateClusterHTTP3Policy langs.MessageCode = "server_http3@log_update_cluster_http3_policy" // 修改集群 %d 的HTTP3策略设置
ServerHTTP_LogUpdateHTTPSettings langs.MessageCode = "server_http@log_update_http_settings" // 修改网站 %d 的HTTP设置
ServerHTTPHeader_LogCreateDeletingHeader langs.MessageCode = "server_http_header@log_create_deleting_header" // 添加删除的报头 HeaderPolicyId: %d, Name: %s
@@ -610,6 +629,8 @@ const (
ServerUAM_LogUpdateUAMSettings langs.MessageCode = "server_uam@log_update_uam_settings" // 修改Web %d 全站防护模式
ServerUDP_LogUpdateUDPSettings langs.MessageCode = "server_udp@log_update_udp_settings" // 修改网站 %d UDP设置
ServerUserAgent_LogUpdateUserAgents langs.MessageCode = "server_user_agent@log_update_user_agents" // 修改Web %d User-Agent设置
ServerUserScript_LogPassUserScript langs.MessageCode = "server_user_script@log_pass_user_script" // 通过用户脚本 %d
ServerUserScript_LogRejectUserScript langs.MessageCode = "server_user_script@log_reject_user_script" // 驳回用户脚本 %d
ServerWAF_LogUpdateWAFSettings langs.MessageCode = "server_waf@log_update_waf_settings" // 修改Web %d 的WAF设置
ServerWebP_LogUpdateClusterWebPPolicy langs.MessageCode = "server_webp@log_update_cluster_webp_policy" // 修改集群 %d 的WebP设置
ServerWebsocket_LogUpdateWebsocketSettings langs.MessageCode = "server_websocket@log_update_websocket_settings" // 修改Web %d 的Websocket设置
@@ -646,6 +667,7 @@ const (
User_LogUpdateUserPricePeriod langs.MessageCode = "user@log_update_user_price_period" // 修改计费周期为 %s
User_LogUpdateUserPriceType langs.MessageCode = "user@log_update_user_price_type" // 修改计费类型为 %s
User_LogUpdateUserProfile langs.MessageCode = "user@log_update_user_profile" // 修改个人资料
User_LogUpdateUserSmsSettings langs.MessageCode = "user@log_update_user_sms_settings" // 修改用户短信设置
User_LogVerifyUser langs.MessageCode = "user@log_verify_user" // 审核用户:%d 结果:%s
UserAccessKey_LogCreateUserAccessKey langs.MessageCode = "user_access_key@log_create_user_access_key" // 创建AccessKey %d
UserAccessKey_LogDeleteUserAccessKey langs.MessageCode = "user_access_key@log_delete_user_access_key" // 删除AccessKey %d

View File

@@ -4,6 +4,7 @@ package langs
import (
"errors"
"fmt"
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
"strings"
)
@@ -51,7 +52,7 @@ func (this *Lang) Compile() error {
for code, oldMessage := range this.messageMap {
message, err := this.get(code, 0)
if err != nil {
return errors.New("compile '" + string(code) + "': '" + oldMessage + "' failed: " + err.Error())
return fmt.Errorf("compile '%s': '%s' failed: %w", string(code), oldMessage, err)
}
this.messageMap[code] = message
}

View File

@@ -90,7 +90,12 @@ func (this *Manager) GetMessage(langCode string, messageCode MessageCode, args .
if lang.code != this.defaultLangCode {
var defaultLang = this.langMap[this.defaultLangCode]
if defaultLang != nil {
return defaultLang.Get(messageCode)
message = defaultLang.Get(messageCode)
if len(args) == 0 {
return message
}
return fmt.Sprintf(message, args...)
}
}

View File

@@ -0,0 +1,734 @@
// generated by run 'langs generate'
package messages
import (
"github.com/TeaOSLab/EdgeCommon/pkg/langs"
)
func init() {
langs.Load("en-us", map[langs.MessageCode]string{
"acme_provider_account@log_create_acme_provider_account": "",
"acme_provider_account@log_delete_acme_provider_account": "",
"acme_provider_account@log_update_acme_provider_account": "",
"acme_task@log_create_acme_task": "",
"acme_task@log_delete_acme_task": "",
"acme_task@log_run_acme_task": "",
"acme_task@log_update_acme_task": "",
"acme_user@log_create_acme_user": "",
"acme_user@log_delete_acme_user": "",
"acme_user@log_update_acme_user": "",
"ad_network@log_create_ad_network": "",
"ad_network@log_delete_ad_network": "",
"ad_network@log_update_ad_network": "",
"ad_package@log_create_ad_package": "",
"ad_package@log_delete_ad_package": "",
"ad_package@log_update_ad_package": "",
"ad_package_instance@log_create_ad_package_instance": "",
"ad_package_instance@log_delete_ad_package_instance": "",
"ad_package_instance@log_update_ad_package_instance": "",
"ad_package_period@log_create_ad_package_period": "",
"ad_package_period@log_delete_ad_package_period": "",
"ad_package_period@log_update_ad_package_period": "",
"ad_package_price@log_create_ad_package_price": "",
"ad_package_price@log_update_ad_package_price": "",
"admin@log_create_admin": "",
"admin@log_delete_admin": "",
"admin@log_update_admin": "",
"admin_common@canceled": "Canceled",
"admin_common@log_system_error": "system error: %s",
"admin_common@menu_setting_basic": "Basic Settings",
"admin_common@menu_setting_cache": "Cache Settings",
"admin_common@menu_setting_cache_policy": "Cache Policy",
"admin_common@menu_setting_ddos_protection": "DDoS Protection",
"admin_common@menu_setting_dns": "DNS Settings",
"admin_common@menu_setting_health_check": "Health Check",
"admin_common@menu_setting_metrics": "Metrics",
"admin_common@menu_setting_security_policy": "Networking Security",
"admin_common@menu_setting_waf_policy": "WAF Policy",
"admin_common@menu_setting_webp": "WebP",
"admin_common@menu_setting_webp_policy": "WebP Policy",
"admin_common@server_error": "There is a internal error, please report to administrator.",
"admin_common@system": "System",
"admin_dashboard@disk_usage_warning": "当前服务器磁盘空间不足,请立即扩充容量,文件路径:%s已使用%dG已使用比例%.2f%%,仅剩余空间:%.2f%%。<br/>如果是因为本机数据库数据过多,你可以:<a href=\"/settings/database/clean\">[清理访问日志]</a> &nbsp; &nbsp; <a href=\"https://goedge.cn/docs/APINode/QA.md\" target=\"_blank\">[调整数据库binlog设置]</a>",
"admin_dashboard@ui_dns": "DNS",
"admin_dashboard@ui_events": "Events",
"admin_dashboard@ui_overview": "Overview",
"admin_dashboard@ui_user": "Users",
"admin_dashboard@ui_waf": "WAF",
"admin_login@log_failed": "",
"admin_login@log_otp_verified_success": "",
"admin_login@log_success": "",
"admin_login@log_system_error": "",
"admin_login@log_update_login": "",
"admin_menu@admin_recipients": "Notification Medias",
"admin_menu@admins": "System Users",
"admin_menu@dashboard": "Dashboard",
"admin_menu@dns": "DNS Service",
"admin_menu@dns_clusters": "Clusters",
"admin_menu@dns_issues": "Issues",
"admin_menu@dns_providers": "DNS Providers",
"admin_menu@finance": "Finance",
"admin_menu@finance_accounts": "Accounts",
"admin_menu@finance_bills": "Bills",
"admin_menu@finance_fee": "Fee Settings",
"admin_menu@finance_income": "Reports",
"admin_menu@finance_logs": "Logs",
"admin_menu@finance_orders": "Orders",
"admin_menu@finance_packages": "Traffic Packages",
"admin_menu@logs": "Audit Logs",
"admin_menu@node_anti_ddos_products": "Anti-DDoS Product",
"admin_menu@node_clusters": "Clusters",
"admin_menu@node_distributed_monitors": "Distributed Monitors",
"admin_menu@node_ip_list": "Node IPs",
"admin_menu@node_logs": "Node Logs",
"admin_menu@node_regions": "Regions",
"admin_menu@node_ssh_grants": "SSH Grants",
"admin_menu@nodes": "Edge Nodes",
"admin_menu@ns": "Edge DNS",
"admin_menu@ns_access_logs": "Access Logs",
"admin_menu@ns_clusters": "Clusters",
"admin_menu@ns_domain_batch_operations": "Batch",
"admin_menu@ns_domain_groups": "Domain Groups",
"admin_menu@ns_domains": "Domains",
"admin_menu@ns_node_logs": "Node Logs",
"admin_menu@ns_plans": "Plans",
"admin_menu@ns_resolve_test": "Testing",
"admin_menu@ns_routes": "Routes",
"admin_menu@ns_settings": "Settings",
"admin_menu@ns_user_plans": "User Plans",
"admin_menu@plan_list": "Plans",
"admin_menu@plan_user_plans": "User Plans",
"admin_menu@plans": "Plans",
"admin_menu@server_access_log_policies": "Access Log Policies",
"admin_menu@server_access_logs": "Access Logs",
"admin_menu@server_cache_policies": "Cache Policies",
"admin_menu@server_certs": "Certificates",
"admin_menu@server_global_settings": "Global Settings",
"admin_menu@server_groups": "Site Groups",
"admin_menu@server_ip_lists": "IP List",
"admin_menu@server_metrics": "Metrics",
"admin_menu@server_purge_fetch_caches": "Cache Management",
"admin_menu@server_scripts": "Script Libraries",
"admin_menu@server_traffic_stats": "Traffic Statistics",
"admin_menu@server_waf_policies": "WAF Policies",
"admin_menu@servers": "Sites",
"admin_menu@setting_advanced_settings": "Advanced Settings",
"admin_menu@setting_authority": "Commercial Authority",
"admin_menu@setting_basic_settings": "Basic Settings",
"admin_menu@settings": "Settings",
"admin_menu@ticket_category": "Categories",
"admin_menu@tickets": "Tickets",
"admin_menu@user_list": "Users",
"admin_menu@user_scripts": "User Scripts",
"admin_menu@user_settings": "User Settings",
"admin_menu@users": "Users",
"admin_profile@log_update_profile": "",
"admin_security@log_update_security_settings": "",
"admin_server@log_update_server_http_settings": "",
"admin_server@log_update_server_https_settings": "",
"admin_setting@tab_access_log_databases": "Log Databases",
"admin_setting@tab_admin_security_settings": "Security Settings",
"admin_setting@tab_admin_server": "Admin Server Settings",
"admin_setting@tab_admin_ui": "Admin System UI",
"admin_setting@tab_api_nodes": "API Nodes",
"admin_setting@tab_authority": "Commercial Authority",
"admin_setting@tab_backup": "Backup",
"admin_setting@tab_client_browsers": "Browser Management",
"admin_setting@tab_client_operation_systems": "OS Management",
"admin_setting@tab_database": "Database",
"admin_setting@tab_ip_library": "IP Library",
"admin_setting@tab_login": "My Login",
"admin_setting@tab_monitor_nodes": "Monitor Nodes",
"admin_setting@tab_profile": "My Profile",
"admin_setting@tab_transfer": "Transfer",
"admin_setting@tab_updates": "Updates",
"admin_setting@tab_user_nodes": "User Nodes",
"admin_setting@tab_user_ui": "User System UI",
"admin_ui@default_product_name": "",
"admin_ui@default_system_name": "",
"admin_ui@log_update_ui_settings": "",
"admin_update@log_ignore_version": "",
"admin_update@log_reset_ignore_version": "",
"admin_update@log_update_check_settings": "",
"admin_user_ui@log_update_ui_settings": "",
"api_node@log_create_api_node": "",
"api_node@log_delete_api_node": "",
"api_node@log_update_api_node": "",
"client_browser@log_create_browser": "",
"client_browser@log_update_client_browser": "",
"client_system@log_create_system": "",
"client_system@log_update_client_system": "",
"database@log_delete_table": "",
"database@log_truncate_table": "",
"database@log_update_api_node_database_config": "",
"database@log_update_clean_days": "",
"db_node@log_create_db_node": "",
"db_node@log_delete_db_node": "",
"db_node@log_delete_table": "",
"db_node@log_truncate_table": "",
"db_node@log_update_db_node": "",
"db_node@tab_nodes": "",
"ddos_protection@log_update_cluster_ddos_protection": "",
"ddos_protection@log_update_node_ddos_protection": "",
"dns@log_create_domain": "",
"dns@log_delete_domain": "",
"dns@log_recover_domain": "",
"dns@log_sync_cluster": "",
"dns@log_sync_domain": "",
"dns@log_update_cluster_dns": "",
"dns@log_update_domain": "",
"dns@log_update_node_dns": "",
"dns_provider@log_create_dns_provider": "",
"dns_provider@log_delete_dns_provider": "",
"dns_provider@log_update_dns_provider": "",
"dns_task@log_delete_all_dns_tasks": "",
"dns_task@log_delete_dns_task": "",
"finance@log_bill_generate_manually": "",
"finance@log_update_user_order_config": "",
"finance_fee@log_update_fee_setting": "",
"http_access_log_policy@log_create_http_access_log_policy": "",
"http_access_log_policy@log_delete_http_access_log_policy": "",
"http_access_log_policy@log_test_http_access_log_policy": "",
"http_access_log_policy@log_update_http_access_log_policy": "",
"http_auth_policy@log_create_http_auth_policy": "",
"http_auth_policy@log_update_http_auth_policy": "",
"http_cache_task@log_create_http_cache_task_fetch": "",
"http_cache_task@log_create_http_cache_task_purge": "",
"http_cache_task@log_delete_http_cache_task": "",
"http_cache_task@log_reset_http_cache_task": "",
"http_fastcgi@log_create_http_fastcgi": "",
"http_fastcgi@log_update_http_fastcgi": "",
"http_location@log_create_http_location": "",
"http_location@log_update_http_location": "",
"http_rewrite_rule@log_create_rewrite_rule": "",
"http_rewrite_rule@log_delete_rewrite_rule": "",
"http_rewrite_rule@log_sort_rewrite_rules": "",
"http_rewrite_rule@log_update_rewrite_rule": "",
"ip_item@log_create_ip_item": "",
"ip_item@log_delete_ip_item": "",
"ip_item@log_read_all_ip_items": "",
"ip_item@log_update_ip_item": "",
"ip_library@log_finish_ip_library": "",
"ip_library_artifact@log_cancel_ip_library_artifact": "",
"ip_library_artifact@log_delete_ip_library_artifact": "",
"ip_library_artifact@log_use_ip_library_artifact": "",
"ip_library_file@log_delete_ip_library_file": "",
"ip_library_file@log_generate_ip_library_file": "",
"ip_library_file@log_upload_ip_library_file": "",
"ip_list@log_bind_ip_list_waf_policy": "",
"ip_list@log_create_ip_items_batch": "",
"ip_list@log_create_ip_list": "",
"ip_list@log_delete_ip_batch": "",
"ip_list@log_delete_ip_list": "",
"ip_list@log_export_ip_list": "",
"ip_list@log_import_ip_list": "",
"ip_list@log_unbind_ip_list_waf_policy": "",
"ip_list@log_update_ip_list": "",
"level@error": "",
"level@info": "",
"level@warn": "",
"log@log_clean_all_logs": "",
"log@log_clean_logs_days_before": "",
"log@log_delete_log": "",
"log@log_update_settings": "",
"log@tag_access_log": "",
"log@tag_listener": "",
"log@tag_script": "",
"log@tag_waf": "",
"message@log_read_all": "",
"message@log_read_messages": "",
"message_media_instance@log_create_message_media_instance": "",
"message_media_instance@log_delete_message_media_instance": "",
"message_media_instance@log_update_message_media_instance": "",
"message_receiver@log_delete_receiver": "",
"message_receiver@log_update_cluster_message_receivers": "",
"message_recipient@log_create_message_recipient": "",
"message_recipient@log_delete_message_recipient": "",
"message_recipient@log_update_message_recipient": "",
"message_task@log_create_testing_message_task": "",
"message_task@log_delete_message_task": "",
"message_task@log_update_message_task_status": "",
"metric_chart@log_create_metric_chart": "",
"metric_chart@log_delete_metric_chart": "",
"metric_chart@log_update_metric_chart": "",
"metric_item@log_add_metric_item_to_cluster": "",
"metric_item@log_create_metric_item": "",
"metric_item@log_delete_metric_item": "",
"metric_item@log_delete_metric_item_from_cluster": "",
"metric_item@log_update_metric_item": "",
"monitor_node@log_create_monitor_node": "",
"monitor_node@log_delete_monitor_node": "",
"monitor_node@log_update_monitor_node": "",
"node@log_create_node": "",
"node@log_create_node_batch": "",
"node@log_delete_node_from_cluster": "",
"node@log_install_node": "",
"node@log_install_node_remotely": "",
"node@log_start_node_remotely": "",
"node@log_stop_node_remotely": "",
"node@log_up_node": "",
"node@log_update_node": "",
"node@log_update_node_installation_status": "",
"node@log_update_node_off": "",
"node@log_update_node_on": "",
"node@log_upgrade_node_remotely": "",
"node@ungrouped_label": "",
"node_action@log_copy_node_actions_to_cluster": "",
"node_action@log_copy_node_actions_to_group": "",
"node_action@log_create_node_action": "",
"node_action@log_delete_node_action": "",
"node_action@log_sort_node_actions": "",
"node_action@log_update_node_action": "",
"node_cache@log_update_node_cache_settings": "",
"node_cluster@log_create_cluster": "",
"node_cluster@log_delete_cluster": "",
"node_cluster@log_pin_cluster": "",
"node_cluster@log_run_cluster_health_check": "",
"node_cluster@log_unpin_cluster": "",
"node_cluster@log_update_cluster_basic_settings": "",
"node_cluster@log_update_cluster_health_check": "",
"node_cluster_menu@setting_basic": "Basic Settings",
"node_cluster_menu@setting_cache_policy": "Cache Policy",
"node_cluster_menu@setting_cc": "CC Policy",
"node_cluster_menu@setting_ddos_protection": "DDoS Protection",
"node_cluster_menu@setting_dns": "DNS Settings",
"node_cluster_menu@setting_health_check": "Health Check",
"node_cluster_menu@setting_http3": "HTTP/3",
"node_cluster_menu@setting_metrics": "Metrics",
"node_cluster_menu@setting_notification": "Notifications",
"node_cluster_menu@setting_pages": "Pages",
"node_cluster_menu@setting_schedule": "Scheduling",
"node_cluster_menu@setting_security_policy": "Networking Security",
"node_cluster_menu@setting_service_global": "Site Settings",
"node_cluster_menu@setting_system_service": "System Service",
"node_cluster_menu@setting_thresholds": "Thresholds",
"node_cluster_menu@setting_toa": "TOA",
"node_cluster_menu@setting_uam": "UAM Policy",
"node_cluster_menu@setting_waf_actions": "WAF Actions",
"node_cluster_menu@setting_waf_policy": "WAF Policy",
"node_cluster_menu@setting_webp": "WebP Policy",
"node_cluster_menu@tab_cluster_dashboard": "Dashboard",
"node_cluster_menu@tab_cluster_delete": "Delete",
"node_cluster_menu@tab_cluster_nodes": "Nodes",
"node_cluster_menu@tab_cluster_settings": "Settings",
"node_dns@log_update_node_dns": "",
"node_grant@log_create_ssh_grant": "",
"node_grant@log_delete_ssh_grant": "",
"node_grant@log_update_ssh_grant": "",
"node_grant@method_private_key": "",
"node_grant@method_user_password": "",
"node_group@log_create_node_group": "",
"node_group@log_delete_node_group": "",
"node_group@log_sort_node_groups": "",
"node_group@log_update_node_group": "",
"node_ip_address@log_delete_node_ip_address": "",
"node_ip_address@log_down_node_ip_address": "",
"node_ip_address@log_restore_node_ip_address": "",
"node_ip_address@log_up_node_ip_address": "",
"node_log@log_delete_node_logs_batch": "",
"node_log@log_fix_all_logs": "",
"node_log@log_fix_node_logs": "",
"node_menu@create_multiple_nodes": "Create Batch",
"node_menu@create_single_node": "Create",
"node_menu@install_auto_register": "Auto-Register",
"node_menu@install_manually": "Manually",
"node_menu@install_remote": "Install Remotely(%d)",
"node_menu@install_remote_upgrade": "Upgrade Remotely(%d)",
"node_menu@setting_basic": "Basic Settings",
"node_menu@setting_cache": "Cache Settings",
"node_menu@setting_ddos_protection": "DDoS Protection",
"node_menu@setting_dns": "DNS Settings",
"node_menu@setting_schedule": "Scheduling",
"node_menu@setting_ssh": "SSH",
"node_menu@setting_system": "System Settings",
"node_menu@setting_thresholds": "Thresholds",
"node_price_item@log_create_node_price_item_bandwidth": "",
"node_price_item@log_create_node_price_item_traffic": "",
"node_price_item@log_delete_node_price_item": "",
"node_price_item@log_update_node_price_item_bandwidth": "",
"node_price_item@log_update_node_price_item_traffic": "",
"node_region@log_create_node_region": "",
"node_region@log_delete_node_region": "",
"node_region@log_move_node_between_regions": "",
"node_region@log_sort_node_regions": "",
"node_region@log_update_node_region": "",
"node_region_price@log_update_node_region_price": "",
"node_schedule@log_reset_node_action_status": "",
"node_schedule@log_update_node_schedule_basic": "",
"node_ssh@log_update_node_ssh": "",
"node_system@log_update_node_system_settings": "",
"node_systemd@log_update_cluster_systemd_settings": "",
"node_task@log_delete_all_node_tasks": "",
"node_task@log_delete_node_task": "",
"node_task@log_delete_node_tasks_batch": "",
"node_threshold@log_create_node_threshold": "",
"node_threshold@log_delete_node_threshold": "",
"node_threshold@log_update_node_threshold": "",
"node_toa@log_update_cluster_toa": "",
"ns@log_create_ns_domains_batch": "",
"ns@log_create_ns_records_batch": "",
"ns@log_delete_ns_domains_batch": "",
"ns@log_delete_ns_records_batch": "",
"ns@log_disable_ns_records_batch": "",
"ns@log_enable_ns_records_batch": "",
"ns@log_import_records_batch": "",
"ns@log_update_ns_records_batch": "",
"ns@log_update_ns_user_config": "",
"ns@setting_access_logs": "",
"ns@setting_user": "",
"ns_cluster@log_create_ns_cluster": "",
"ns_cluster@log_delete_ns_cluster": "",
"ns_cluster@log_update_ns_cluster_settings_access_log": "",
"ns_cluster@log_update_ns_cluster_settings_answer": "",
"ns_cluster@log_update_ns_cluster_settings_basic": "",
"ns_cluster@log_update_ns_cluster_settings_ddos_protection": "",
"ns_cluster@log_update_ns_cluster_settings_doh": "",
"ns_cluster@log_update_ns_cluster_settings_recursion": "",
"ns_cluster@log_update_ns_cluster_settings_soa": "",
"ns_cluster@log_update_ns_cluster_settings_tcp": "",
"ns_cluster@log_update_ns_cluster_settings_tls": "",
"ns_cluster@log_update_ns_cluster_settings_udp": "",
"ns_cluster@menu_access_logs": "",
"ns_cluster@menu_answer_setting": "",
"ns_cluster@menu_basic": "",
"ns_cluster@menu_ddos_protection": "",
"ns_cluster@menu_dns_recursion": "",
"ns_cluster@menu_doh": "",
"ns_cluster@menu_soa": "",
"ns_cluster@menu_tcp": "",
"ns_cluster@menu_tls": "",
"ns_cluster@menu_udp": "",
"ns_cluster@tab_delete": "",
"ns_cluster@tab_nodes": "",
"ns_cluster@tab_setting": "",
"ns_domain@log_create_ns_domain": "",
"ns_domain@log_create_ns_domains_batch": "",
"ns_domain@log_delete_ns_domain": "",
"ns_domain@log_update_ns_domain": "",
"ns_domain@log_update_ns_domain_health_check": "",
"ns_domain@log_update_ns_domain_status": "",
"ns_domain@log_update_ns_domain_tsig": "",
"ns_domain@log_validate_ns_domains": "",
"ns_domain_group@log_create_ns_domain_group": "",
"ns_domain_group@log_delete_ns_domain_group": "",
"ns_domain_group@log_update_ns_domain_group": "",
"ns_key@log_create_ns_key": "",
"ns_key@log_delete_ns_key": "",
"ns_key@log_update_ns_key": "",
"ns_node@log_create_ns_node": "",
"ns_node@log_delete_ns_node": "",
"ns_node@log_install_ns_node_remotely": "",
"ns_node@log_start_ns_node_remotely": "",
"ns_node@log_stop_ns_node_remotely": "",
"ns_node@log_update_ns_node": "",
"ns_node@log_update_ns_node_installation_status": "",
"ns_node_ssh@log_update_ns_node_ssh": "",
"ns_plan@log_create_ns_plan": "",
"ns_plan@log_delete_ns_plan": "",
"ns_plan@log_sort_ns_plans": "",
"ns_plan@log_update_ns_plan": "",
"ns_record@log_create_ns_record": "",
"ns_record@log_create_ns_records_batch": "",
"ns_record@log_delete_ns_record": "",
"ns_record@log_up_ns_record": "",
"ns_record@log_update_ns_record": "",
"ns_record@log_update_ns_record_health_check": "",
"ns_route@log_create_ns_route": "",
"ns_route@log_delete_ns_route": "",
"ns_route@log_sort_ns_routes": "",
"ns_route@log_update_ns_route": "",
"ns_route_category@log_create_ns_route_category": "",
"ns_route_category@log_delete_ns_route_category": "",
"ns_route_category@log_sort_ns_route_categories": "",
"ns_route_category@log_update_ns_route_category": "",
"ns_user_plan@log_create_ns_user_plan": "",
"ns_user_plan@log_delete_ns_user_plan": "",
"ns_user_plan@log_update_ns_user_plan": "",
"order_method@log_create_order_method": "",
"order_method@log_delete_order_method": "",
"order_method@log_update_order_method": "",
"plan@log_create_plan": "",
"plan@log_delete_plan": "",
"plan@log_sort_plans": "",
"plan@log_update_plan": "",
"post@log_create_post": "",
"post@log_delete_post": "",
"post@log_publish_post": "",
"post@log_update_post": "",
"post@product_global": "",
"region_city@log_add_region_city_code": "",
"region_city@log_update_region_city_custom": "",
"region_country@log_add_region_country_code": "",
"region_country@log_update_region_country_custom": "",
"region_country@region_china": "",
"region_country@region_china_hk": "",
"region_country@region_china_mainland": "",
"region_country@region_china_mo": "",
"region_country@region_china_tw": "",
"region_country@region_greater_china": "",
"region_provider@log_add_region_provider_code": "",
"region_provider@log_update_region_provider_custom": "",
"region_province@log_add_region_province_code": "",
"region_province@log_update_region_province_custom": "",
"region_town@log_add_region_town_code": "",
"region_town@log_update_region_town_custom": "",
"report_node@log_create_report_node": "",
"report_node@log_delete_report_node": "",
"report_node@log_update_report_node": "",
"report_node_group@log_create_report_node_group": "",
"report_node_group@log_delete_report_node_group": "",
"report_node_group@log_update_report_node_group": "",
"reverse_proxy@log_update_reverse_proxy_scheduling": "",
"script@log_create_script": "",
"script@log_delete_script": "",
"script@log_publish_scripts": "",
"script@log_update_script": "",
"server@copy_setting_current_cluster": "Current Cluster: %s",
"server@copy_setting_current_group": "Current Group: %s",
"server@copy_setting_current_user": "Current User: %s",
"server@copy_setting_select_cluster": "Select Cluster",
"server@copy_setting_select_group": "Select Group",
"server@copy_setting_select_server": "Select Site",
"server@copy_setting_select_user": "Select User",
"server@log_copy_server_configs": "从网站 %d 中同步配置 %s",
"server@log_create_server": "创建网站 %d",
"server@log_delete_server": "删除网站 %d",
"server@log_delete_servers": "",
"server@log_disable_server": "停用网站 %d",
"server@log_enable_server": "启用网站 %d",
"server@log_submit_auditing_server": "提交网站 %d 域名审核",
"server@log_update_global_settings": "保存网站全局配置",
"server@log_update_server_basic": "修改网站 %d 基本信息",
"server@log_update_server_groups": "修改网站 %d 所属分组",
"server@log_update_server_is_on": "修改网站 %d 启用状态",
"server@log_update_server_name": "修改网站 %d 名称",
"server@menu_accesslog_history": "History",
"server@menu_accesslog_realtime": "Realtime",
"server@menu_accesslog_today": "Today",
"server@menu_dashboard": "Dashboard",
"server@menu_setting_access_log": "Access Log",
"server@menu_setting_auth": "Access Control",
"server@menu_setting_basic": "Basic Settings",
"server@menu_setting_cache": "Cache",
"server@menu_setting_cc": "CC Protection",
"server@menu_setting_charset": "Charset",
"server@menu_setting_client_ip": "Client IP",
"server@menu_setting_compression": "Compressions",
"server@menu_setting_delete": "Delete",
"server@menu_setting_dns": "DNS",
"server@menu_setting_domains": "Server Names",
"server@menu_setting_fastcgi": "Fastcgi",
"server@menu_setting_group": "Group",
"server@menu_setting_http": "HTTP",
"server@menu_setting_http_headers": "HTTP Headers",
"server@menu_setting_http_proxy": "HTTP Reverse Proxy",
"server@menu_setting_https": "HTTPS",
"server@menu_setting_locations": "Locations",
"server@menu_setting_multimedia": "Audios & Videos",
"server@menu_setting_optimization": "Content Optimizations",
"server@menu_setting_origins": "Origin Sites",
"server@menu_setting_others": "Others",
"server@menu_setting_pages": "Pages",
"server@menu_setting_plan": "Plan",
"server@menu_setting_redirects": "URL Redirections",
"server@menu_setting_referers": "Referers",
"server@menu_setting_request_limit": "Request Limit",
"server@menu_setting_rewrite_rules": "Rewrite Rules",
"server@menu_setting_root": "Static Files",
"server@menu_setting_scripts": "Scripts",
"server@menu_setting_stat": "Statistics",
"server@menu_setting_tcp": "TCP",
"server@menu_setting_tcp_proxy": "TCP Reverse Proxy",
"server@menu_setting_tls": "TLS",
"server@menu_setting_traffic_limit": "Traffic Limit",
"server@menu_setting_uam": "UAM",
"server@menu_setting_udp": "UDP",
"server@menu_setting_udp_proxy": "UDP Reverse Proxy",
"server@menu_setting_unix": "Unix",
"server@menu_setting_user_agents": "UA List",
"server@menu_setting_waf": "WAF",
"server@menu_setting_webp": "WebP",
"server@menu_setting_websocket": "Websocket",
"server@menu_stat_clients": "Clients",
"server@menu_stat_providers": "Providers",
"server@menu_stat_regions": "Regions",
"server@menu_stat_traffic": "Traffic",
"server@menu_stat_waf": "WAF",
"server@server_names_log_update_server_names": "修改网站 %d 域名",
"server@tab_access_logs": "Access Logs",
"server@tab_dashboard": "Dashboard",
"server@tab_delete": "Delete",
"server@tab_server_list": "Sites",
"server@tab_settings": "Settings",
"server@tab_stat": "Statistics",
"server_access_log@log_update_access_log_setting": "",
"server_auth@log_update_http_auth_settings": "",
"server_cache@log_fetch_caches": "",
"server_cache@log_purge_caches": "",
"server_cache@log_update_cache_settings": "",
"server_cache@log_update_cluster_cache_policy": "",
"server_cache_policy@log_clean_all": "",
"server_cache_policy@log_create_cache_policy": "",
"server_cache_policy@log_delete_cache_policy": "",
"server_cache_policy@log_fetch_caches": "",
"server_cache_policy@log_purge_caches": "",
"server_cache_policy@log_stat_caches": "",
"server_cache_policy@log_test_reading": "",
"server_cache_policy@log_test_writing": "",
"server_cache_policy@log_update_cache_policy": "",
"server_cc@log_update_cc_settings": "",
"server_cc@log_update_cluster_http_cc_policy": "",
"server_charset@log_update_charset_setting": "",
"server_common@log_update_common_settings": "",
"server_compression@log_update_compression_settings": "",
"server_dns@log_regenerate_dns_name": "",
"server_dns@log_update_dns_name": "",
"server_dns@log_update_dns_settings": "",
"server_fastcgi@log_update_http_fastcgi": "",
"server_global_setting@log_update_cluster_global_server_config": "",
"server_group@log_create_server_group": "",
"server_group@log_delete_server_group": "",
"server_group@log_sort_server_groups": "",
"server_group@log_update_server_group": "",
"server_hls@log_update_hls": "",
"server_http3@log_update_cluster_http3_policy": "",
"server_http@log_update_http_settings": "",
"server_http_header@log_create_deleting_header": "",
"server_http_header@log_create_non_standard_header": "",
"server_http_header@log_create_setting_request_header": "",
"server_http_header@log_create_setting_response_header": "",
"server_http_header@log_delete_deleting_header": "",
"server_http_header@log_delete_header": "",
"server_http_header@log_delete_non_standard_header": "",
"server_http_header@log_update_http_headers": "",
"server_http_header@log_update_setting_header": "",
"server_https@log_update_https_settings": "",
"server_optimization@log_update_optimization_settings": "",
"server_origin@log_create_origin": "",
"server_origin@log_delete_origin": "",
"server_origin@log_update_origin": "",
"server_page@log_create_page": "",
"server_page@log_update_cluster_pages": "",
"server_page@log_update_page": "",
"server_page@log_update_pages": "",
"server_redirect@log_update_redirects": "",
"server_referer@log_update_referers": "",
"server_request_limit@log_update_request_limit_settings": "",
"server_reverse_proxy@log_update_location_reverse_proxy_settings": "",
"server_reverse_proxy@log_update_server_group_reverse_proxy_settings": "",
"server_reverse_proxy@log_update_server_reverse_proxy_settings": "",
"server_root@log_update_root": "",
"server_script@log_update_scripts": "",
"server_stat@log_update_stat_settings": "",
"server_tcp@log_update_tcp_settings": "",
"server_tls@log_update_tls_settings": "",
"server_traffic_limit@log_update_traffic_limit_settings": "",
"server_traffic_stat@all_servers": "",
"server_uam@log_update_cluster_uam_policy": "",
"server_uam@log_update_server_uam_settings": "",
"server_uam@log_update_uam_settings": "",
"server_udp@log_update_udp_settings": "",
"server_user_agent@log_update_user_agents": "",
"server_user_script@log_pass_user_script": "",
"server_user_script@log_reject_user_script": "",
"server_waf@log_update_waf_settings": "",
"server_webp@log_update_cluster_webp_policy": "",
"server_websocket@log_update_websocket_settings": "",
"ssl_cert@log_delete_ssl_cert": "",
"ssl_cert@log_download_ssl_cert": "",
"ssl_cert@log_download_ssl_cert_key": "",
"ssl_cert@log_download_ssl_cert_zip": "",
"ssl_cert@log_ocsp_ignore_ocsp_status": "",
"ssl_cert@log_ocsp_reset_all_ocsp_status": "",
"ssl_cert@log_ocsp_reset_ocsp_status": "",
"ssl_cert@log_update_ssl_cert": "",
"ssl_cert@log_upload_ssl_cert": "",
"ssl_cert@log_upload_ssl_cert_batch": "",
"ssl_cert@menu_apply": "",
"ssl_cert@menu_certs": "",
"ssl_cert@menu_ocsp": "",
"system@home_page": "https://goedge.cn",
"ticket_category@log_create_ticket_category": "",
"ticket_category@log_delete_ticket_category": "",
"ticket_category@log_update_ticket_category": "",
"traffic_package@log_create_traffic_package": "",
"traffic_package@log_delete_traffic_package": "",
"traffic_package@log_update_traffic_package": "",
"traffic_package_period@log_create_traffic_package_period": "",
"traffic_package_period@log_delete_traffic_package_period": "",
"traffic_package_period@log_update_traffic_package_period": "",
"traffic_package_price@log_update_traffic_package_price": "",
"user@log_create_user": "",
"user@log_delete_user": "",
"user@log_update_user": "",
"user@log_update_user_email_settings": "",
"user@log_update_user_features": "",
"user@log_update_user_global_settings": "",
"user@log_update_user_price_period": "",
"user@log_update_user_price_type": "",
"user@log_update_user_profile": "",
"user@log_update_user_sms_settings": "",
"user@log_verify_user": "",
"user_access_key@log_create_user_access_key": "",
"user_access_key@log_delete_user_access_key": "",
"user_access_key@log_update_user_access_key_is_on": "",
"user_account@log_update_user_account": "",
"user_ad_instance@log_delete_user_ad_instance": "",
"user_ad_instance@log_renew_user_ad_instance": "",
"user_ad_instance@log_update_user_ad_instance_objects": "",
"user_bill@log_pay_user_bill": "",
"user_common@canceled": "",
"user_common@log_system_error": "",
"user_common@server_error": "",
"user_common@system": "",
"user_identity@log_cancel_user_identity": "",
"user_identity@log_reject_user_identity": "",
"user_identity@log_reset_user_identity": "",
"user_identity@log_submit_user_identity": "",
"user_identity@log_update_user_identity_enterprise": "",
"user_identity@log_update_user_identity_individual": "",
"user_identity@log_verify_user_identity": "",
"user_login@log_update_login": "",
"user_node@log_create_user_node": "",
"user_node@log_delete_user_node": "",
"user_node@log_update_user_node": "",
"user_order@log_finish_user_order": "",
"user_plan@log_bind_user_plan_to_server": "",
"user_plan@log_buy_user_plan": "",
"user_plan@log_cancel_user_plan_from_server": "",
"user_plan@log_delete_user_plan": "",
"user_plan@log_renew_user_plan": "",
"user_ticket@log_create_user_ticket": "",
"user_ticket_log@log_reply_ticket": "",
"user_traffic_package@log_create_user_traffic_package": "",
"user_traffic_package@log_delete_user_traffic_package": "",
"waf@connector_and": "",
"waf@connector_and_description": "",
"waf@connector_or": "",
"waf@connector_or_description": "",
"waf@log_delete_ip_from_waf_policy": "",
"waf@log_update_forbidden_countries": "",
"waf@log_update_forbidden_provinces": "",
"waf@log_update_ip_from_waf_policy": "",
"waf_action@log_create_waf_action": "",
"waf_action@log_delete_waf_action": "",
"waf_action@log_update_waf_action": "",
"waf_policy@log_create_waf_policy": "",
"waf_policy@log_delete_waf_policy": "",
"waf_policy@log_export_waf_policy": "",
"waf_policy@log_import_waf_policy": "",
"waf_policy@log_update_cluster_waf_policy": "",
"waf_policy@log_update_waf_policy": "",
"waf_policy@log_upgrade_waf_policy": "",
"waf_rule_group@log_create_rule_group": "",
"waf_rule_group@log_delete_rule_group": "",
"waf_rule_group@log_sort_rule_groups": "",
"waf_rule_group@log_update_rule_group": "",
"waf_rule_group@log_update_rule_group_is_on": "",
"waf_rule_set@log_delete_rule_set": "",
"waf_rule_set@log_sort_rule_sets": "",
"waf_rule_set@log_update_rule_set": "",
"waf_rule_set@log_update_rule_set_is_on": "",
})
}

View File

@@ -44,8 +44,10 @@ func init() {
"admin_common@menu_setting_dns": "DNS设置",
"admin_common@menu_setting_health_check": "健康检查",
"admin_common@menu_setting_metrics": "统计指标",
"admin_common@menu_setting_security_policy": "网络安全",
"admin_common@menu_setting_waf_policy": "WAF策略",
"admin_common@menu_setting_webp": "WebP",
"admin_common@menu_setting_webp_policy": "WebP策略",
"admin_common@server_error": "服务器出了点小问题,请联系技术人员处理。",
"admin_common@system": "系统",
"admin_dashboard@disk_usage_warning": "当前服务器磁盘空间不足,请立即扩充容量,文件路径:%s已使用%dG已使用比例%.2f%%,仅剩余空间:%.2f%%。<br/>如果是因为本机数据库数据过多,你可以:<a href=\"/settings/database/clean\">[清理访问日志]</a> &nbsp; &nbsp; <a href=\"https://goedge.cn/docs/APINode/QA.md\" target=\"_blank\">[调整数据库binlog设置]</a>",
@@ -95,6 +97,7 @@ func init() {
"admin_menu@ns_routes": "线路管理",
"admin_menu@ns_settings": "全局配置",
"admin_menu@ns_user_plans": "用户套餐",
"admin_menu@plan_list": "套餐列表",
"admin_menu@plan_user_plans": "已购套餐",
"admin_menu@plans": "套餐管理",
"admin_menu@server_access_log_policies": "日志策略",
@@ -116,6 +119,8 @@ func init() {
"admin_menu@settings": "系统设置",
"admin_menu@ticket_category": "分类",
"admin_menu@tickets": "工单系统",
"admin_menu@user_list": "用户列表",
"admin_menu@user_scripts": "用户脚本",
"admin_menu@user_settings": "用户设置",
"admin_menu@users": "平台用户",
"admin_profile@log_update_profile": "修改个人资料",
@@ -146,6 +151,7 @@ func init() {
"admin_update@log_ignore_version": "忽略升级版本 %s",
"admin_update@log_reset_ignore_version": "重置忽略升级版本",
"admin_update@log_update_check_settings": "修改检查更新设置",
"admin_user_ui@log_update_ui_settings": "修改用户界面设置",
"api_node@log_create_api_node": "创建API节点 %d",
"api_node@log_delete_api_node": "删除API节点 %d",
"api_node@log_update_api_node": "修改API节点 %d",
@@ -235,12 +241,14 @@ func init() {
"message_media_instance@log_create_message_media_instance": "创建消息媒介 %d",
"message_media_instance@log_delete_message_media_instance": "删除消息媒介 %d",
"message_media_instance@log_update_message_media_instance": "修改消息媒介 %d",
"message_reciever@log_update_cluster_message_receivers": "修改集群 %d 消息接收人",
"message_receiver@log_delete_receiver": "删除接收人关联关系 %d",
"message_receiver@log_update_cluster_message_receivers": "修改集群 %d 消息接收人",
"message_recipient@log_create_message_recipient": "创建媒介接收人 %d",
"message_recipient@log_delete_message_recipient": "删除媒介接收人 %d",
"message_recipient@log_update_message_recipient": "修改媒介接收人 %d",
"message_task@log_create_testing_message_task": "创建媒介测试任务 %d",
"message_task@log_delete_message_task": "删除消息发送任务 %d",
"message_task@log_update_message_task_status": "修改消息任务 %d 状态为 %d",
"metric_chart@log_create_metric_chart": "创建指标图表 %d",
"metric_chart@log_delete_metric_chart": "删除指标图表 %d",
"metric_chart@log_update_metric_chart": "修改指标图表 %d",
@@ -262,6 +270,8 @@ func init() {
"node@log_up_node": "手动上线节点 %d",
"node@log_update_node": "修改节点 %d 基本信息",
"node@log_update_node_installation_status": "修改节点安装状态 %d",
"node@log_update_node_off": "停用节点 %d",
"node@log_update_node_on": "启用节点 %d",
"node@log_upgrade_node_remotely": "远程升级节点 %d",
"node@ungrouped_label": "未分组",
"node_action@log_copy_node_actions_to_cluster": "复制节点 %d 调度动作到集群",
@@ -289,6 +299,7 @@ func init() {
"node_cluster_menu@setting_notification": "消息通知",
"node_cluster_menu@setting_pages": "自定义页面",
"node_cluster_menu@setting_schedule": "智能调度",
"node_cluster_menu@setting_security_policy": "网络安全",
"node_cluster_menu@setting_service_global": "网站设置",
"node_cluster_menu@setting_system_service": "系统服务",
"node_cluster_menu@setting_thresholds": "阈值设置",
@@ -296,7 +307,7 @@ func init() {
"node_cluster_menu@setting_uam": "5秒盾",
"node_cluster_menu@setting_waf_actions": "WAF动作",
"node_cluster_menu@setting_waf_policy": "WAF策略",
"node_cluster_menu@setting_webp": "WebP",
"node_cluster_menu@setting_webp": "WebP策略",
"node_cluster_menu@tab_cluster_dashboard": "集群看板",
"node_cluster_menu@tab_cluster_delete": "删除集群",
"node_cluster_menu@tab_cluster_nodes": "节点列表",
@@ -441,6 +452,11 @@ func init() {
"plan@log_delete_plan": "删除套餐 %d",
"plan@log_sort_plans": "对套餐进行排序",
"plan@log_update_plan": "修改套餐 %d",
"post@log_create_post": "创建文章 %d",
"post@log_delete_post": "删除文章 %d",
"post@log_publish_post": "发布文章 %d",
"post@log_update_post": "修改文章 %d",
"post@product_global": "全站",
"region_city@log_add_region_city_code": "添加城市/市 %d 别名 %s",
"region_city@log_update_region_city_custom": "定制城市 %d 信息",
"region_country@log_add_region_country_code": "添加国家/地区 %d 别名 %s",
@@ -478,6 +494,7 @@ func init() {
"server@log_copy_server_configs": "从网站 %d 中同步配置 %s",
"server@log_create_server": "创建网站 %d",
"server@log_delete_server": "删除网站 %d",
"server@log_delete_servers": "批量删除网站",
"server@log_disable_server": "停用网站 %d",
"server@log_enable_server": "启用网站 %d",
"server@log_submit_auditing_server": "提交网站 %d 域名审核",
@@ -485,7 +502,7 @@ func init() {
"server@log_update_server_basic": "修改网站 %d 基本信息",
"server@log_update_server_groups": "修改网站 %d 所属分组",
"server@log_update_server_is_on": "修改网站 %d 启用状态",
"server@log_update_server_name": "修改网站名称",
"server@log_update_server_name": "修改网站 %d 名称",
"server@menu_accesslog_history": "历史",
"server@menu_accesslog_realtime": "实时",
"server@menu_accesslog_today": "今天",
@@ -508,6 +525,7 @@ func init() {
"server@menu_setting_http_proxy": "HTTP代理",
"server@menu_setting_https": "HTTPS",
"server@menu_setting_locations": "路由规则",
"server@menu_setting_multimedia": "音视频设置",
"server@menu_setting_optimization": "页面优化",
"server@menu_setting_origins": "源站",
"server@menu_setting_others": "其他设置",
@@ -573,6 +591,7 @@ func init() {
"server_group@log_delete_server_group": "删除网站分组 %d",
"server_group@log_sort_server_groups": "修改网站分组排序",
"server_group@log_update_server_group": "修改网站分组 %d",
"server_hls@log_update_hls": "修改Web %d 的HLS设置",
"server_http3@log_update_cluster_http3_policy": "修改集群 %d 的HTTP3策略设置",
"server_http@log_update_http_settings": "修改网站 %d 的HTTP设置",
"server_http_header@log_create_deleting_header": "添加删除的报头 HeaderPolicyId: %d, Name: %s",
@@ -611,6 +630,8 @@ func init() {
"server_uam@log_update_uam_settings": "修改Web %d 全站防护模式",
"server_udp@log_update_udp_settings": "修改网站 %d UDP设置",
"server_user_agent@log_update_user_agents": "修改Web %d User-Agent设置",
"server_user_script@log_pass_user_script": "通过用户脚本 %d",
"server_user_script@log_reject_user_script": "驳回用户脚本 %d",
"server_waf@log_update_waf_settings": "修改Web %d 的WAF设置",
"server_webp@log_update_cluster_webp_policy": "修改集群 %d 的WebP设置",
"server_websocket@log_update_websocket_settings": "修改Web %d 的Websocket设置",
@@ -647,6 +668,7 @@ func init() {
"user@log_update_user_price_period": "修改计费周期为 %s",
"user@log_update_user_price_type": "修改计费类型为 %s",
"user@log_update_user_profile": "修改个人资料",
"user@log_update_user_sms_settings": "修改用户短信设置",
"user@log_verify_user": "审核用户:%d 结果:%s",
"user_access_key@log_create_user_access_key": "创建AccessKey %d",
"user_access_key@log_delete_user_access_key": "删除AccessKey %d",

View File

@@ -0,0 +1,4 @@
After changing the messages, remember to run 'langs generate' to generate Go codes:
~~~bash
go run cmd/langs/main.go generate
~~~

View File

@@ -0,0 +1,19 @@
{
"menu_setting_basic": "Basic Settings",
"menu_setting_dns": "DNS Settings",
"menu_setting_health_check": "Health Check",
"menu_setting_cache_policy": "Cache Policy",
"menu_setting_waf_policy": "WAF Policy",
"menu_setting_webp": "WebP",
"menu_setting_webp_policy": "WebP Policy",
"menu_setting_metrics": "Metrics",
"menu_setting_ddos_protection": "DDoS Protection",
"menu_setting_security_policy": "Networking Security",
"menu_setting_cache": "Cache Settings",
"system": "System",
"canceled": "Canceled",
"server_error": "There is a internal error, please report to administrator.",
"log_system_error": "system error: %s"
}

View File

@@ -0,0 +1,9 @@
{
"ui_overview": "Overview",
"ui_waf": "WAF",
"ui_dns": "DNS",
"ui_user": "Users",
"ui_events": "Events",
"disk_usage_warning": "当前服务器磁盘空间不足,请立即扩充容量,文件路径:%s已使用%dG已使用比例%.2f%%,仅剩余空间:%.2f%%。<br/>如果是因为本机数据库数据过多,你可以:<a href=\"/settings/database/clean\">[清理访问日志]</a> &nbsp; &nbsp; <a href=\"${lang.system@home_page}/docs/APINode/QA.md\" target=\"_blank\">[调整数据库binlog设置]</a>"
}

View File

@@ -0,0 +1,74 @@
{
"dashboard": "Dashboard",
"servers": "Sites",
"server_access_logs": "Access Logs",
"server_groups": "Site Groups",
"server_certs": "Certificates",
"server_traffic_stats": "Traffic Statistics",
"server_cache_policies": "Cache Policies",
"server_purge_fetch_caches": "Cache Management",
"server_waf_policies": "WAF Policies",
"server_ip_lists": "IP List",
"server_access_log_policies": "Access Log Policies",
"server_metrics": "Metrics",
"server_scripts": "Script Libraries",
"user_scripts": "User Scripts",
"server_global_settings": "Global Settings",
"nodes": "Edge Nodes",
"node_clusters": "Clusters",
"node_logs": "Node Logs",
"node_ip_list": "Node IPs",
"node_regions": "Regions",
"node_ssh_grants": "SSH Grants",
"node_distributed_monitors": "Distributed Monitors",
"node_anti_ddos_products": "Anti-DDoS Product",
"dns": "DNS Service",
"dns_clusters": "Clusters",
"dns_providers": "DNS Providers",
"dns_issues": "Issues",
"ns": "Edge DNS",
"ns_domains": "Domains",
"ns_domain_groups": "Domain Groups",
"ns_domain_batch_operations": "Batch",
"ns_clusters": "Clusters",
"ns_routes": "Routes",
"ns_settings": "Settings",
"ns_user_plans": "User Plans",
"ns_plans": "Plans",
"ns_access_logs": "Access Logs",
"ns_node_logs": "Node Logs",
"ns_resolve_test": "Testing",
"users": "Users",
"user_list": "Users",
"user_settings": "User Settings",
"finance": "Finance",
"finance_bills": "Bills",
"finance_accounts": "Accounts",
"finance_logs": "Logs",
"finance_orders": "Orders",
"finance_income": "Reports",
"finance_fee": "Fee Settings",
"finance_packages": "Traffic Packages",
"plans": "Plans",
"plan_list": "Plans",
"plan_user_plans": "User Plans",
"tickets": "Tickets",
"ticket_category": "Categories",
"admins": "System Users",
"admin_recipients": "Notification Medias",
"logs": "Audit Logs",
"settings": "Settings",
"setting_basic_settings": "Basic Settings",
"setting_advanced_settings": "Advanced Settings",
"setting_authority": "Commercial Authority"
}

View File

@@ -0,0 +1,20 @@
{
"tab_admin_server": "Admin Server Settings",
"tab_admin_ui": "Admin System UI",
"tab_user_ui": "User System UI",
"tab_admin_security_settings": "Security Settings",
"tab_updates": "Updates",
"tab_profile": "My Profile",
"tab_login": "My Login",
"tab_database": "Database",
"tab_api_nodes": "API Nodes",
"tab_user_nodes": "User Nodes",
"tab_monitor_nodes": "Monitor Nodes", // deprecated
"tab_ip_library": "IP Library",
"tab_client_operation_systems": "OS Management",
"tab_client_browsers": "Browser Management",
"tab_authority": "Commercial Authority",
"tab_access_log_databases": "Log Databases",
"tab_transfer": "Transfer",
"tab_backup": "Backup"
}

View File

@@ -0,0 +1,27 @@
{
"setting_basic": "${lang.admin_common@menu_setting_basic}",
"setting_dns": "${lang.admin_common@menu_setting_dns}",
"setting_health_check": "${lang.admin_common@menu_setting_health_check}",
"setting_service_global": "Site Settings",
"setting_cache_policy": "${lang.admin_common@menu_setting_cache_policy}",
"setting_waf_policy": "${lang.admin_common@menu_setting_waf_policy}",
"setting_waf_actions": "WAF Actions",
"setting_webp": "${lang.admin_common@menu_setting_webp_policy}",
"setting_metrics": "${lang.admin_common@menu_setting_metrics}",
"setting_ddos_protection": "${lang.admin_common@menu_setting_ddos_protection}",
"setting_security_policy": "${lang.admin_common@menu_setting_security_policy}",
"setting_uam": "UAM Policy",
"setting_cc": "CC Policy",
"setting_pages": "Pages",
"setting_http3": "HTTP/3",
"setting_schedule": "Scheduling",
"setting_thresholds": "Thresholds",
"setting_notification": "Notifications",
"setting_system_service": "System Service",
"setting_toa": "TOA",
"tab_cluster_dashboard": "Dashboard",
"tab_cluster_nodes": "Nodes",
"tab_cluster_settings": "Settings",
"tab_cluster_delete": "Delete"
}

View File

@@ -0,0 +1,18 @@
{
"create_single_node": "Create",
"create_multiple_nodes": "Create Batch",
"install_manually": "Manually",
"install_auto_register": "Auto-Register",
"install_remote": "Install Remotely(%d)", // Args: [Nodes Count]
"install_remote_upgrade": "Upgrade Remotely(%d)", // Args: [Nodes Count]
"setting_basic": "${lang.admin_common@menu_setting_basic}",
"setting_dns": "${lang.admin_common@menu_setting_dns}",
"setting_cache": "${lang.admin_common@menu_setting_cache}",
"setting_ddos_protection": "${lang.admin_common@menu_setting_ddos_protection}",
"setting_ssh": "SSH",
"setting_system": "System Settings",
"setting_schedule": "Scheduling",
"setting_thresholds": "Thresholds"
}

View File

@@ -0,0 +1,89 @@
{
"tab_dashboard": "Dashboard",
"tab_stat": "Statistics",
"tab_access_logs": "Access Logs",
"tab_settings": "Settings",
"tab_delete": "Delete",
"tab_server_list": "Sites",
"menu_dashboard": "Dashboard",
"menu_accesslog_realtime": "Realtime",
"menu_accesslog_today": "Today",
"menu_accesslog_history": "History",
"menu_stat_traffic": "Traffic",
"menu_stat_regions": "Regions",
"menu_stat_providers": "Providers",
"menu_stat_clients": "Clients",
"menu_stat_waf": "WAF",
"menu_setting_basic": "Basic Settings",
"menu_setting_dns": "DNS",
"menu_setting_domains": "Server Names",
"menu_setting_http": "HTTP",
"menu_setting_https": "HTTPS",
"menu_setting_origins": "Origin Sites",
"menu_setting_redirects": "URL Redirections",
"menu_setting_locations": "Locations",
"menu_setting_rewrite_rules": "Rewrite Rules",
"menu_setting_waf": "WAF",
"menu_setting_cache": "Cache",
"menu_setting_auth": "Access Control",
"menu_setting_referers": "Referers",
"menu_setting_user_agents": "UA List",
"menu_setting_charset": "Charset",
"menu_setting_access_log": "Access Log",
"menu_setting_stat": "Statistics",
"menu_setting_compression": "Compressions",
"menu_setting_optimization": "Content Optimizations",
"menu_setting_pages": "Pages",
"menu_setting_http_headers": "HTTP Headers",
"menu_setting_websocket": "Websocket",
"menu_setting_webp": "WebP",
"menu_setting_root": "Static Files",
"menu_setting_fastcgi": "Fastcgi",
"menu_setting_client_ip": "Client IP",
"menu_setting_request_limit": "Request Limit",
"menu_setting_others": "Others",
"menu_setting_tcp": "TCP",
"menu_setting_tls": "TLS",
"menu_setting_unix": "Unix",
"menu_setting_udp": "UDP",
"menu_setting_delete": "Delete",
"menu_setting_http_proxy": "HTTP Reverse Proxy", // in site groups
"menu_setting_tcp_proxy": "TCP Reverse Proxy", // in site groups
"menu_setting_udp_proxy": "UDP Reverse Proxy", // in site groups
"menu_setting_plan": "Plan",
"menu_setting_group": "Group",
"menu_setting_multimedia": "Audios & Videos",
"menu_setting_uam": "UAM",
"menu_setting_cc": "CC Protection",
"menu_setting_traffic_limit": "Traffic Limit",
"menu_setting_scripts": "Scripts",
"copy_setting_current_group": "Current Group: %s",
"copy_setting_current_user": "Current User: %s",
"copy_setting_current_cluster": "Current Cluster: %s",
"copy_setting_select_group": "Select Group",
"copy_setting_select_user": "Select User",
"copy_setting_select_cluster": "Select Cluster",
"copy_setting_select_server": "Select Site",
"server_names_log_update_server_names": "修改网站 %d 域名",
"log_update_global_settings": "保存网站全局配置",
"log_create_server": "创建网站 %d",
"log_delete_server": "删除网站 %d",
"log_update_server_basic": "修改网站 %d 基本信息",
"log_copy_server_configs": "从网站 %d 中同步配置 %s",
"log_submit_auditing_server": "提交网站 %d 域名审核",
"log_update_server_groups": "修改网站 %d 所属分组",
"log_enable_server": "启用网站 %d",
"log_disable_server": "停用网站 %d",
"log_update_server_name": "修改网站 %d 名称",
"log_update_server_is_on":"修改网站 %d 启用状态"
}

View File

@@ -0,0 +1,3 @@
{
"home_page": "https://goedge.cn"
}

View File

@@ -1 +0,0 @@
After change the messages, remember to run 'langs generate' to generate Go codes.

View File

@@ -5,8 +5,10 @@
"menu_setting_cache_policy": "缓存策略",
"menu_setting_waf_policy": "WAF策略",
"menu_setting_webp": "WebP",
"menu_setting_webp_policy": "WebP策略",
"menu_setting_metrics": "统计指标",
"menu_setting_ddos_protection": "DDoS防护",
"menu_setting_security_policy": "网络安全",
"menu_setting_cache": "缓存设置",
"system": "系统",

View File

@@ -12,6 +12,7 @@
"server_access_log_policies": "日志策略",
"server_metrics": "统计指标",
"server_scripts": "脚本库",
"user_scripts": "用户脚本",
"server_global_settings": "通用设置",
"nodes": "边缘节点",
@@ -42,6 +43,7 @@
"ns_resolve_test": "解析测试",
"users": "平台用户",
"user_list": "用户列表",
"user_settings": "用户设置",
"finance": "财务管理",
@@ -54,6 +56,7 @@
"finance_packages": "流量包",
"plans": "套餐管理",
"plan_list": "套餐列表",
"plan_user_plans": "已购套餐",
"tickets": "工单系统",

View File

@@ -0,0 +1,3 @@
{
"log_update_ui_settings": "修改用户界面设置"
}

View File

@@ -0,0 +1,4 @@
{
"log_update_cluster_message_receivers": "修改集群 %d 消息接收人",
"log_delete_receiver": "删除接收人关联关系 %d"
}

View File

@@ -1,3 +0,0 @@
{
"log_update_cluster_message_receivers": "修改集群 %d 消息接收人"
}

View File

@@ -1,4 +1,5 @@
{
"log_delete_message_task": "删除消息发送任务 %d",
"log_create_testing_message_task": "创建媒介测试任务 %d"
"log_create_testing_message_task": "创建媒介测试任务 %d",
"log_update_message_task_status": "修改消息任务 %d 状态为 %d"
}

View File

@@ -11,5 +11,7 @@
"log_update_node": "修改节点 %d 基本信息",
"log_update_node_installation_status": "修改节点安装状态 %d",
"log_up_node": "手动上线节点 %d",
"log_update_node_on": "启用节点 %d",
"log_update_node_off": "停用节点 %d",
"log_delete_node_from_cluster": "从集群 %d 中删除节点 %d"
}

View File

@@ -6,9 +6,10 @@
"setting_cache_policy": "${lang.admin_common@menu_setting_cache_policy}",
"setting_waf_policy": "${lang.admin_common@menu_setting_waf_policy}",
"setting_waf_actions": "WAF动作",
"setting_webp": "${lang.admin_common@menu_setting_webp}",
"setting_webp": "${lang.admin_common@menu_setting_webp_policy}",
"setting_metrics": "${lang.admin_common@menu_setting_metrics}",
"setting_ddos_protection": "${lang.admin_common@menu_setting_ddos_protection}",
"setting_security_policy": "${lang.admin_common@menu_setting_security_policy}",
"setting_uam": "5秒盾",
"setting_cc": "CC防护",
"setting_pages": "自定义页面",

View File

@@ -4,7 +4,7 @@
"install_manually": "手动安装",
"install_auto_register": "自动注册",
"install_remote": "远程安装(%d)", // 参数:节点数量
"install_remote_upgrade": "远程升级(%d)", // 参数:节点数量,
"install_remote_upgrade": "远程升级(%d)", // 参数:节点数量
"setting_basic": "${lang.admin_common@menu_setting_basic}",
"setting_dns": "${lang.admin_common@menu_setting_dns}",

View File

@@ -0,0 +1,8 @@
{
"product_global": "全站",
"log_create_post": "创建文章 %d",
"log_publish_post": "发布文章 %d",
"log_delete_post": "删除文章 %d",
"log_update_post": "修改文章 %d"
}

View File

@@ -56,6 +56,7 @@
"menu_setting_udp_proxy": "UDP代理", // 网站分组中使用
"menu_setting_plan": "套餐",
"menu_setting_group": "分组",
"menu_setting_multimedia": "音视频设置",
"menu_setting_uam": "5秒盾",
"menu_setting_cc": "CC防护",
@@ -83,6 +84,7 @@
"log_update_server_groups": "修改网站 %d 所属分组",
"log_enable_server": "启用网站 %d",
"log_disable_server": "停用网站 %d",
"log_update_server_name": "修改网站名称",
"log_update_server_is_on":"修改网站 %d 启用状态"
"log_update_server_name": "修改网站 %d 名称",
"log_update_server_is_on":"修改网站 %d 启用状态",
"log_delete_servers": "批量删除网站"
}

View File

@@ -0,0 +1,3 @@
{
"log_update_hls": "修改Web %d 的HLS设置"
}

View File

@@ -0,0 +1,4 @@
{
"log_pass_user_script": "通过用户脚本 %d",
"log_reject_user_script": "驳回用户脚本 %d"
}

View File

@@ -1,5 +1,6 @@
{
"log_update_user_email_settings": "修改用户邮件设置",
"log_update_user_sms_settings": "修改用户短信设置",
"log_update_user_global_settings": "修改用户设置",
"log_create_user": "创建用户 %d",
"log_delete_user": "删除用户 %d",

View File

@@ -8,11 +8,15 @@ func init() {
_ = DefaultWebPImagePolicy.Init()
}
var DefaultWebPImagePolicy = &WebPImagePolicy{
IsOn: true,
RequireCache: true,
MinLength: shared.NewSizeCapacity(0, shared.SizeCapacityUnitKB),
MaxLength: shared.NewSizeCapacity(128, shared.SizeCapacityUnitMB),
var DefaultWebPImagePolicy = NewWebPImagePolicy()
func NewWebPImagePolicy() *WebPImagePolicy {
return &WebPImagePolicy{
IsOn: true,
RequireCache: true,
MinLength: shared.NewSizeCapacity(0, shared.SizeCapacityUnitKB),
MaxLength: shared.NewSizeCapacity(128, shared.SizeCapacityUnitMB),
}
}
// WebPImagePolicy WebP策略
@@ -21,6 +25,7 @@ type WebPImagePolicy struct {
RequireCache bool `yaml:"requireCache" json:"requireCache"` // 需要在缓存条件下进行
MinLength *shared.SizeCapacity `yaml:"minLength" json:"minLength"` // 最小压缩对象比如4m, 24k
MaxLength *shared.SizeCapacity `yaml:"maxLength" json:"maxLength"` // 最大压缩对象
Quality int `yaml:"quality" json:"quality"` // 生成的图片质量0-100
minLength int64
maxLength int64

View File

@@ -0,0 +1,49 @@
// Copyright 2023 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
package nodeconfigs
import (
"bytes"
"encoding/json"
)
type NetworkSecurityStatus = string
const (
NetworkSecurityStatusAuto NetworkSecurityStatus = "auto"
NetworkSecurityStatusOn NetworkSecurityStatus = "on"
NetworkSecurityStatusOff NetworkSecurityStatus = "off"
)
// NetworkSecurityPolicy 节点网络安全策略
type NetworkSecurityPolicy struct {
Status NetworkSecurityStatus `json:"status"` // 启用状态
TCP struct{} `json:"tcp"` // TODO
UDP struct{} `json:"udp"` // TODO
ICMP struct{} `json:"icmp"` // TODO
}
func NewNetworkSecurityPolicy() *NetworkSecurityPolicy {
var policy = &NetworkSecurityPolicy{}
policy.Status = NetworkSecurityStatusAuto
return policy
}
func (this *NetworkSecurityPolicy) Init() error {
return nil
}
func (this *NetworkSecurityPolicy) AsJSON() ([]byte, error) {
return json.Marshal(this)
}
func (this *NetworkSecurityPolicy) IsOn() bool {
return this.Status != NetworkSecurityStatusOff
}
func (this *NetworkSecurityPolicy) IsSame(anotherPolicy *NetworkSecurityPolicy) bool {
data1, _ := json.Marshal(this)
data2, _ := json.Marshal(anotherPolicy)
return bytes.Equal(data1, data2)
}

View File

@@ -28,6 +28,8 @@ var uamPolicyLocker = &sync.RWMutex{}
var httpCCPolicyLocker = &sync.RWMutex{}
var http3PolicyLocker = &sync.RWMutex{}
var httpPagesPolicyLocker = &sync.RWMutex{}
var webPPolicyLocker = &sync.RWMutex{}
var plansLocker = &sync.RWMutex{}
type ServerError struct {
Id int64
@@ -74,7 +76,6 @@ type NodeConfig struct {
ParentNodes map[int64][]*ParentNodeConfig `yaml:"parentNodes" json:"parentNodes"` // clusterId => []*ParentNodeConfig
// 全局配置
GlobalConfig *serverconfigs.GlobalConfig `yaml:"globalConfig" json:"globalConfig"` // 全局配置
GlobalServerConfig *serverconfigs.GlobalServerConfig `yaml:"globalServerConfig" json:"globalServerConfig"` // 服务全局配置,用来替代 GlobalConfig
ProductConfig *ProductConfig `yaml:"productConfig" json:"productConfig"`
@@ -88,21 +89,24 @@ type NodeConfig struct {
AutoOpenPorts bool `yaml:"autoOpenPorts" json:"autoOpenPorts"` // 自动开放所需端口
Clock *ClockConfig `yaml:"clock" json:"clock"` // 时钟配置
AutoInstallNftables bool `yaml:"autoInstallNftables" json:"autoInstallNftables"` // 自动安装nftables
AutoSystemTuning bool `yaml:"autoSystemTuning" json:"autoSystemTuning"` // 自动调整系统参数
// 指标
MetricItems []*serverconfigs.MetricItemConfig `yaml:"metricItems" json:"metricItems"`
// 自动白名单
AllowedIPs []string `yaml:"allowedIPs" json:"allowedIPs"`
IPAddresses []string `yaml:"ipAddresses" json:"ipAddresses"` // IP地址
AllowedIPs []string `yaml:"allowedIPs" json:"allowedIPs"` // 自动IP白名单
// 脚本
CommonScripts []*serverconfigs.CommonScript `yaml:"commonScripts" json:"commonScripts"`
WebPImagePolicies map[int64]*WebPImagePolicy `yaml:"webpImagePolicies" json:"webpImagePolicies"` // WebP相关配置clusterId => *WebPImagePolicy
UAMPolicies map[int64]*UAMPolicy `yaml:"uamPolicies" json:"uamPolicies"` // UAM相关配置clusterId => *UAMPolicy
HTTPCCPolicies map[int64]*HTTPCCPolicy `yaml:"httpCCPolicies" json:"httpCCPolicies"` // CC相关配置 clusterId => *HTTPCCPolicy
HTTP3Policies map[int64]*HTTP3Policy `yaml:"http3Policies" json:"http3Policies"` // HTTP3相关配置 clusterId => *HTTP3Policy
HTTPPagesPolicies map[int64]*HTTPPagesPolicy `yaml:"httpPagesPolicies" json:"httpPagesPolicies"` // 自定义页面clusterId => *HTTPPagesPolicy
WebPImagePolicies map[int64]*WebPImagePolicy `yaml:"webpImagePolicies" json:"webpImagePolicies"` // WebP相关配置clusterId => *WebPImagePolicy
UAMPolicies map[int64]*UAMPolicy `yaml:"uamPolicies" json:"uamPolicies"` // UAM相关配置clusterId => *UAMPolicy
HTTPCCPolicies map[int64]*HTTPCCPolicy `yaml:"httpCCPolicies" json:"httpCCPolicies"` // CC相关配置 clusterId => *HTTPCCPolicy
HTTP3Policies map[int64]*HTTP3Policy `yaml:"http3Policies" json:"http3Policies"` // HTTP3相关配置 clusterId => *HTTP3Policy
HTTPPagesPolicies map[int64]*HTTPPagesPolicy `yaml:"httpPagesPolicies" json:"httpPagesPolicies"` // 自定义页面clusterId => *HTTPPagesPolicy
NetworkSecurityPolicy *NetworkSecurityPolicy `yaml:"networkSecurityPolicy" json:"networkSecurityPolicy"` // 网络安全策略
Plans map[int64]*serverconfigs.PlanConfig `yaml:"plans" json:"plans"` // 套餐 plan id => *serverconfigs.PlanConfig
// DNS
DNSResolver *DNSResolverConfig `yaml:"dnsResolver" json:"dnsResolver"`
@@ -209,6 +213,12 @@ func CloneNodeConfig(nodeConfig *NodeConfig) (*NodeConfig, error) {
httpPagesPolicyLocker.RLock()
defer httpPagesPolicyLocker.RUnlock()
webPPolicyLocker.RLock()
defer webPPolicyLocker.RUnlock()
plansLocker.RLock()
defer plansLocker.RUnlock()
var newConfigValue = reflect.Indirect(reflect.ValueOf(&NodeConfig{}))
var oldValue = reflect.Indirect(reflect.ValueOf(nodeConfig))
var valueType = oldValue.Type()
@@ -263,14 +273,6 @@ func (this *NodeConfig) Init(ctx context.Context) (err error, serverErrors []*Se
}
}
// global config
if this.GlobalConfig != nil {
err = this.GlobalConfig.Init()
if err != nil {
return
}
}
// cache policy
if len(this.HTTPCachePolicies) > 0 {
for _, policy := range this.HTTPCachePolicies {
@@ -383,14 +385,17 @@ func (this *NodeConfig) Init(ctx context.Context) (err error, serverErrors []*Se
}
// webp image policy
webPPolicyLocker.RLock()
if this.WebPImagePolicies != nil {
for _, policy := range this.WebPImagePolicies {
err = policy.Init()
if err != nil {
webPPolicyLocker.RUnlock()
return
}
}
}
webPPolicyLocker.RUnlock()
// uam policy
uamPolicyLocker.RLock()
@@ -444,6 +449,19 @@ func (this *NodeConfig) Init(ctx context.Context) (err error, serverErrors []*Se
}
httpPagesPolicyLocker.RUnlock()
// plans
plansLocker.RLock()
if len(this.Plans) > 0 {
for _, plan := range this.Plans {
err = plan.Init()
if err != nil {
plansLocker.RUnlock()
return
}
}
}
plansLocker.RUnlock()
// dns resolver
if this.DNSResolver != nil {
err = this.DNSResolver.Init()
@@ -463,13 +481,21 @@ func (this *NodeConfig) Init(ctx context.Context) (err error, serverErrors []*Se
// api node addrs
if len(this.APINodeAddrs) > 0 {
for _, addr := range this.APINodeAddrs {
err := addr.Init()
err = addr.Init()
if err != nil {
return err, nil
}
}
}
// network security policy
if this.NetworkSecurityPolicy != nil {
err = this.NetworkSecurityPolicy.Init()
if err != nil {
return err, nil
}
}
return
}
@@ -598,6 +624,9 @@ func (this *NodeConfig) lookupWeb(server *serverconfigs.ServerConfig, web *serve
if (web.FirewallPolicy.BlockOptions == nil || !web.FirewallPolicy.BlockOptions.IsPrior) && server.HTTPFirewallPolicy.BlockOptions != nil {
web.FirewallPolicy.BlockOptions = server.HTTPFirewallPolicy.BlockOptions
}
if (web.FirewallPolicy.PageOptions == nil || !web.FirewallPolicy.PageOptions.IsPrior) && server.HTTPFirewallPolicy.PageOptions != nil {
web.FirewallPolicy.PageOptions = server.HTTPFirewallPolicy.PageOptions
}
if (web.FirewallPolicy.CaptchaOptions == nil || !web.FirewallPolicy.CaptchaOptions.IsPrior) && server.HTTPFirewallPolicy.CaptchaOptions != nil {
web.FirewallPolicy.CaptchaOptions = server.HTTPFirewallPolicy.CaptchaOptions
}
@@ -674,12 +703,22 @@ func (this *NodeConfig) UpdateCertOCSP(certId int64, ocsp []byte, expiresAt int6
// FindWebPImagePolicyWithClusterId 使用集群ID查找WebP策略
func (this *NodeConfig) FindWebPImagePolicyWithClusterId(clusterId int64) *WebPImagePolicy {
webPPolicyLocker.RLock()
defer webPPolicyLocker.RUnlock()
if this.WebPImagePolicies == nil {
return nil
}
return this.WebPImagePolicies[clusterId]
}
// UpdateWebPImagePolicies 修改集群WebP策略
func (this *NodeConfig) UpdateWebPImagePolicies(policies map[int64]*WebPImagePolicy) {
webPPolicyLocker.Lock()
defer webPPolicyLocker.Unlock()
this.WebPImagePolicies = policies
}
// FindUAMPolicyWithClusterId 使用集群ID查找UAM策略
func (this *NodeConfig) FindUAMPolicyWithClusterId(clusterId int64) *UAMPolicy {
uamPolicyLocker.RLock()
@@ -766,6 +805,27 @@ func (this *NodeConfig) FindHTTPPagesPolicyWithClusterId(clusterId int64) *HTTPP
return this.HTTPPagesPolicies[clusterId]
}
// UpdatePlans 更新套餐
func (this *NodeConfig) UpdatePlans(planMap map[int64]*serverconfigs.PlanConfig) {
plansLocker.Lock()
this.Plans = planMap
plansLocker.Unlock()
}
// FindAllPlans 查找所有套餐
func (this *NodeConfig) FindAllPlans() map[int64]*serverconfigs.PlanConfig {
plansLocker.RLock()
defer plansLocker.RUnlock()
return this.Plans
}
// 查找单个套餐
func (this *NodeConfig) FindPlan(planId int64) *serverconfigs.PlanConfig {
plansLocker.RLock()
defer plansLocker.RUnlock()
return this.Plans[planId]
}
// SecretHash 对Id和Secret的Hash计算
func (this *NodeConfig) SecretHash() string {
return this.secretHash
@@ -774,4 +834,4 @@ func (this *NodeConfig) SecretHash() string {
// HasConnTimeoutSettings 检查是否有连接超时设置
func (this *NodeConfig) HasConnTimeoutSettings() bool {
return this.GlobalServerConfig != nil && (this.GlobalServerConfig.Performance.AutoReadTimeout || this.GlobalServerConfig.Performance.AutoWriteTimeout)
}
}

View File

@@ -19,6 +19,7 @@ type NodeStatus struct {
DiskMaxUsage float64 `json:"diskMaxUsage"`
DiskMaxUsagePartition string `json:"diskMaxUsagePartition"`
DiskTotal uint64 `json:"diskTotal"`
DiskWritingSpeedMB int `json:"diskWritingSpeedMB"` // 硬盘写入速度
UpdatedAt int64 `json:"updatedAt"`
Timestamp int64 `json:"timestamp"` // 当前节点时间戳
Load1m float64 `json:"load1m"`

View File

@@ -23,6 +23,8 @@ const (
NodeValueItemAttackRequests NodeValueItem = "attackRequests" // 攻击请求访问量
NodeValueItemDisk NodeValueItem = "disk" // 磁盘
NodeValueItemCacheDir NodeValueItem = "cacheDir" // 缓存目录
NodeValueItemNetworkPackets NodeValueItem = "networkPackets" // 网络数据包统计
)
type nodeValueItemDefinition struct {
@@ -36,6 +38,7 @@ type nodeValueItemParamDefinition struct {
Code string `json:"code"`
Name string `json:"name"`
Description string `json:"description"`
IsPercent bool `json:"isPercent"` // 是否支持百分比
}
var nodeValueItemDefinitions = []*nodeValueItemDefinition{
@@ -46,7 +49,8 @@ var nodeValueItemDefinitions = []*nodeValueItemDefinition{
{
Code: "usage",
Name: "使用比例",
Description: "一个不超过1的小数",
Description: "0到100之间的数字",
IsPercent: true,
},
},
},
@@ -57,7 +61,8 @@ var nodeValueItemDefinitions = []*nodeValueItemDefinition{
{
Code: "usage",
Name: "使用比例",
Description: "一个不超过1的小数",
Description: "0到100之间的数字",
IsPercent: true,
},
},
},
@@ -68,24 +73,24 @@ var nodeValueItemDefinitions = []*nodeValueItemDefinition{
{
Code: "load1m",
Name: "1分钟负载",
Description: "1分钟内的负载",
Description: "1分钟内的平均负载",
},
{
Code: "load5m",
Name: "5分钟负载",
Description: "5分钟内的负载",
Description: "5分钟内的平均负载",
},
{
Code: "load15m",
Name: "15分钟负载",
Description: "15分钟内的负载",
Description: "15分钟内的平均负载",
},
},
},
{
Code: NodeValueItemTrafficIn,
Name: "上行流量",
Description: "客户端发送到服务器端的流量。",
Description: "平均每分钟客户端发送到服务器端的流量。",
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
@@ -97,7 +102,7 @@ var nodeValueItemDefinitions = []*nodeValueItemDefinition{
{
Code: NodeValueItemTrafficOut,
Name: "下行流量",
Description: "服务器端发送到客户端的流量。",
Description: "平均每分钟服务器端发送到客户端的流量。",
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
@@ -107,8 +112,9 @@ var nodeValueItemDefinitions = []*nodeValueItemDefinition{
},
},
{
Code: NodeValueItemConnections,
Name: "连接数",
Code: NodeValueItemConnections,
Name: "连接数",
Description: "平均每分钟连接数",
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
@@ -118,8 +124,9 @@ var nodeValueItemDefinitions = []*nodeValueItemDefinition{
},
},
{
Code: NodeValueItemRequests,
Name: "请求数",
Code: NodeValueItemRequests,
Name: "请求数",
Description: "平均每分钟请求数",
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
@@ -129,8 +136,9 @@ var nodeValueItemDefinitions = []*nodeValueItemDefinition{
},
},
{
Code: NodeValueItemAttackRequests,
Name: "攻击请求数",
Code: NodeValueItemAttackRequests,
Name: "攻击请求数",
Description: "平均每分钟攻击请求数",
Params: []*nodeValueItemParamDefinition{
{
Code: "total",
@@ -146,7 +154,26 @@ var nodeValueItemDefinitions = []*nodeValueItemDefinition{
{
Code: "usage",
Name: "使用比例",
Description: "一个不超过1的小数",
Description: "0到100之间的数字",
IsPercent: true,
},
},
},
{
Code: NodeValueItemNetworkPackets,
Name: "网络数据包",
Params: []*nodeValueItemParamDefinition{
{
Code: "tcpInPPS",
Name: "TCP入口包速率pps",
},
{
Code: "udpInPPS",
Name: "UDP入口包速率pps",
},
{
Code: "icmpInPPS",
Name: "ICMP入口包速率pps",
},
},
},
@@ -182,6 +209,21 @@ func FindNodeValueItemParamName(nodeCode NodeValueItem, paramCode string) string
return ""
}
// CheckNodeValueItemParamIsPercent 判断监控项某个参数是否支持百分比
func CheckNodeValueItemParamIsPercent(nodeCode NodeValueItem, paramCode string) bool {
for _, def := range nodeValueItemDefinitions {
if def.Code == nodeCode {
for _, p := range def.Params {
if p.Code == paramCode {
return p.IsPercent
}
}
return false
}
}
return false
}
// NodeValueRange 值范围
type NodeValueRange = string

View File

@@ -6,6 +6,7 @@ import (
"encoding/base64"
"encoding/json"
"errors"
"fmt"
"github.com/iwind/TeaGo/maps"
"time"
)
@@ -26,7 +27,7 @@ func EncryptMap(nodeUniqueId string, nodeSecret string, data maps.Map, timeout i
"data": data,
})
if err != nil {
return "", errors.New("marshal data to json failed: " + err.Error())
return "", fmt.Errorf("marshal data to json failed: %w", err)
}
var method = &AES256CFBMethod{}
@@ -52,7 +53,7 @@ func DecryptMap(nodeUniqueId string, nodeSecret string, encodedString string) (m
encodedData, err := base64.StdEncoding.DecodeString(encodedString)
if err != nil {
return nil, errors.New("base64 decode failed: " + err.Error())
return nil, fmt.Errorf("base64 decode failed: %w", err)
}
dataJSON, err := method.Decrypt(encodedData)
@@ -63,7 +64,7 @@ func DecryptMap(nodeUniqueId string, nodeSecret string, encodedString string) (m
var result = maps.Map{}
err = json.Unmarshal(dataJSON, &result)
if err != nil {
return nil, errors.New("unmarshal data failed: " + err.Error())
return nil, fmt.Errorf("unmarshal data failed: %w", err)
}
var expiresAt = result.GetInt64("expiresAt")
@@ -107,7 +108,7 @@ func DecryptData(nodeUniqueId string, nodeSecret string, encodedString string) (
encodedData, err := base64.StdEncoding.DecodeString(encodedString)
if err != nil {
return nil, errors.New("base64 decode failed: " + err.Error())
return nil, fmt.Errorf("base64 decode failed: %w", err)
}
return method.Decrypt(encodedData)

View File

@@ -196,12 +196,14 @@ func (this *HTTPFirewallPolicyDAO) FindHTTPFirewallActionConfigs(ctx context.Con
switch action.Code {
case firewallconfigs.HTTPFirewallActionRecordIP:
listId := action.Options.GetInt64("ipListId")
var listId = action.Options.GetInt64("ipListId")
listResp, err := this.RPC().IPListRPC().FindEnabledIPList(ctx, &pb.FindEnabledIPListRequest{IpListId: listId})
if err != nil {
return nil, err
}
if listResp.IpList != nil {
if listId == 0 {
action.Options["ipListName"] = "全局黑名单"
} else if listResp.IpList != nil {
action.Options["ipListName"] = listResp.IpList.Name
} else {
action.Options["ipListName"] = action.Options.GetString("ipListName") + "(已删除)"

View File

@@ -1,41 +0,0 @@
package dao
import (
"context"
"encoding/json"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
)
type SettingCode = string
const (
SettingCodeServerGlobalConfig SettingCode = "serverGlobalConfig" // 服务相关全局设置
SettingCodeNodeMonitor SettingCode = "nodeMonitor" // 监控节点状态
SettingCodeClusterHealthCheck SettingCode = "clusterHealthCheck" // 集群健康检查
SettingCodeIPListVersion SettingCode = "ipListVersion" // IP名单的版本号
SettingCodeAdminSecurityConfig SettingCode = "adminSecurityConfig" // 管理员安全设置
)
var SharedSysSettingDAO = new(SysSettingDAO)
type SysSettingDAO struct {
BaseDAO
}
// 读取服务全局配置
func (this *SysSettingDAO) ReadGlobalConfig(ctx context.Context) (*serverconfigs.GlobalConfig, error) {
globalConfigResp, err := this.RPC().SysSettingRPC().ReadSysSetting(ctx, &pb.ReadSysSettingRequest{Code: SettingCodeServerGlobalConfig})
if err != nil {
return nil, err
}
if len(globalConfigResp.ValueJSON) == 0 {
return nil, nil
}
globalConfig := &serverconfigs.GlobalConfig{}
err = json.Unmarshal(globalConfigResp.ValueJSON, globalConfig)
if err != nil {
return nil, err
}
return globalConfig, nil
}

View File

@@ -3,9 +3,10 @@
package errors
import (
"errors"
"fmt"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"path/filepath"
"strings"
)
@@ -20,13 +21,13 @@ func HumanError(err error, endpoints []string, configFile string) (resultErr err
}
switch errStatus.Code() {
case codes.InvalidArgument:
return errors.New("错误的RPC参数" + err.Error()), false
return fmt.Errorf("错误的RPC参数%w", err), false
case codes.DeadlineExceeded:
return errors.New("RPC操作超时请重试" + err.Error()), false
return fmt.Errorf("RPC操作超时请重试%w", err), false
case codes.Unimplemented:
return errors.New("请求的RPC服务或方法不存在可能是没有升级API节点或者当前节点没有升级" + err.Error()), false
return fmt.Errorf("请求的RPC服务或方法不存在可能是没有升级API节点或者当前节点没有升级%w", err), false
case codes.Unavailable:
return errors.New("RPC当前不可用<br/>1、请确认当前节点的api.yaml<em>" + configFile + "</em>)配置中的地址(<em>" + strings.Join(endpoints, ", ") + "</em>)是否已填写正确;<br/>2、请确保API节点已启动并检查当前节点和API节点之间的网络连接是正常的。<hr/>错误信息:" + err.Error()), true
return fmt.Errorf("RPC当前不可用<br/>1、请确认当前节点的%s<em>%s</em>)配置中的地址(<em>%s</em>)是否已填写正确;<br/>2、请确保API节点已启动并检查当前节点和API节点之间的网络连接是正常的。<hr/>错误信息:%w", filepath.Base(configFile), configFile, strings.Join(endpoints, ", "), err), true
}
return err, false

View File

@@ -0,0 +1,37 @@
# 比特位尺寸
## 定义
~~~json
{
"count": "数量",
"unit": "单位"
}
~~~
其中:
* `数量` - 必须是一个整数数字
* `单位` - 有以下几个值:
* `b` - 比特
* `kb` - Kb
* `mb` - Mb
* `gb` - Gb
* `tb` - Tb
* `pb` - Pb
* `eb` - Eb
## 示例
100Mb
~~~
{
"count": 100,
"unit": "mb"
}
~~~
32Gb
~~~
{
"count": 32,
"unit": "gb"
}
~~~

View File

@@ -11,11 +11,13 @@
"purgeIsOn": "是否允许使用Purge方法清理",
"purgeKey": "Purge时使用的X-Edge-Purge-Key",
"stale": "陈旧缓存使用策略",
"key": "主域名配置",
"cacheRefs": ["缓存条件1", "缓存条件2", ...]
}
~~~
其中:
* `缓存条件` - 参考 {json:http_cache_ref}
* `主域名配置` 参考本文“主域名”配置部分
## 示例
### 无缓存条件
@@ -90,3 +92,32 @@
]
}
~~~
## 主域名配置
~~~json
{
"isOn": "true|false",
"scheme": "https|http",
"host": "域名,必须是当前网站已绑定的域名"
}
~~~
### 示例
#### 不使用主域名
~~~json
{
"isOn": false
}
~~~
#### 使用主域名
~~~json
{
"isOn": true,
"scheme": "https",
"host": "example.com"
}
~~~
如果启用主域名,则缓存键值中的域名会被自动换成主域名,清理缓存的时候也需要使用此主域名。

View File

@@ -4,7 +4,9 @@
{
"isPrior": "是否覆盖上级配置",
"isOn": "是否启用配置",
"firewallPolicyId": "WAF策略ID"
"firewallPolicyId": "WAF策略ID",
"ignoreGlobalRules": "是否忽略系统定义的全局规则",
"defaultCaptchaType": "默认人机识别方式可以选none不设置、default默认、oneClick单击验证、slide滑动解锁、geetest极验"
}
~~~
@@ -13,6 +15,8 @@
{
"isPrior": true,
"isOn": true,
"firewallPolicyId": 123
"firewallPolicyId": 123,
"ignoreGlobalRules": false,
"defaultCaptchaType": "none"
}
~~~

View File

@@ -0,0 +1,37 @@
# 容量
## 定义
~~~json
{
"count": "数量",
"unit": "单位"
}
~~~
其中:
* `数量` - 必须是一个整数数字
* `单位` - 有以下几个值:
* `byte` - 字节
* `kb` - KB
* `mb` - MB
* `gb` - GB
* `tb` - TB
* `pb` - PB
* `eb` - EB
## 示例
100MB
~~~
{
"count": 100,
"unit": "mb"
}
~~~
32GB
~~~
{
"count": 32,
"unit": "gb"
}
~~~

View File

@@ -1,17 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: api_method_stat_service.proto
package pb
import (
context "context"
proto "github.com/golang/protobuf/proto"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -25,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 查找某天的统计
type FindAPIMethodStatsWithDayRequest struct {
state protoimpl.MessageState
@@ -308,123 +299,3 @@ func file_api_method_stat_service_proto_init() {
file_api_method_stat_service_proto_goTypes = nil
file_api_method_stat_service_proto_depIdxs = nil
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6
// APIMethodStatServiceClient is the client API for APIMethodStatService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type APIMethodStatServiceClient interface {
// 查找某天的统计
FindAPIMethodStatsWithDay(ctx context.Context, in *FindAPIMethodStatsWithDayRequest, opts ...grpc.CallOption) (*FindAPIMethodStatsWithDayResponse, error)
// 检查是否有统计数据
CountAPIMethodStatsWithDay(ctx context.Context, in *CountAPIMethodStatsWithDayRequest, opts ...grpc.CallOption) (*RPCCountResponse, error)
}
type aPIMethodStatServiceClient struct {
cc grpc.ClientConnInterface
}
func NewAPIMethodStatServiceClient(cc grpc.ClientConnInterface) APIMethodStatServiceClient {
return &aPIMethodStatServiceClient{cc}
}
func (c *aPIMethodStatServiceClient) FindAPIMethodStatsWithDay(ctx context.Context, in *FindAPIMethodStatsWithDayRequest, opts ...grpc.CallOption) (*FindAPIMethodStatsWithDayResponse, error) {
out := new(FindAPIMethodStatsWithDayResponse)
err := c.cc.Invoke(ctx, "/pb.APIMethodStatService/findAPIMethodStatsWithDay", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *aPIMethodStatServiceClient) CountAPIMethodStatsWithDay(ctx context.Context, in *CountAPIMethodStatsWithDayRequest, opts ...grpc.CallOption) (*RPCCountResponse, error) {
out := new(RPCCountResponse)
err := c.cc.Invoke(ctx, "/pb.APIMethodStatService/countAPIMethodStatsWithDay", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// APIMethodStatServiceServer is the server API for APIMethodStatService service.
type APIMethodStatServiceServer interface {
// 查找某天的统计
FindAPIMethodStatsWithDay(context.Context, *FindAPIMethodStatsWithDayRequest) (*FindAPIMethodStatsWithDayResponse, error)
// 检查是否有统计数据
CountAPIMethodStatsWithDay(context.Context, *CountAPIMethodStatsWithDayRequest) (*RPCCountResponse, error)
}
// UnimplementedAPIMethodStatServiceServer can be embedded to have forward compatible implementations.
type UnimplementedAPIMethodStatServiceServer struct {
}
func (*UnimplementedAPIMethodStatServiceServer) FindAPIMethodStatsWithDay(context.Context, *FindAPIMethodStatsWithDayRequest) (*FindAPIMethodStatsWithDayResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method FindAPIMethodStatsWithDay not implemented")
}
func (*UnimplementedAPIMethodStatServiceServer) CountAPIMethodStatsWithDay(context.Context, *CountAPIMethodStatsWithDayRequest) (*RPCCountResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CountAPIMethodStatsWithDay not implemented")
}
func RegisterAPIMethodStatServiceServer(s *grpc.Server, srv APIMethodStatServiceServer) {
s.RegisterService(&_APIMethodStatService_serviceDesc, srv)
}
func _APIMethodStatService_FindAPIMethodStatsWithDay_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(FindAPIMethodStatsWithDayRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(APIMethodStatServiceServer).FindAPIMethodStatsWithDay(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/pb.APIMethodStatService/FindAPIMethodStatsWithDay",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(APIMethodStatServiceServer).FindAPIMethodStatsWithDay(ctx, req.(*FindAPIMethodStatsWithDayRequest))
}
return interceptor(ctx, in, info, handler)
}
func _APIMethodStatService_CountAPIMethodStatsWithDay_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CountAPIMethodStatsWithDayRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(APIMethodStatServiceServer).CountAPIMethodStatsWithDay(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/pb.APIMethodStatService/CountAPIMethodStatsWithDay",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(APIMethodStatServiceServer).CountAPIMethodStatsWithDay(ctx, req.(*CountAPIMethodStatsWithDayRequest))
}
return interceptor(ctx, in, info, handler)
}
var _APIMethodStatService_serviceDesc = grpc.ServiceDesc{
ServiceName: "pb.APIMethodStatService",
HandlerType: (*APIMethodStatServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "findAPIMethodStatsWithDay",
Handler: _APIMethodStatService_FindAPIMethodStatsWithDay_Handler,
},
{
MethodName: "countAPIMethodStatsWithDay",
Handler: _APIMethodStatService_CountAPIMethodStatsWithDay_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "api_method_stat_service.proto",
}

View File

@@ -0,0 +1,148 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.3.0
// - protoc v3.19.4
// source: api_method_stat_service.proto
package pb
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7
const (
APIMethodStatService_FindAPIMethodStatsWithDay_FullMethodName = "/pb.APIMethodStatService/findAPIMethodStatsWithDay"
APIMethodStatService_CountAPIMethodStatsWithDay_FullMethodName = "/pb.APIMethodStatService/countAPIMethodStatsWithDay"
)
// APIMethodStatServiceClient is the client API for APIMethodStatService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type APIMethodStatServiceClient interface {
// 查找某天的统计
FindAPIMethodStatsWithDay(ctx context.Context, in *FindAPIMethodStatsWithDayRequest, opts ...grpc.CallOption) (*FindAPIMethodStatsWithDayResponse, error)
// 检查是否有统计数据
CountAPIMethodStatsWithDay(ctx context.Context, in *CountAPIMethodStatsWithDayRequest, opts ...grpc.CallOption) (*RPCCountResponse, error)
}
type aPIMethodStatServiceClient struct {
cc grpc.ClientConnInterface
}
func NewAPIMethodStatServiceClient(cc grpc.ClientConnInterface) APIMethodStatServiceClient {
return &aPIMethodStatServiceClient{cc}
}
func (c *aPIMethodStatServiceClient) FindAPIMethodStatsWithDay(ctx context.Context, in *FindAPIMethodStatsWithDayRequest, opts ...grpc.CallOption) (*FindAPIMethodStatsWithDayResponse, error) {
out := new(FindAPIMethodStatsWithDayResponse)
err := c.cc.Invoke(ctx, APIMethodStatService_FindAPIMethodStatsWithDay_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *aPIMethodStatServiceClient) CountAPIMethodStatsWithDay(ctx context.Context, in *CountAPIMethodStatsWithDayRequest, opts ...grpc.CallOption) (*RPCCountResponse, error) {
out := new(RPCCountResponse)
err := c.cc.Invoke(ctx, APIMethodStatService_CountAPIMethodStatsWithDay_FullMethodName, in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// APIMethodStatServiceServer is the server API for APIMethodStatService service.
// All implementations should embed UnimplementedAPIMethodStatServiceServer
// for forward compatibility
type APIMethodStatServiceServer interface {
// 查找某天的统计
FindAPIMethodStatsWithDay(context.Context, *FindAPIMethodStatsWithDayRequest) (*FindAPIMethodStatsWithDayResponse, error)
// 检查是否有统计数据
CountAPIMethodStatsWithDay(context.Context, *CountAPIMethodStatsWithDayRequest) (*RPCCountResponse, error)
}
// UnimplementedAPIMethodStatServiceServer should be embedded to have forward compatible implementations.
type UnimplementedAPIMethodStatServiceServer struct {
}
func (UnimplementedAPIMethodStatServiceServer) FindAPIMethodStatsWithDay(context.Context, *FindAPIMethodStatsWithDayRequest) (*FindAPIMethodStatsWithDayResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method FindAPIMethodStatsWithDay not implemented")
}
func (UnimplementedAPIMethodStatServiceServer) CountAPIMethodStatsWithDay(context.Context, *CountAPIMethodStatsWithDayRequest) (*RPCCountResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method CountAPIMethodStatsWithDay not implemented")
}
// UnsafeAPIMethodStatServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to APIMethodStatServiceServer will
// result in compilation errors.
type UnsafeAPIMethodStatServiceServer interface {
mustEmbedUnimplementedAPIMethodStatServiceServer()
}
func RegisterAPIMethodStatServiceServer(s grpc.ServiceRegistrar, srv APIMethodStatServiceServer) {
s.RegisterService(&APIMethodStatService_ServiceDesc, srv)
}
func _APIMethodStatService_FindAPIMethodStatsWithDay_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(FindAPIMethodStatsWithDayRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(APIMethodStatServiceServer).FindAPIMethodStatsWithDay(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: APIMethodStatService_FindAPIMethodStatsWithDay_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(APIMethodStatServiceServer).FindAPIMethodStatsWithDay(ctx, req.(*FindAPIMethodStatsWithDayRequest))
}
return interceptor(ctx, in, info, handler)
}
func _APIMethodStatService_CountAPIMethodStatsWithDay_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CountAPIMethodStatsWithDayRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(APIMethodStatServiceServer).CountAPIMethodStatsWithDay(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: APIMethodStatService_CountAPIMethodStatsWithDay_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(APIMethodStatServiceServer).CountAPIMethodStatsWithDay(ctx, req.(*CountAPIMethodStatsWithDayRequest))
}
return interceptor(ctx, in, info, handler)
}
// APIMethodStatService_ServiceDesc is the grpc.ServiceDesc for APIMethodStatService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var APIMethodStatService_ServiceDesc = grpc.ServiceDesc{
ServiceName: "pb.APIMethodStatService",
HandlerType: (*APIMethodStatServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "findAPIMethodStatsWithDay",
Handler: _APIMethodStatService_FindAPIMethodStatsWithDay_Handler,
},
{
MethodName: "countAPIMethodStatsWithDay",
Handler: _APIMethodStatService_CountAPIMethodStatsWithDay_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "api_method_stat_service.proto",
}

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_acme_provider.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type ACMEProvider struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_acme_provider_account.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type ACMEProviderAccount struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_acme_task.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type ACMETask struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_acme_task_log.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// ACME任务日志
type ACMETaskLog struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_acme_user.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type ACMEUser struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_ad_network.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 高防线路
type ADNetwork struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_ad_package.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 高防产品
type ADPackage struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_ad_package_instance.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 高防产品实例
type ADPackageInstance struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_ad_package_period.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 高防实例有效期
type ADPackagePeriod struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_ad_package_price.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 高防产品价格定义
type ADPackagePrice struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_admin.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type Admin struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_admin_list.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type AdminModuleList struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_admin_module.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type AdminModule struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_api_method_stat.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type APIMethodStat struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_api_node.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type APINode struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_api_token.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// API令牌
type APIToken struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_authority_key.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 版本认证
type AuthorityKey struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_authority_node.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type AuthorityNode struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_client_agent.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type ClientAgent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_client_agent_ip.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type ClientAgentIP struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_client_browser.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type ClientBrowser struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_client_system.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type ClientSystem struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_db_node.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type DBNode struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_db_table.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 数据表信息
type DBTable struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_dns_domain.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type DNSDomain struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_dns_issue.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type DNSIssue struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_dns_provider.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type DNSProvider struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_dns_record.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type DNSRecord struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_dns_route.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type DNSRoute struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_dns_task.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// DNS相关同步任务
type DNSTask struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_file.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type File struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_file_chunk.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type FileChunk struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_formal_client_browser.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type FormalClientBrowser struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_formal_client_system.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type FormalClientSystem struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_http_access_log.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// HTTP访问日志
type HTTPAccessLog struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_http_access_log_policy.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,23 +20,20 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type HTTPAccessLogPolicy struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
IsOn bool `protobuf:"varint,3,opt,name=isOn,proto3" json:"isOn,omitempty"`
Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"`
OptionsJSON []byte `protobuf:"bytes,5,opt,name=optionsJSON,proto3" json:"optionsJSON,omitempty"`
CondsJSON []byte `protobuf:"bytes,6,opt,name=condsJSON,proto3" json:"condsJSON,omitempty"`
IsPublic bool `protobuf:"varint,7,opt,name=isPublic,proto3" json:"isPublic,omitempty"`
FirewallOnly bool `protobuf:"varint,8,opt,name=firewallOnly,proto3" json:"firewallOnly,omitempty"`
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 策略ID
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // 策略名称
IsOn bool `protobuf:"varint,3,opt,name=isOn,proto3" json:"isOn,omitempty"` // 是否启用
Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` // 策略类型
OptionsJSON []byte `protobuf:"bytes,5,opt,name=optionsJSON,proto3" json:"optionsJSON,omitempty"` // 策略选项
CondsJSON []byte `protobuf:"bytes,6,opt,name=condsJSON,proto3" json:"condsJSON,omitempty"` // 记录条件选项
IsPublic bool `protobuf:"varint,7,opt,name=isPublic,proto3" json:"isPublic,omitempty"` // 是否公用
FirewallOnly bool `protobuf:"varint,8,opt,name=firewallOnly,proto3" json:"firewallOnly,omitempty"` // 是否只记录WAF相关访问日志
DisableDefaultDB bool `protobuf:"varint,9,opt,name=disableDefaultDB,proto3" json:"disableDefaultDB,omitempty"` // 停用默认数据库存储
}
func (x *HTTPAccessLogPolicy) Reset() {
@@ -128,13 +124,20 @@ func (x *HTTPAccessLogPolicy) GetFirewallOnly() bool {
return false
}
func (x *HTTPAccessLogPolicy) GetDisableDefaultDB() bool {
if x != nil {
return x.DisableDefaultDB
}
return false
}
var File_models_model_http_access_log_policy_proto protoreflect.FileDescriptor
var file_models_model_http_access_log_policy_proto_rawDesc = []byte{
0x0a, 0x29, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x68,
0x74, 0x74, 0x70, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x70,
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22,
0xe1, 0x01, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f,
0x8d, 0x02, 0x0a, 0x13, 0x48, 0x54, 0x54, 0x50, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x6f,
0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69,
@@ -148,8 +151,10 @@ var file_models_model_http_access_log_policy_proto_rawDesc = []byte{
0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12,
0x22, 0x0a, 0x0c, 0x66, 0x69, 0x72, 0x65, 0x77, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x6c, 0x79, 0x18,
0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x66, 0x69, 0x72, 0x65, 0x77, 0x61, 0x6c, 0x6c, 0x4f,
0x6e, 0x6c, 0x79, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
0x6e, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65,
0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x42, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64,
0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x44, 0x42, 0x42,
0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_http_auth_policy.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
// 服务认证策略
type HTTPAuthPolicy struct {
state protoimpl.MessageState

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_http_cache_policy.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,18 +20,15 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type HTTPCachePolicy struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
IsOn bool `protobuf:"varint,3,opt,name=isOn,proto3" json:"isOn,omitempty"`
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // ID
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // 名称
IsOn bool `protobuf:"varint,3,opt,name=isOn,proto3" json:"isOn,omitempty"` // 是否启用
MaxBytesJSON []byte `protobuf:"bytes,4,opt,name=maxBytesJSON,proto3" json:"maxBytesJSON,omitempty"` // 内容最大尺寸配置
}
func (x *HTTPCachePolicy) Reset() {
@@ -88,18 +84,27 @@ func (x *HTTPCachePolicy) GetIsOn() bool {
return false
}
func (x *HTTPCachePolicy) GetMaxBytesJSON() []byte {
if x != nil {
return x.MaxBytesJSON
}
return nil
}
var File_models_model_http_cache_policy_proto protoreflect.FileDescriptor
var file_models_model_http_cache_policy_proto_rawDesc = []byte{
0x0a, 0x24, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x68,
0x74, 0x74, 0x70, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0x49, 0x0a, 0x0f, 0x48, 0x54,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0x6d, 0x0a, 0x0f, 0x48, 0x54,
0x54, 0x50, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0e, 0x0a,
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d,
0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x4f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52,
0x04, 0x69, 0x73, 0x4f, 0x6e, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
0x04, 0x69, 0x73, 0x4f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x42, 0x79, 0x74, 0x65,
0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x6d, 0x61, 0x78,
0x42, 0x79, 0x74, 0x65, 0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70,
0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_http_cache_task.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,10 +20,6 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type HTTPCacheTask struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache

View File

@@ -1,13 +1,12 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.25.0
// protoc-gen-go v1.31.0
// protoc v3.19.4
// source: models/model_http_cache_task_key.proto
package pb
import (
proto "github.com/golang/protobuf/proto"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
@@ -21,24 +20,21 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type HTTPCacheTaskKey struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 缓存键ID
TaskId int64 `protobuf:"varint,2,opt,name=taskId,proto3" json:"taskId,omitempty"` // 任务ID
Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` // 缓存键
Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` // 操作类型purge|fetch
KeyType string `protobuf:"bytes,5,opt,name=keyType,proto3" json:"keyType,omitempty"` // 键类型key|prefix
IsDone bool `protobuf:"varint,6,opt,name=isDone,proto3" json:"isDone,omitempty"` // 是否已完成
IsDoing bool `protobuf:"varint,9,opt,name=isDoing,proto3" json:"isDoing,omitempty"` // 是否执行中
ErrorsJSON []byte `protobuf:"bytes,7,opt,name=errorsJSON,proto3" json:"errorsJSON,omitempty"` // 错误信息
NodeClusterId int64 `protobuf:"varint,8,opt,name=nodeClusterId,proto3" json:"nodeClusterId,omitempty"` // 所属集群ID
Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // 缓存键ID
TaskId int64 `protobuf:"varint,2,opt,name=taskId,proto3" json:"taskId,omitempty"` // 任务ID
Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` // 缓存键
Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` // 操作类型purge|fetch
KeyType string `protobuf:"bytes,5,opt,name=keyType,proto3" json:"keyType,omitempty"` // 键类型key|prefix
IsDone bool `protobuf:"varint,6,opt,name=isDone,proto3" json:"isDone,omitempty"` // 是否已完成
IsDoing bool `protobuf:"varint,9,opt,name=isDoing,proto3" json:"isDoing,omitempty"` // 是否执行中
ErrorsJSON []byte `protobuf:"bytes,7,opt,name=errorsJSON,proto3" json:"errorsJSON,omitempty"` // 错误信息
NodeClusterId int64 `protobuf:"varint,8,opt,name=nodeClusterId,proto3" json:"nodeClusterId,omitempty"` // 所属集群ID
NodeCluster *NodeCluster `protobuf:"bytes,30,opt,name=nodeCluster,proto3" json:"nodeCluster,omitempty"` // 所属集群,不一定有内容
}
func (x *HTTPCacheTaskKey) Reset() {
@@ -136,29 +132,41 @@ func (x *HTTPCacheTaskKey) GetNodeClusterId() int64 {
return 0
}
func (x *HTTPCacheTaskKey) GetNodeCluster() *NodeCluster {
if x != nil {
return x.NodeCluster
}
return nil
}
var File_models_model_http_cache_task_key_proto protoreflect.FileDescriptor
var file_models_model_http_cache_task_key_proto_rawDesc = []byte{
0x0a, 0x26, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x68,
0x74, 0x74, 0x70, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6b,
0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x22, 0xf2, 0x01, 0x0a,
0x10, 0x48, 0x54, 0x54, 0x50, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x4b, 0x65,
0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69,
0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74,
0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12,
0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
0x52, 0x07, 0x6b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73, 0x44,
0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x44, 0x6f, 0x6e,
0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x44, 0x6f, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01,
0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x44, 0x6f, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x65,
0x72, 0x72, 0x6f, 0x72, 0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52,
0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x12, 0x24, 0x0a, 0x0d, 0x6e,
0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01,
0x28, 0x03, 0x52, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49,
0x64, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x1f, 0x6d, 0x6f,
0x64, 0x65, 0x6c, 0x73, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f,
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa5, 0x02,
0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x43, 0x61, 0x63, 0x68, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x4b,
0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02,
0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65,
0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04,
0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x73,
0x44, 0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x44, 0x6f,
0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x44, 0x6f, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20,
0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x44, 0x6f, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a,
0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c,
0x52, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x4a, 0x53, 0x4f, 0x4e, 0x12, 0x24, 0x0a, 0x0d,
0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x18, 0x08, 0x20,
0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
0x49, 0x64, 0x12, 0x31, 0x0a, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65,
0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x6f, 0x64,
0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6c,
0x75, 0x73, 0x74, 0x65, 0x72, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -176,13 +184,15 @@ func file_models_model_http_cache_task_key_proto_rawDescGZIP() []byte {
var file_models_model_http_cache_task_key_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_models_model_http_cache_task_key_proto_goTypes = []interface{}{
(*HTTPCacheTaskKey)(nil), // 0: pb.HTTPCacheTaskKey
(*NodeCluster)(nil), // 1: pb.NodeCluster
}
var file_models_model_http_cache_task_key_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
1, // 0: pb.HTTPCacheTaskKey.nodeCluster:type_name -> pb.NodeCluster
1, // [1:1] is the sub-list for method output_type
1, // [1:1] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_models_model_http_cache_task_key_proto_init() }
@@ -190,6 +200,7 @@ func file_models_model_http_cache_task_key_proto_init() {
if File_models_model_http_cache_task_key_proto != nil {
return
}
file_models_model_node_cluster_proto_init()
if !protoimpl.UnsafeEnabled {
file_models_model_http_cache_task_key_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*HTTPCacheTaskKey); i {

Some files were not shown because too many files have changed in this diff Show More