From 9cd8ce35306df7fa6cdc47234fc11a03e8bde5d3 Mon Sep 17 00:00:00 2001 From: xuans Date: Mon, 5 Oct 2026 03:15:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9C=AC=E6=9C=BA=E9=87=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=8D=E5=8F=AF=E7=94=A8=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当系统通知或本机重置通道不可用时,向运维人员显示明确的中文原因,并补充回归测试。 --- backend/internal/adminconsole/flow.go | 12 ++++++++++++ backend/internal/adminconsole/flow_test.go | 14 +++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/backend/internal/adminconsole/flow.go b/backend/internal/adminconsole/flow.go index 93126a8..b066c42 100644 --- a/backend/internal/adminconsole/flow.go +++ b/backend/internal/adminconsole/flow.go @@ -90,6 +90,10 @@ func runConnected(ctx context.Context, conn net.Conn, screen terminal) error { } } if err := resetFlow(ctx, client, screen); err != nil { + if errors.Is(err, localreset.ErrUnavailable) { + showResetFailure(screen, err) + return localreset.ErrProtocol + } _ = screen.Show("密码重置未完成:操作已取消、验证失败、会话过期或保存失败。请检查服务日志后重新启动。") return localreset.ErrProtocol } @@ -99,6 +103,14 @@ func runConnected(ctx context.Context, conn net.Conn, screen terminal) error { return nil } +func showResetFailure(screen terminal, err error) { + message := `密码重置未完成:操作已取消、验证失败、会话过期或保存失败。请检查服务日志后重新启动。` + if errors.Is(err, localreset.ErrUnavailable) { + message = `密码重置未完成:验证码发送服务或本机重置通道不可用。请先恢复系统通知服务后重新启动。` + } + _ = screen.Show(message) +} + func resetFlow(ctx context.Context, client resetClient, screen terminal) error { methods := client.Methods() if len(methods) != 1 || methods[0].ID != "email" { diff --git a/backend/internal/adminconsole/flow_test.go b/backend/internal/adminconsole/flow_test.go index 084367f..2662f29 100644 --- a/backend/internal/adminconsole/flow_test.go +++ b/backend/internal/adminconsole/flow_test.go @@ -14,6 +14,7 @@ type testTerminalInput struct { values []string hidden []bool prompts []string + shown []string failAt int readHook func(int) } @@ -36,7 +37,10 @@ func (s *testTerminalInput) Read(ctx context.Context, prompt string, hidden bool } return s.values[index-1], nil } -func (*testTerminalInput) Show(string) error { return nil } +func (s *testTerminalInput) Show(message string) error { + s.shown = append(s.shown, message) + return nil +} type testResetClient struct { methods []localreset.Method @@ -133,6 +137,14 @@ func TestAdminConsoleFailureNeverSubmitsPassword(t *testing.T) { } } +func TestAdminConsoleShowsUnavailableResetCause(t *testing.T) { + screen := &testTerminalInput{} + showResetFailure(screen, localreset.ErrUnavailable) + if len(screen.shown) != 1 || !strings.Contains(screen.shown[0], `验证码发送服务或本机重置通道不可用`) { + t.Fatalf(`未显示SMTP或本机通道不可用提示:%v`, screen.shown) + } +} + func TestAdminConsoleRejectsAllArgumentBasedInput(t *testing.T) { for _, args := range [][]string{ {"--password", "TestPass123!"}, {"--config", "scert.json"}, {"--code-output", "reset-code"}, {"TestPass123!"}, {"--help"},