feat(server): 新增 passwd 子命令,可重置用户密码并作废会话
This commit is contained in:
1 parent
e47251658b
commit
ad2322d558
3 files changed
+98
No files matched your search
@@ -0,0 +1,58 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
"git.yeij.top/AskaEth/Scoreboard/server/internal/auth"
|
||||
"git.yeij.top/AskaEth/Scoreboard/server/internal/config"
|
||||
"git.yeij.top/AskaEth/Scoreboard/server/internal/store"
|
||||
)
|
||||
|
||||
// runPasswd 实现 `scoreboard passwd` 子命令:重置用户密码并作废其全部会话。
|
||||
// 初始密码是首次启动随机生成的,只能用日志找回;忘了就用这个命令重置。
|
||||
func runPasswd(args []string) error {
|
||||
fs := flag.NewFlagSet("passwd", flag.ExitOnError)
|
||||
configPath := fs.String("config", "config.yaml", "配置文件路径")
|
||||
username := fs.String("user", "admin", "用户名")
|
||||
password := fs.String("password", "", "新密码;留空则随机生成并打印")
|
||||
if err := fs.Parse(args); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
cfg, err := config.Load(*configPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
st, err := store.Open(cfg.DataDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() { _ = st.Close() }()
|
||||
if err := st.Migrate(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pwd := *password
|
||||
generated := pwd == ""
|
||||
if generated {
|
||||
pwd, err = auth.RandomPassword(16)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
svc := auth.New(st.DB(), auth.Options{})
|
||||
if err := svc.SetPassword(context.Background(), *username, pwd, generated); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if generated {
|
||||
fmt.Printf("已重置用户 %s 的密码:%s\n请登录后立即修改(已要求下次登录强制改密)。\n", *username, pwd)
|
||||
} else {
|
||||
fmt.Printf("已重置用户 %s 的密码。\n", *username)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in new issue
Block a user