feat: 實作 vault 指令群 status/unlock/lock/list/get/create/edit/delete/restore/purge/folders/sync/password/rescue(issue #17)
- 對接 alterminal/bear#41 的 /api/v1/vault JSON API(PAT Bearer) - 客戶端端到端加密,格式與 Web Vault(P2)完全一致: - 加密字串 2.<iv>.<ct>.<mac>(AES-256-CBC+HMAC-SHA-256、PKCS#7、encrypt-then-MAC) - 主金鑰 PBKDF2-SHA512(迭代數取自 /vault/config 與 profile,不寫死;salt=email 小寫) - BIP39 助記詞(12 字、128-bit、英文詞表)+救援路徑 - K_user 僅存記憶體:vault unlock 匯出 BEAR_VAULT_SESSION(base64), 同 Bitwarden CLI BW_SESSION 慣例;lock 提示 unset;不寫入任何檔案 - docs/commands.md 補 §3.11 規格;README 同步 - 測試:fake API 注入+Bear.Vault.Crypto 密文樣本交叉驗證(雙向); BIP39 官方向量;46 個新測試,全套 196 passed
This commit is contained in:
+42
-1
@@ -8,7 +8,18 @@ defmodule BearCli.CLI do
|
||||
優先使用該值,不讀寫本機憑證檔。
|
||||
"""
|
||||
|
||||
alias BearCli.{Accounts, Admin, Api, Apps, AuditLogs, Config, Credentials, Jwks, SelfService}
|
||||
alias BearCli.{
|
||||
Accounts,
|
||||
Admin,
|
||||
Api,
|
||||
Apps,
|
||||
AuditLogs,
|
||||
Config,
|
||||
Credentials,
|
||||
Jwks,
|
||||
SelfService,
|
||||
Vault
|
||||
}
|
||||
|
||||
@global_switches [
|
||||
issuer: :string,
|
||||
@@ -327,6 +338,11 @@ defmodule BearCli.CLI do
|
||||
end
|
||||
end
|
||||
|
||||
# vault 指令群(issue #17;解析委由 BearCli.Vault)
|
||||
defp parse_command("vault", args, global) do
|
||||
Vault.parse(["vault" | args], global)
|
||||
end
|
||||
|
||||
defp parse_command(unknown, _args, _global) do
|
||||
{:error, "未知指令:#{unknown}(可用 bear --help 查看說明)", 2}
|
||||
end
|
||||
@@ -584,6 +600,11 @@ defmodule BearCli.CLI do
|
||||
IO.puts(BearCli.version())
|
||||
0
|
||||
|
||||
{:help, :vault} ->
|
||||
# vault 群組專屬說明
|
||||
_ = Vault.run(:help, %{})
|
||||
0
|
||||
|
||||
{:help, _} ->
|
||||
print_help()
|
||||
0
|
||||
@@ -616,6 +637,11 @@ defmodule BearCli.CLI do
|
||||
audit_logs_api = cmd_opts[:audit_logs_api] || opts[:audit_logs_api] || Api
|
||||
AuditLogs.run(verb, Map.put(cmd_opts, :audit_logs_api, audit_logs_api))
|
||||
|
||||
# vault 指令群({:ok, {BearCli.Vault, verb}, opts} 形狀)
|
||||
{:ok, {BearCli.Vault, verb}, cmd_opts} when is_atom(verb) ->
|
||||
vault_opts = opts |> Map.new() |> Map.take([:vault_api, :io, :tty?, :session, :email])
|
||||
Vault.run(verb, Map.merge(cmd_opts, vault_opts))
|
||||
|
||||
{:ok, command, cmd_opts} ->
|
||||
cond do
|
||||
cmd_opts[:version] ->
|
||||
@@ -969,6 +995,21 @@ defmodule BearCli.CLI do
|
||||
mfa setup
|
||||
mfa disable
|
||||
mfa recovery-codes
|
||||
vault 指令群(任何有效 PAT 皆可;詳見 bear vault --help 與 docs/commands.md §3.11):
|
||||
vault status 初始化狀態、KDF 參數、解鎖狀態
|
||||
vault unlock 主密碼解鎖 → 匯出 BEAR_VAULT_SESSION
|
||||
vault lock 丟棄 session(unset 環境變數)
|
||||
vault list [--folder UUID] 列出項目(解鎖後顯示明文名稱)
|
||||
vault get <uuid> 顯示單一項目(解鎖後解密欄位)
|
||||
vault create --type login|secure_note|card|identity [--folder UUID]
|
||||
vault edit <uuid> 互動編輯(Enter 保留現值)
|
||||
vault delete <uuid> 丟入回收桶
|
||||
vault restore <uuid> 從回收桶還原
|
||||
vault purge <uuid> 永久刪除(需確認)
|
||||
vault folders list|create|rename <uuid>|delete <uuid>
|
||||
vault sync 完整同步(伺服器為準)
|
||||
vault password change 變更 vault 主密碼
|
||||
vault rescue 助記詞救援(重設主密碼)
|
||||
|
||||
全域選項:
|
||||
--issuer URL Bear(OIDC Provider)位址(預設 https://alterminal.com)
|
||||
|
||||
Reference in New Issue
Block a user