From 65fa40b819e3f1ecfcf7e325a4531354da5ef2c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rouzbeh=E2=80=A0?= <78313022+rqzbeh@users.noreply.github.com> Date: Thu, 11 Jun 2026 01:25:23 +0200 Subject: [PATCH] fix: accurately retrieve and generate API tokens via CLI with hashed storage (#5145) (#5183) Co-authored-by: rqzbeh --- main.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 3ff73417f..cef4c63de 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "os" "os/signal" "syscall" + "time" _ "unsafe" "github.com/mhsanaei/3x-ui/v3/internal/config" @@ -403,6 +404,11 @@ func GetApiToken(getApiToken bool) { if !getApiToken { return } + err := database.InitDB(config.GetDBPath()) + if err != nil { + fmt.Println("open database failed, error info:", err) + return + } apiTokenService := panel.ApiTokenService{} tokens, err := apiTokenService.List() if err != nil { @@ -410,7 +416,18 @@ func GetApiToken(getApiToken bool) { return } if len(tokens) > 0 { - fmt.Println("apiToken:", tokens[0].Token) + fmt.Printf("There are %d API token(s) configured. Existing tokens cannot be retrieved in plaintext because only hashes are stored.\n", len(tokens)) + fmt.Println("If you have lost your token, you can manage and generate new tokens through the Panel UI (Settings -> API Tokens).") + + // Create a new fallback token so the CLI is still useful without the UI + fallbackName := fmt.Sprintf("cli-fallback-%d", time.Now().Unix()) + created, err := apiTokenService.Create(fallbackName) + if err != nil { + fmt.Println("Failed to create a fallback API token:", err) + return + } + fmt.Println("\nA new fallback token has been generated for your convenience:") + fmt.Println("apiToken:", created.Token) return } created, err := apiTokenService.Create("install")