// 命令行工具 - 重置管理员密码 package main import ( "fmt" "os" "git.zkcoi.com/zkcoi/Meshray-Manager/internal/config" "git.zkcoi.com/zkcoi/Meshray-Manager/internal/service" store "git.zkcoi.com/zkcoi/Meshray-Manager/internal/store/sqlite" "github.com/spf13/cobra" ) // ANSI 颜色代码 const ( ColorReset = "\033[0m" ColorRed = "\033[31m" ColorGreen = "\033[32m" ColorYellow = "\033[33m" ColorBlue = "\033[34m" ) var ( resetPasswordCmd = &cobra.Command{ Use: "reset-admin-password", Short: "重置管理员密码", Long: "重置 MeshRay 管理员账户的密码。将生成随机密码并在控制台显示。", RunE: runResetPassword, } newPassword string ) func init() { resetPasswordCmd.Flags().StringVarP(&newPassword, "new-password", "p", "", "设置新密码(留空则自动生成随机密码)") } func runResetPassword(cmd *cobra.Command, args []string) error { fmt.Println("MeshRay - 重置管理员密码") fmt.Println("=========================") fmt.Println("") // 加载配置 cfg, err := config.Load("") if err != nil { return fmt.Errorf("加载配置失败:%w", err) } // 确保数据库文件存在 if _, err := os.Stat(cfg.Database.Path); os.IsNotExist(err) { return fmt.Errorf("数据库文件不存在:%s", cfg.Database.Path) } // 连接数据库 dbStore, err := store.New(cfg.Database.Path) if err != nil { return fmt.Errorf("连接数据库失败:%w", err) } defer dbStore.Close() // 创建用户服务 userService := service.NewUserService(dbStore) // 生成或使用指定的新密码 finalPassword := newPassword if finalPassword == "" { finalPassword = service.GenerateRandomPassword(16) } // 重置密码 err = userService.ResetAdminPassword(finalPassword) if err != nil { return fmt.Errorf("重置密码失败:%w", err) } // 输出结果 fmt.Println("") fmt.Printf("%s========================================%s\n", ColorGreen, ColorReset) fmt.Printf("%s✅ 管理员密码已重置%s\n", ColorGreen, ColorReset) fmt.Printf("%s========================================%s\n", ColorGreen, ColorReset) fmt.Printf("用户名:admin\n") fmt.Printf("新密码:%s%s%s\n", ColorBlue, finalPassword, ColorReset) fmt.Printf("%s****************************************%s\n", ColorYellow, ColorReset) fmt.Printf("%s⚠️ 请妥善保管密码,建议登录后立即修改%s\n", ColorYellow, ColorReset) fmt.Printf("%s****************************************%s\n", ColorYellow, ColorReset) fmt.Println("") return nil } func main() { if err := resetPasswordCmd.Execute(); err != nil { fmt.Fprintf(os.Stderr, "错误:%v\n", err) os.Exit(1) } }