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() {
|
func main() {
|
||||||
if len(os.Args) > 1 {
|
if len(os.Args) > 1 {
|
||||||
switch os.Args[1] {
|
switch os.Args[1] {
|
||||||
|
case "list-admin":
|
||||||
|
listAdmins()
|
||||||
case "reset-password":
|
case "reset-password":
|
||||||
resetPassword()
|
resetPassword()
|
||||||
|
case "create-admin":
|
||||||
|
createAdmin()
|
||||||
case "help", "-h", "--help":
|
case "help", "-h", "--help":
|
||||||
printHelp()
|
printHelp()
|
||||||
default:
|
default:
|
||||||
@@ -42,13 +46,105 @@ func main() {
|
|||||||
|
|
||||||
func printHelp() {
|
func printHelp() {
|
||||||
fmt.Println("用法:")
|
fmt.Println("用法:")
|
||||||
fmt.Println(" verify 启动服务器")
|
fmt.Println(" verify 启动服务器")
|
||||||
|
fmt.Println(" verify list-admin 列出所有管理员账号")
|
||||||
fmt.Println(" verify reset-password <用户名> [新密码] 重置管理员密码")
|
fmt.Println(" verify reset-password <用户名> [新密码] 重置管理员密码")
|
||||||
fmt.Println(" verify help 显示帮助信息")
|
fmt.Println(" verify create-admin <用户名> <密码> [邮箱] 创建新管理员")
|
||||||
|
fmt.Println(" verify help 显示帮助信息")
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
fmt.Println("示例:")
|
fmt.Println("示例:")
|
||||||
fmt.Println(" verify reset-password admin 随机生成新密码")
|
fmt.Println(" verify list-admin")
|
||||||
fmt.Println(" verify reset-password admin newpass 设置指定密码")
|
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() {
|
func resetPassword() {
|
||||||
|
|||||||
Reference in New Issue
Block a user