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)
This commit is contained in:
2026-09-10 03:07:40 +08:00
parent a220f8c5e6
commit 464db21745
9 changed files with 1737 additions and 9 deletions
+25 -1
View File
@@ -8,7 +8,7 @@ defmodule BearCli.CLI do
優先使用該值,不讀寫本機憑證檔。
"""
alias BearCli.{Api, Apps, Config, Credentials}
alias BearCli.{Accounts, Admin, Api, Apps, AuditLogs, Config, Credentials, Jwks}
@global_switches [
issuer: :string,
@@ -177,6 +177,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
@@ -345,6 +353,19 @@ defmodule BearCli.CLI do
apps_api = cmd_opts[:apps_api] || opts[:apps_api] || Api
Apps.run(verb, Map.put(cmd_opts, :apps_api, apps_api))
# 管理端指令群(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] ->
@@ -653,6 +674,9 @@ defmodule BearCli.CLI do
logout 登出(清除本機憑證)
status 顯示登入狀態
apps <動詞> App 管理(admin;bear apps --help 查看)
jwks <動詞> 簽章金鑰管理(admin)
accounts <動詞> 帳號管理(admin)
audit-logs list 稽核日誌(admin)
apps 指令群(需 admin 權限的 PAT):
apps list [--visibility public|internal] [--status active|inactive]