From 23ece08076f35dff6c1d8de4d9e1b49eeb91f4b7 Mon Sep 17 00:00:00 2001 From: Bot Date: Thu, 16 Apr 2026 12:09:49 +0800 Subject: [PATCH] Remove WebSocket SSH terminal API implementation --- cmd/dashboard/controller/controller.go | 2 - cmd/dashboard/controller/terminal.go | 106 ------------------------- 2 files changed, 108 deletions(-) delete mode 100644 cmd/dashboard/controller/terminal.go diff --git a/cmd/dashboard/controller/controller.go b/cmd/dashboard/controller/controller.go index b58dca5..cb731b8 100644 --- a/cmd/dashboard/controller/controller.go +++ b/cmd/dashboard/controller/controller.go @@ -83,8 +83,6 @@ func routers(r *gin.Engine, frontendDist fs.FS) { auth.GET("/refresh-token", authMiddleware.RefreshHandler) - auth.POST("/terminal", commonHandler(createTerminal)) - auth.GET("/ws/terminal/:id", commonHandler(terminalStream)) auth.GET("/file", commonHandler(createFM)) auth.GET("/ws/file/:id", commonHandler(fmStream)) diff --git a/cmd/dashboard/controller/terminal.go b/cmd/dashboard/controller/terminal.go deleted file mode 100644 index 7899f1b..0000000 --- a/cmd/dashboard/controller/terminal.go +++ /dev/null @@ -1,106 +0,0 @@ -package controller - -import ( - "time" - - "github.com/gin-gonic/gin" - "github.com/goccy/go-json" - "github.com/gorilla/websocket" - "github.com/hashicorp/go-uuid" - - "github.com/nezhahq/nezha/model" - "github.com/nezhahq/nezha/pkg/websocketx" - "github.com/nezhahq/nezha/proto" - "github.com/nezhahq/nezha/service/rpc" - "github.com/nezhahq/nezha/service/singleton" -) - -// Create web ssh terminal -// @Summary Create web ssh terminal -// @Description Create web ssh terminal -// @Tags auth required -// @Accept json -// @Param terminal body model.TerminalForm true "TerminalForm" -// @Produce json -// @Success 200 {object} model.CreateTerminalResponse -// @Router /terminal [post] -func createTerminal(c *gin.Context) (*model.CreateTerminalResponse, error) { - var createTerminalReq model.TerminalForm - if err := c.ShouldBind(&createTerminalReq); err != nil { - return nil, err - } - - server, _ := singleton.ServerShared.Get(createTerminalReq.ServerID) - if server == nil || server.TaskStream == nil { - return nil, singleton.Localizer.ErrorT("server not found or not connected") - } - - if !server.HasPermission(c) { - return nil, singleton.Localizer.ErrorT("permission denied") - } - - streamId, err := uuid.GenerateUUID() - if err != nil { - return nil, err - } - - rpc.NezhaHandlerSingleton.CreateStream(streamId) - - terminalData, _ := json.Marshal(&model.TerminalTask{ - StreamID: streamId, - }) - if err := server.TaskStream.Send(&proto.Task{ - Type: model.TaskTypeTerminalGRPC, - Data: string(terminalData), - }); err != nil { - return nil, err - } - - return &model.CreateTerminalResponse{ - SessionID: streamId, - ServerID: server.ID, - ServerName: server.Name, - }, nil -} - -// TerminalStream web ssh terminal stream -// @Summary Terminal stream -// @Description Terminal stream -// @Tags auth required -// @Param id path string true "Stream UUID" -// @Success 200 {object} model.CommonResponse[any] -// @Router /ws/terminal/{id} [get] -func terminalStream(c *gin.Context) (any, error) { - streamId := c.Param("id") - if _, err := rpc.NezhaHandlerSingleton.GetStream(streamId); err != nil { - return nil, err - } - defer rpc.NezhaHandlerSingleton.CloseStream(streamId) - - wsConn, err := upgrader.Upgrade(c.Writer, c.Request, nil) - if err != nil { - return nil, newWsError("%v", err) - } - defer wsConn.Close() - conn := websocketx.NewConn(wsConn) - - go func() { - // PING 保活 - for { - if err = conn.WriteMessage(websocket.PingMessage, []byte{}); err != nil { - return - } - time.Sleep(time.Second * 10) - } - }() - - if err = rpc.NezhaHandlerSingleton.UserConnected(streamId, conn); err != nil { - return nil, newWsError("%v", err) - } - - if err = rpc.NezhaHandlerSingleton.StartStream(streamId, time.Second*10); err != nil { - return nil, newWsError("%v", err) - } - - return nil, newWsError("") -}