diff --git a/cmd/gateway/.env.example b/cmd/gateway/.env.example deleted file mode 100644 index 2b7e1d3..0000000 --- a/cmd/gateway/.env.example +++ /dev/null @@ -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 diff --git a/gateway/core/security.go b/gateway/core/security.go index 3db85d8..65d02d0 100644 --- a/gateway/core/security.go +++ b/gateway/core/security.go @@ -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 { diff --git a/gateway/env/env.go b/gateway/env/env.go index 99004fb..b19bb6b 100644 --- a/gateway/env/env.go +++ b/gateway/env/env.go @@ -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) diff --git a/gateway/web/handlers/info.go b/gateway/web/handlers/info.go index cd9a706..38bb11c 100644 --- a/gateway/web/handlers/info.go +++ b/gateway/web/handlers/info.go @@ -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, }) } diff --git a/gateway/web/router.go b/gateway/web/router.go index 3f64e4c..db207b0 100644 --- a/gateway/web/router.go +++ b/gateway/web/router.go @@ -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) + } } diff --git a/gateway/web/web.go b/gateway/web/web.go index 04cbb97..eb0db0a 100644 --- a/gateway/web/web.go +++ b/gateway/web/web.go @@ -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) // 启动服务