diff --git a/README.md b/README.md index b35a56c..4865bc9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +## TODO + +- 连接断开时尽量由 + ## 开发相关 ### 目录结构 diff --git a/gateway/core/auth.go b/gateway/core/auth.go index 50b9fc3..bdf78bb 100644 --- a/gateway/core/auth.go +++ b/gateway/core/auth.go @@ -8,3 +8,8 @@ type Permit struct { Username *string `json:"username"` Password *string `json:"password"` } + +type PermitDef struct { + Id int32 `json:"id"` + Permit +} diff --git a/gateway/fwd/ctrl.go b/gateway/fwd/ctrl.go index 9476989..9e093dc 100644 --- a/gateway/fwd/ctrl.go +++ b/gateway/fwd/ctrl.go @@ -103,7 +103,7 @@ func processCtrlConn(_ctx context.Context, conn net.Conn) (err error) { // 读取命令 cmd, err := reader.ReadByte() - if errors.Is(err, syscall.WSAECONNRESET) { + if errors.Is(err, syscall.ECONNRESET) || errors.Is(err, syscall.WSAECONNRESET) { slog.Debug("节点重置了控制通道连接(WSAECONNRESET)") return nil } diff --git a/gateway/report/report.go b/gateway/report/report.go index e97e50c..c43ecbd 100644 --- a/gateway/report/report.go +++ b/gateway/report/report.go @@ -23,8 +23,9 @@ func Online(name string) (err error) { } var body struct { - Id int32 `json:"id"` - Secret string `json:"secret"` + Id int32 `json:"id"` + Secret string `json:"secret"` + Permits []core.PermitDef `json:"permits"` } err = json.Unmarshal([]byte(resp), &body) if err != nil { @@ -33,6 +34,9 @@ func Online(name string) (err error) { app.Id = body.Id app.PlatformSecret = body.Secret + for _, def := range body.Permits { + app.Permits.Store(def.Id, &def.Permit) + } return nil } diff --git a/gateway/web/handlers/auth.go b/gateway/web/handlers/auth.go index 40bc04e..e552ebb 100644 --- a/gateway/web/handlers/auth.go +++ b/gateway/web/handlers/auth.go @@ -6,10 +6,7 @@ import ( "proxy-server/gateway/core" ) -type PermitReq struct { - Id int32 `json:"id"` - core.Permit -} +type PermitReq []core.PermitDef func Permit(ctx *fiber.Ctx) (err error) { @@ -20,7 +17,7 @@ func Permit(ctx *fiber.Ctx) (err error) { } // 获取请求参数 - req, err := core.Decrypt[[]PermitReq](&sec, app.PlatformSecret) + req, err := core.Decrypt[PermitReq](&sec, app.PlatformSecret) if err != nil { return err }