feat: 添加管理员账号管理命令
- list-admin: 列出所有管理员账号 - reset-password: 重置指定管理员密码 - create-admin: 创建新管理员账号 用法: docker exec verify-app ./main list-admin docker exec verify-app ./main reset-password <用户名> [新密码] docker exec verify-app ./main create-admin <用户名> <密码> [邮箱]
This commit is contained in:
+100
-4
@@ -25,8 +25,12 @@ var embeddedFiles embed.FS
|
||||
func main() {
|
||||
if len(os.Args) > 1 {
|
||||
switch os.Args[1] {
|
||||
case "list-admin":
|
||||
listAdmins()
|
||||
case "reset-password":
|
||||
resetPassword()
|
||||
case "create-admin":
|
||||
createAdmin()
|
||||
case "help", "-h", "--help":
|
||||
printHelp()
|
||||
default:
|
||||
@@ -42,13 +46,105 @@ func main() {
|
||||
|
||||
func printHelp() {
|
||||
fmt.Println("用法:")
|
||||
fmt.Println(" verify 启动服务器")
|
||||
fmt.Println(" verify 启动服务器")
|
||||
fmt.Println(" verify list-admin 列出所有管理员账号")
|
||||
fmt.Println(" verify reset-password <用户名> [新密码] 重置管理员密码")
|
||||
fmt.Println(" verify help 显示帮助信息")
|
||||
fmt.Println(" verify create-admin <用户名> <密码> [邮箱] 创建新管理员")
|
||||
fmt.Println(" verify help 显示帮助信息")
|
||||
fmt.Println()
|
||||
fmt.Println("示例:")
|
||||
fmt.Println(" verify reset-password admin 随机生成新密码")
|
||||
fmt.Println(" verify reset-password admin newpass 设置指定密码")
|
||||
fmt.Println(" verify list-admin")
|
||||
fmt.Println(" verify reset-password admin")
|
||||
fmt.Println(" verify reset-password admin newpass")
|
||||
fmt.Println(" verify create-admin newadmin password123 admin@example.com")
|
||||
}
|
||||
|
||||
func listAdmins() {
|
||||
config.Init()
|
||||
database.Init()
|
||||
|
||||
var users []struct {
|
||||
ID uint
|
||||
Username string
|
||||
Email *string
|
||||
Role string
|
||||
Status string
|
||||
CreatedAt string
|
||||
}
|
||||
|
||||
if err := database.DB.Table("users").Where("role = ?", "admin").Find(&users).Error; err != nil {
|
||||
fmt.Printf("错误: 查询失败 - %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if len(users) == 0 {
|
||||
fmt.Println("没有找到管理员账号")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("管理员账号列表:")
|
||||
fmt.Println("----------------------------------------")
|
||||
for _, u := range users {
|
||||
email := ""
|
||||
if u.Email != nil {
|
||||
email = *u.Email
|
||||
}
|
||||
fmt.Printf("ID: %d 用户名: %s 邮箱: %s 状态: %s\n", u.ID, u.Username, email, u.Status)
|
||||
}
|
||||
fmt.Println("----------------------------------------")
|
||||
}
|
||||
|
||||
func createAdmin() {
|
||||
config.Init()
|
||||
database.Init()
|
||||
|
||||
if len(os.Args) < 4 {
|
||||
fmt.Println("用法: verify create-admin <用户名> <密码> [邮箱]")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
username := os.Args[2]
|
||||
password := os.Args[3]
|
||||
email := ""
|
||||
if len(os.Args) >= 5 {
|
||||
email = os.Args[4]
|
||||
}
|
||||
|
||||
if len(password) < 6 {
|
||||
fmt.Println("错误: 密码长度至少6位")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
var count int64
|
||||
database.DB.Table("users").Where("username = ?", username).Count(&count)
|
||||
if count > 0 {
|
||||
fmt.Printf("错误: 用户名 '%s' 已存在\n", username)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
fmt.Printf("错误: 密码加密失败 - %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
emailPtr := (*string)(nil)
|
||||
if email != "" {
|
||||
emailPtr = &email
|
||||
}
|
||||
|
||||
if err := database.DB.Table("users").Create(map[string]interface{}{
|
||||
"username": username,
|
||||
"password": string(hashedPassword),
|
||||
"email": emailPtr,
|
||||
"role": "admin",
|
||||
"status": "active",
|
||||
}).Error; err != nil {
|
||||
fmt.Printf("错误: 创建失败 - %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Printf("成功: 管理员账号 '%s' 已创建\n", username)
|
||||
}
|
||||
|
||||
func resetPassword() {
|
||||
|
||||
Reference in New Issue
Block a user