feat: 實作管理端指令群 jwks/accounts/audit-logs(issue #12)

- docs/commands.md 新增 §3.8 jwks、§3.9 accounts、§3.10 audit-logs 規格
- Api 新增 jwks/accounts/audit-logs 端點(共用 api_request)
- 新增 Jwks/Accounts/AuditLogs/Admin 模組;CLI 接線三個指令群
- 403 → 退出碼 8 提示需 admin;一次性密碼只在成功當下輸出
- 測試 100 例全綠(fake API 注入,比照 cli_test.exs);基於含 PR #15 的最新 main
This commit is contained in:
2026-09-10 03:15:53 +08:00
parent e23be309f8
commit d70aa9e541
9 changed files with 1720 additions and 2 deletions
+25 -1
View File
@@ -8,7 +8,7 @@ defmodule BearCli.CLI do
優先使用該值,不讀寫本機憑證檔。
"""
alias BearCli.{Api, Apps, Config, Credentials, SelfService}
alias BearCli.{Accounts, Admin, Api, Apps, AuditLogs, Config, Credentials, Jwks, SelfService}
@global_switches [
issuer: :string,
@@ -319,6 +319,14 @@ defmodule BearCli.CLI do
end
end
# 管理端指令群(jwks/accounts/audit-logs;解析委由 BearCli.Admin)
defp parse_command(group, args, global) when group in ~w(jwks accounts audit-logs) do
case Admin.parse([group | args], global) do
:error -> {:error, "未知指令:#{group}(可用 bear --help 查看說明)", 2}
parsed -> parsed
end
end
defp parse_command(unknown, _args, _global) do
{:error, "未知指令:#{unknown}(可用 bear --help 查看說明)", 2}
end
@@ -595,6 +603,19 @@ defmodule BearCli.CLI do
ss_opts = Map.merge(inject_opts, Map.take(cmd_opts, [:ss_api, :io, :tty?]))
SelfService.run(group, verb, Map.merge(cmd_opts, ss_opts))
# 管理端指令群(jwks/accounts/audit-logs;各自注入對應的 api 模組)
{:ok, {Jwks, verb}, cmd_opts} when is_atom(verb) ->
jwks_api = cmd_opts[:jwks_api] || opts[:jwks_api] || Api
Jwks.run(verb, Map.put(cmd_opts, :jwks_api, jwks_api))
{:ok, {Accounts, verb}, cmd_opts} when is_atom(verb) ->
accounts_api = cmd_opts[:accounts_api] || opts[:accounts_api] || Api
Accounts.run(verb, Map.put(cmd_opts, :accounts_api, accounts_api))
{:ok, {AuditLogs, verb}, cmd_opts} when is_atom(verb) ->
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))
{:ok, command, cmd_opts} ->
cond do
cmd_opts[:version] ->
@@ -903,6 +924,9 @@ defmodule BearCli.CLI do
logout 登出(清除本機憑證)
status 顯示登入狀態
apps <動詞> App 管理(admin;bear apps --help 查看)
jwks <動詞> 簽章金鑰管理(admin)
accounts <動詞> 帳號管理(admin)
audit-logs list 稽核日誌(admin)
profile <動詞> 個人資料(show/set)
password change 變更密碼(互動輸入,不進 shell history)
email change --new E 變更 email(雙向驗證碼流程)