使用 base32 解码传入的密钥;优化调试接口返回内容;新增 RUN_MODE,根据环境变量确定是否要公开调试接口

This commit is contained in:
2025-05-22 14:52:31 +08:00
parent 8c824595f4
commit 12038f0af7
6 changed files with 71 additions and 33 deletions

View File

@@ -1,13 +0,0 @@
# 应用配置
APP_CTRL_PORT=18080
APP_DATA_PORT=18081
APP_WEB_PORT=8848
APP_LOG_MODE=dev# dev | test
# 数据库配置
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=app
DB_USERNAME=proxy
DB_PASSWORD=proxy
DB_TIMEZONE=Asia/Shanghai

View File

@@ -4,6 +4,7 @@ import (
"context"
"crypto/aes"
"crypto/cipher"
"encoding/base32"
"encoding/base64"
"encoding/json"
"fmt"
@@ -17,10 +18,16 @@ type SecuredReq struct {
Timestamp int64 `json:"timestamp"`
}
func Decrypt[T any](req *SecuredReq, secret string) (resp *T, err error) {
func Decrypt[T any](req *SecuredReq, secretStr string) (resp *T, err error) {
var encoding = base32.StdEncoding.WithPadding(base32.NoPadding)
secret, err := encoding.DecodeString(secretStr)
if err != nil {
return nil, fmt.Errorf("解码密钥失败: %w", err)
}
// 解密请求
block, err := aes.NewCipher([]byte(secret))
block, err := aes.NewCipher(secret)
if err != nil {
return nil, err
}
@@ -30,7 +37,10 @@ func Decrypt[T any](req *SecuredReq, secret string) (resp *T, err error) {
return nil, err
}
var nonce = []byte(req.Nonce)
nonce, err := encoding.DecodeString(req.Nonce)
if err != nil {
return nil, err
}
content, err := base64.StdEncoding.DecodeString(req.Content)
if err != nil {

11
gateway/env/env.go vendored
View File

@@ -10,6 +10,8 @@ import (
)
var (
RunMode = "dev" // 运行模式dev: 开发模式prod: 生产模式
AppCtrlPort uint16 = 18080
AppDataPort uint16 = 18081
AppWebPort uint16 = 8848
@@ -38,6 +40,15 @@ func Init() {
}
var value string
value = os.Getenv("RUN_MODE")
switch value {
case "dev", "prod":
RunMode = value
case "":
default:
panic(fmt.Sprintf("环境变量 RUN_MODE 格式错误: %s", value))
}
value = os.Getenv("APP_CTRL_PORT")
if value != "" {
appCtrlPort, err := strconv.Atoi(value)

View File

@@ -15,7 +15,10 @@ type InfoResp struct {
CtrlConnections int `json:"ctrl_connections"`
DataConnections int `json:"data_connections"`
Edges []EdgeResp `json:"edges"`
// Edges []EdgeResp `json:"edges"`
Assigns map[uint16]int32 `json:"assigns"`
Edges map[int32]uint16 `json:"edges"`
Permits map[int32]*core.Permit `json:"permits"`
}
type EdgeResp struct {
@@ -26,18 +29,36 @@ type EdgeResp struct {
func Info(c *fiber.Ctx) error {
var edges = make([]EdgeResp, 0)
app.Edges.Range(func(id int32, port uint16) bool {
permit, ok := app.Permits.Load(id)
if !ok {
return true
}
// var edges = make([]EdgeResp, 0)
// app.Edges.Range(func(id int32, port uint16) bool {
// permit, ok := app.Permits.Load(id)
// if !ok {
// return true
// }
//
// edges = append(edges, EdgeResp{
// Id: id,
// Port: port,
// Permit: permit,
// })
// return true
// })
edges = append(edges, EdgeResp{
Id: id,
Port: port,
Permit: permit,
})
var assigns = make(map[uint16]int32)
app.Assigns.Range(func(port uint16, id int32) bool {
assigns[port] = id
return true
})
var edges = make(map[int32]uint16)
app.Edges.Range(func(id int32, port uint16) bool {
edges[id] = port
return true
})
var permits = make(map[int32]*core.Permit)
app.Permits.Range(func(id int32, permit *core.Permit) bool {
permits[id] = permit
return true
})
@@ -48,6 +69,8 @@ func Info(c *fiber.Ctx) error {
UserConnections: int(app.UserConnWg.Count()),
CtrlConnections: int(app.CtrlConnWg.Count()),
DataConnections: int(app.DataConnWg.Count()),
Assigns: assigns,
Edges: edges,
Permits: permits,
})
}

View File

@@ -2,15 +2,18 @@ package web
import (
"github.com/gofiber/fiber/v2"
"proxy-server/gateway/env"
"proxy-server/gateway/web/handlers"
)
func Router(r *fiber.App) {
var debug = r.Group("/debug")
debug.Get("/info", handlers.Info)
debug.Get("/consuming/list", handlers.GetConsuming)
debug.Get("/consuming/reset", handlers.RestConsuming)
var api = r.Group("/api")
api.Post("/permit", handlers.Permit)
if env.RunMode == "dev" {
var debug = r.Group("/debug")
debug.Get("/info", handlers.Info)
debug.Get("/consuming/list", handlers.GetConsuming)
debug.Get("/consuming/reset", handlers.RestConsuming)
}
}

View File

@@ -1,6 +1,8 @@
package web
import (
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/recover"
"log/slog"
"proxy-server/gateway/env"
"strconv"
@@ -23,6 +25,8 @@ func (s *Server) Run() error {
})
// 配置中间件和路由
s.web.Use(recover.New())
s.web.Use(logger.New())
Router(s.web)
// 启动服务