dsh-workspace-lock:爲 DSH 工作區文件夾加界面密碼鎖

前言

在 DSH 裏,側欄按工作區文件夾組織會話。多人共用一臺機器、或偶爾把界面留給別人看時,某個文件夾裏的對話可能被隨手點開。逐個會話加鎖既沒有統一入口,也和「整夾保密」的需求對不上。社區插件 dsh-workspace-lock(維護者 sgeerwang-hub)針對的是:按工作區文件夾上鎖——鎖上後側欄收起該文件夾、其下會話整批隱藏,鎖/解鎖集中在「工作區鎖」面板;支持總密碼、自動重新上鎖,以及 QQ 郵箱找回。下面介紹它做什麼、如何安裝使用,以及能力邊界。

這是什麼

dsh-workspace-lock 是 DSH 的 web profile 插件,分類爲 admin-security。它給工作區文件夾加一道界面密碼鎖,不是磁盤加密:鎖定後 DSH 裏看不見也進不去該文件夾下的會話,但本機其他程序、命令行、備份仍能讀到明文——防的是別人隨手點開你的 DSH。

當前 npm/GitHub 包版本爲 0.2.0,許可證 MIT,要求 Node ≥ 20。宿主端僅使用 Node 內置模塊(crypto / fs / os / path / tls),無原生依賴,也不需要外部服務。

核心功能

按文件夾鎖定,而非逐個會話

鎖定對象是整個工作區文件夾。一鎖上,側欄裏該文件夾立刻收起,裏面的會話行整批隱藏——看不見、點不開。鎖/解鎖都在「工作區鎖」面板完成;沒有「一次一次彈密碼頁」的逐個會話鎖。

面板裏每個文件夾一行,對應三種操作:

  • 鎖定
  • 解鎖(只在本頁):僅當前頁面有效,刷新後重新鎖
  • 解除鎖定(永久,需要密碼):從狀態文件刪掉該路徑,纔是真正解除

總密碼與自動上鎖

工作區使用統一的總密碼。默認 15 分鐘無操作自動重新上鎖,可在面板修改;設爲 0 表示不自動鎖。

QQ 郵箱找回

忘記密碼時,可配置 QQ 郵箱收驗證碼重置。需在 QQ 郵箱設置裏開啓 POP3/SMTP 並生成授權碼(不是登錄密碼)。改找回郵箱需要總密碼,避免他人把自己的郵箱填進面板後走找回流程換掉鎖。

驗證碼爲 6 位、10 分鐘有效、最多試 5 次。鎖定頁也有「忘記密碼?用郵箱找回」,不必先退回面板。

側欄行爲與技術落點

DSH 側欄瀏覽區只給插件留了會話行插槽,沒有文件夾行插槽,也沒有「隱藏某工作區會話」的官方鉤子。因此收起文件夾、隱藏會話行部分需貼近 DOM:根據插槽 props 算出鎖定路徑下的會話與工作區,用樣式表隱藏 [data-row-key="session:<id>"] 的行,並摺疊、攔截文件夾行點擊。DSH 升級若改了側欄 DOM 結構,最壞情況是「不再收起」或「照舊顯示」,而不是直接報錯。

插件在 Cordis 中的主要落點包括:sidebar.panellist(鎖圖標與面板入口)、main(ws-lock,清單與密碼配置)、conversation.input.dock(報告當前會話目錄)、shell.overlay(全屏密碼頁兜底,例如從 Hero 新建會話進入鎖定文件夾)。

宿主 API 與狀態文件

狀態默認寫在 $DSH_HOME/workspace-lock/state.json(未設置 DSH_HOME 時爲 ~/.dsh),文件權限 0600。密碼只存 scrypt 派生值;SMTP 授權碼同在狀態文件中,不回傳頁面。

常用 HTTP 接口(節選):

  • GET /api/ws-lock/state
  • POST /api/ws-lock/password {current?, next}
  • POST /api/ws-lock/verify {path, password}
  • POST /api/ws-lock/toggle {path, locked, password?}(locked:false 爲永久解除,需密碼)
  • POST /api/ws-lock/config {autoLockMinutes?, email?, smtpAuthCode?}
  • POST /api/ws-lock/recover/request、POST /api/ws-lock/recover/verify {code, next}

可在 cordis.patch.yml 中爲插件配置 config.statePath 改狀態文件路徑,例如:

- id: dsh-workspace-lock
  config:
    statePath: /opt/dsh/workspace-lock/state.json

安裝與啓用

安裝任選其一(命令來自倉庫 README):

# 從 npm 安裝
dsh plugin --profile web add dsh-workspace-lock

# 或者直接從 GitHub 源碼安裝
dsh plugin --profile web add github:sgeerwang-hub/dsh-workspace-lock

裝完後重啓 dsh web:宿主端代碼必須重啓才生效;瀏覽器端模塊可熱替換,但宿主模塊在重啓前會繼續跑舊代碼。重啓後左側側欄出現鎖圖標,點開即爲「工作區鎖」面板。

DSH 生態裏插件通過 profile 裝配;社區目錄在 skillhub.cn,與 DeepSeek / 幻方無官方從屬關係,安裝前建議自行查看源碼與許可證。插件以當前 dsh 進程權限運行。

典型用法

  1. 安裝並重啓 dsh web,側欄打開「工作區鎖」。
  2. 設置總密碼;按需調整自動鎖分鐘數(0 = 不自動鎖)。
  3. 在文件夾列表中對目標工作區點 鎖定。
  4. 需要暫時查看時在本頁 解鎖;要長期去掉鎖選 解除鎖定(永久) 並輸入密碼。
  5. 若使用郵箱找回:在面板填寫 QQ 郵箱與 SMTP 授權碼,先點「發一封測試郵件」確認鏈路。

未配置郵箱又忘記密碼

鎖屏和麪板都進不去時,只能停掉 DSH,編輯 ~/.dsh/workspace-lock/state.json,刪掉 password 與 lockedPaths(或直接刪除整個文件),再啓動。「只在本頁解鎖」本就只存在瀏覽器內存,刷新也會回到鎖定。

適用場景與注意

適合:同一 DSH 實例裏有多塊工作區,其中一部分對話不想被旁人從 UI 直接看到;需要文件夾級隱藏 + 統一密碼 + 可選自動重鎖。

務必知曉:

  • 這是門禁,不是全盤或目錄級加密;有文件系統權限的其他工具仍能讀取工作區文件。
  • 忘記密碼且未配郵箱時,只能按上文手動清理狀態文件。
  • 修改宿主側代碼後同樣需要重啓 dsh web 才生效。

結尾

dsh-workspace-lock 把「整夾上鎖、側欄收起、會話隱藏」收到一個面板裏,並補上自動重鎖與 QQ 郵箱找回,適合在共享或臨時離席場景下降低 DSH 界面上的誤觸風險。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜