From 3d5a1e5892989ac3c920d396cc52d9d158d692c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=9D=E5=B0=98?= <237809796@qq.com> Date: Thu, 30 Apr 2026 22:25:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E6=A0=8F=E9=AB=98=E5=BA=A6=E5=AF=B9=E9=BD=90+=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E7=BB=9F=E4=B8=80+=E8=BF=9C=E7=A8=8B=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E6=9E=B6=E6=9E=84+=E8=87=AA=E5=8A=A8=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 工具栏:面包屑与右侧组件像素级等高(:deep 34px)、合并重复search handler、统一分隔符样式、删除死代码 - 面板对齐:三面板header统一padding/font-size、文件列表分页固定底部(自定义紧凑)、表头默认隐藏、滚动条统一样式 - 预览区:始终显示空白预览面板、重启自动恢复上次打开文件 - 收藏夹:简化计数显示(共N项) - 远程连接:ConnectionIndicator自适应UI(无远程显示mini云图标)、ConnectionDialog支持编辑配置、transport抽象层(本地Wails/远程HTTP双模式)、agent后端模块 --- cmd/agent/clipboard_20260429_195256.png | Bin 0 -> 89798 bytes cmd/agent/main.go | 105 +++++++ configs/agent.yaml | 29 ++ go.mod | 4 +- go.sum | 4 + internal/agent/config/config.go | 108 +++++++ internal/agent/handler/file_handler.go | 176 +++++++++++ internal/agent/handler/handler.go | 37 +++ internal/agent/handler/server_handler.go | 64 ++++ internal/agent/handler/system_handler.go | 113 +++++++ internal/agent/middleware/auth.go | 61 ++++ internal/agent/model/response.go | 41 +++ internal/filesystem/asset_handler.go | 31 +- internal/filesystem/file_lock.go | 3 + internal/filesystem/file_lock_linux.go | 19 ++ web/src/api/connection-manager.ts | 199 +++++++++++++ web/src/api/http-transport.ts | 136 +++++++++ web/src/api/system.ts | 280 +++--------------- web/src/api/transport.ts | 71 +++++ web/src/api/wails-transport.ts | 139 +++++++++ .../components/ConnectionDialog.vue | 77 +++++ .../components/ConnectionIndicator.vue | 270 +++++++++++++++++ .../FileSystem/components/FileEditorPanel.vue | 84 ++++-- .../FileSystem/components/FileListPanel.vue | 95 +++++- .../FileSystem/components/PathBreadcrumb.vue | 9 +- .../FileSystem/components/Sidebar.vue | 11 +- .../FileSystem/components/Toolbar.vue | 144 +++++---- .../FileSystem/composables/useCommonPaths.ts | 76 ++--- .../FileSystem/composables/useFilePreview.ts | 41 ++- web/src/components/FileSystem/index.vue | 99 +++++-- web/src/stores/connection.ts | 44 +++ web/src/utils/constants.js | 4 + web/src/utils/markedExtensions.ts | 93 +++++- web/src/wailsjs/wailsjs/go/main/App.d.ts | 39 --- web/src/wailsjs/wailsjs/go/main/App.js | 76 ----- web/src/wailsjs/wailsjs/go/models.ts | 82 ----- 36 files changed, 2236 insertions(+), 628 deletions(-) create mode 100644 cmd/agent/clipboard_20260429_195256.png create mode 100644 cmd/agent/main.go create mode 100644 configs/agent.yaml create mode 100644 internal/agent/config/config.go create mode 100644 internal/agent/handler/file_handler.go create mode 100644 internal/agent/handler/handler.go create mode 100644 internal/agent/handler/server_handler.go create mode 100644 internal/agent/handler/system_handler.go create mode 100644 internal/agent/middleware/auth.go create mode 100644 internal/agent/model/response.go create mode 100644 internal/filesystem/file_lock_linux.go create mode 100644 web/src/api/connection-manager.ts create mode 100644 web/src/api/http-transport.ts create mode 100644 web/src/api/transport.ts create mode 100644 web/src/api/wails-transport.ts create mode 100644 web/src/components/FileSystem/components/ConnectionDialog.vue create mode 100644 web/src/components/FileSystem/components/ConnectionIndicator.vue create mode 100644 web/src/stores/connection.ts diff --git a/cmd/agent/clipboard_20260429_195256.png b/cmd/agent/clipboard_20260429_195256.png new file mode 100644 index 0000000000000000000000000000000000000000..3b73c124dc484fef5533cba10428896228bf4eaf GIT binary patch literal 89798 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 500 { // 硬限制 500 条 + break + } + files[i] = f + n++ + } + files = files[:n] + } + return c.JSON(http.StatusOK, model.OK(files)) +} + +// ReadFile 读取文件文本内容 +func (h *Handler) ReadFile(c echo.Context) error { + path := getPath(c) + content, err := h.fsSvc.ReadFile(path) + if err != nil { + return c.JSON(http.StatusOK, model.InternalError(err.Error())) + } + return c.JSON(http.StatusOK, model.OK(map[string]string{ + "content": content, + })) +} + +// WriteFile 写入文件文本内容 +func (h *Handler) WriteFile(c echo.Context) error { + path := getPath(c) + var req writeFileReq + if err := c.Bind(&req); err != nil { + return c.JSON(http.StatusBadRequest, model.BadRequest("无效请求体")) + } + if err := h.fsSvc.WriteFile(path, req.Content); err != nil { + return c.JSON(http.StatusInternalServerError, model.InternalError(err.Error())) + } + return c.JSON(http.StatusOK, model.NoContent()) +} + +// Create 创建文件或目录 +func (h *Handler) Create(c echo.Context) error { + parentPath := getPath(c) + var req createReq + if err := c.Bind(&req); err != nil { + return c.JSON(http.StatusBadRequest, model.BadRequest("无效请求体")) + } + + req.Name = strings.TrimSpace(req.Name) + if req.Name == "" { + return c.JSON(http.StatusBadRequest, model.BadRequest("名称不能为空")) + } + + var result *filesystem.FileOperationResult + var err error + + fullPath := filepath.Join(parentPath, req.Name) + + switch req.Type { + case "dir": + result, err = h.fsSvc.CreateDir(fullPath) + default: + result, err = h.fsSvc.CreateFile(fullPath) + } + + if err != nil { + return c.JSON(http.StatusInternalServerError, model.InternalError(err.Error())) + } + return c.JSON(http.StatusCreated, model.OK(result)) +} + +// Delete 删除文件或目录 +func (h *Handler) Delete(c echo.Context) error { + path := getPath(c) + result, err := h.fsSvc.DeletePath(path) + if err != nil { + return c.JSON(http.StatusInternalServerError, model.InternalError(err.Error())) + } + return c.JSON(http.StatusOK, model.OK(result)) +} + +// Rename 重命名文件或目录 +func (h *Handler) Rename(c echo.Context) error { + oldPath := getPath(c) + var req renameReq + if err := c.Bind(&req); err != nil { + return c.JSON(http.StatusBadRequest, model.BadRequest("无效请求体")) + } + req.NewPath = strings.TrimSpace(req.NewPath) + if req.NewPath == "" { + return c.JSON(http.StatusBadRequest, model.BadRequest("新路径不能为空")) + } + cleanNew := filepath.Clean(req.NewPath) + if strings.Contains(cleanNew, "..") { + return c.JSON(http.StatusBadRequest, model.BadRequest("新路径不允许包含 ..")) + } + result, err := h.fsSvc.RenamePath(oldPath, cleanNew) + if err != nil { + return c.JSON(http.StatusInternalServerError, model.InternalError(err.Error())) + } + return c.JSON(http.StatusOK, model.OK(result)) +} + +// Upload 上传 Base64 编码的二进制文件 +func (h *Handler) Upload(c echo.Context) error { + path := getPath(c) + var req uploadReq + if err := c.Bind(&req); err != nil { + return c.JSON(http.StatusBadRequest, model.BadRequest("无效请求体")) + } + if req.Content == "" { + return c.JSON(http.StatusBadRequest, model.BadRequest("内容不能为空")) + } + if err := h.fsSvc.SaveBase64File(path, req.Content); err != nil { + return c.JSON(http.StatusInternalServerError, model.InternalError(err.Error())) + } + return c.JSON(http.StatusOK, model.NoContent()) +} + +// DetectType 通过文件内容检测类型 +func (h *Handler) DetectType(c echo.Context) error { + path := getPath(c) + info, err := h.fsSvc.DetectFileTypeByContent(path) + if err != nil { + return c.JSON(http.StatusOK, model.InternalError(err.Error())) + } + return c.JSON(http.StatusOK, model.OK(info)) +} diff --git a/internal/agent/handler/handler.go b/internal/agent/handler/handler.go new file mode 100644 index 0000000..21a6a35 --- /dev/null +++ b/internal/agent/handler/handler.go @@ -0,0 +1,37 @@ +package handler + +import ( + "net/http/httputil" + "net/url" + "path/filepath" + + "u-desk/internal/agent/config" + "u-desk/internal/filesystem" + + "github.com/labstack/echo/v4" +) + +type Handler struct { + fsSvc *filesystem.FileSystemService + cfg *config.Config + fileProxy *httputil.ReverseProxy +} + +func New(fsSvc *filesystem.FileSystemService, cfg *config.Config) *Handler { + fileTarget, _ := url.Parse(cfg.FileServerAddr() + "/localfs/") + return &Handler{ + fsSvc: fsSvc, + cfg: cfg, + fileProxy: httputil.NewSingleHostReverseProxy(fileTarget), + } +} + +// getPath 从 query 参数提取并规范化文件路径 +func getPath(c echo.Context) string { + raw := c.QueryParam("path") + if raw == "" { + return "" + } + // URL 已被 Echo 自动 decode,只需转换路径分隔符 + return filepath.FromSlash(raw) +} diff --git a/internal/agent/handler/server_handler.go b/internal/agent/handler/server_handler.go new file mode 100644 index 0000000..a9d0dbb --- /dev/null +++ b/internal/agent/handler/server_handler.go @@ -0,0 +1,64 @@ +package handler + +import ( + "fmt" + "io" + "net/http" + "net/url" + "path/filepath" + "strings" + + "github.com/labstack/echo/v4" +) + +// FileServerProxy 反向代理到内置文件服务器(用于媒体预览) +func (h *Handler) FileServerProxy(c echo.Context) error { + rawPath := c.Param("*") + if rawPath == "" { + return c.String(http.StatusBadRequest, "缺少文件路径") + } + + clean := filepath.Clean(rawPath) + if strings.Contains(clean, "..") { + return c.String(http.StatusForbidden, "路径不允许包含 ..") + } + + // 防止多重 /localfs/ 前缀(循环去除所有) + targetPath := filepath.ToSlash(clean) + for strings.HasPrefix(targetPath, "localfs/") || strings.HasPrefix(targetPath, "localfs\\") { + targetPath = strings.TrimPrefix(targetPath, "localfs/") + targetPath = strings.TrimPrefix(targetPath, "localfs\\") + } + c.Request().URL.Path = "/localfs/" + targetPath + h.fileProxy.ServeHTTP(c.Response(), c.Request()) + return nil +} + +// HTMLPreviewProxy 代理 HTML 预览请求(直连内部服务器,避免 ReverseProxy 路径拼接问题) +func (h *Handler) HTMLPreviewProxy(c echo.Context) error { + rawPath := c.QueryParam("path") + if rawPath == "" { + return c.String(http.StatusBadRequest, "缺少 path 参数") + } + clean := filepath.Clean(rawPath) + if strings.Contains(clean, "..") { + return c.String(http.StatusForbidden, "路径不允许包含 ..") + } + theme := c.QueryParam("theme") + + targetURL := fmt.Sprintf("http://localhost:8073/localfs/html-preview?path=%s&theme=%s", + url.QueryEscape(clean), url.QueryEscape(theme)) + + resp, err := http.Get(targetURL) + if err != nil { + return c.String(http.StatusBadGateway, "内部服务器不可用") + } + defer resp.Body.Close() + + for k, v := range resp.Header { + c.Response().Header()[k] = v + } + c.Response().WriteHeader(resp.StatusCode) + io.Copy(c.Response(), resp.Body) + return nil +} diff --git a/internal/agent/handler/system_handler.go b/internal/agent/handler/system_handler.go new file mode 100644 index 0000000..d11160f --- /dev/null +++ b/internal/agent/handler/system_handler.go @@ -0,0 +1,113 @@ +package handler + +import ( + "net/http" + "os" + "runtime" + "strings" + + "u-desk/internal/agent/model" + + "github.com/labstack/echo/v4" +) + +// Ping 健康检查 +func (h *Handler) Ping(c echo.Context) error { + return c.JSON(http.StatusOK, model.OK(map[string]string{ + "status": "ok", + })) +} + +// Info 返回 Agent 信息 +func (h *Handler) Info(c echo.Context) error { + hostname, _ := os.Hostname() + return c.JSON(http.StatusOK, model.OK(map[string]interface{}{ + "version": "0.1.0", + "os": runtime.GOOS, + "arch": runtime.GOARCH, + "hostname": hostname, + })) +} + +// CommonPaths 返回常用系统路径 +func (h *Handler) CommonPaths(c echo.Context) error { + paths := map[string]string{} + + home, _ := os.UserHomeDir() + if home != "" { + paths["home"] = home + paths["desktop"] = home + "/Desktop" + paths["documents"] = home + "/Documents" + paths["downloads"] = home + "/Downloads" + } + + // 根据平台添加盘符/根路径 + if runtime.GOOS == "windows" { + for _, drive := range "ABCDEFGHIJKLMNOPQRSTUVWXYZ" { + _, err := os.Stat(string(drive) + ":\\") + if err == nil { + paths["drive_"+strings.ToLower(string(drive))] = string(drive) + ":\\" + } + } + } else { + paths["root"] = "/" + _, err := os.Stat("/home") + if err == nil { + paths["users"] = "/home" + } + } + + return c.JSON(http.StatusOK, model.OK(paths)) +} + +// Drives 返回可用磁盘列表 +func (h *Handler) Drives(c echo.Context) error { + type DriveInfo struct { + Name string `json:"name"` + Path string `json:"path"` + FsType string `json:"fs_type,omitempty"` + Total uint64 `json:"total"` + Free uint64 `json:"free"` + } + + var drives []DriveInfo + + if runtime.GOOS == "windows" { + for _, drive := range "ABCDEFGHIJKLMNOPQRSTUVWXYZ" { + drivePath := string(drive) + ":\\" + if _, err := os.Stat(drivePath); err != nil { + continue + } + drives = append(drives, DriveInfo{ + Name: strings.ToLower(string(drive)), + Path: drivePath, + Total: 0, + Free: 0, + }) + } + } else { + parts, err := os.ReadDir("/") + if err == nil { + for _, p := range parts { + name := p.Name() + if len(name) == 2 && name[0] != '.' && name[1] != '.' && p.IsDir() { + // 可能是挂载点 + fullPath := "/" + name + if stat, err := os.Stat(fullPath); err == nil && stat.IsDir() { + drives = append(drives, DriveInfo{ + Name: name, + Path: fullPath, + }) + _ = stat + } + } + } + } + // 至少返回根目录 + if len(drives) == 0 { + drives = append(drives, DriveInfo{Name: "/", Path: "/"}) + } + } + + return c.JSON(http.StatusOK, model.OK(drives)) +} diff --git a/internal/agent/middleware/auth.go b/internal/agent/middleware/auth.go new file mode 100644 index 0000000..1528c61 --- /dev/null +++ b/internal/agent/middleware/auth.go @@ -0,0 +1,61 @@ +package middleware + +import ( + "crypto/subtle" + "net/http" + "strings" + "time" + + "github.com/labstack/echo/v4" +) + +const cookieName = "fs_token" + +func Auth(token string) echo.MiddlewareFunc { + if token == "" { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + return next(c) + } + } + } + + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + // 1. Authorization header(API 调用,首选) + auth := c.Request().Header.Get("Authorization") + if len(auth) >= 7 && strings.HasPrefix(auth, "Bearer ") && + subtle.ConstantTimeCompare([]byte(auth[7:]), []byte(token)) == 1 { + setAuthCookie(c, token) + return next(c) + } + // 2. Cookie(/