update pwd change

This commit is contained in:
wjqserver 2025-06-22 17:23:41 +08:00
parent b91daad8ad
commit 47b6f4903f
13 changed files with 572 additions and 90 deletions

View file

@ -13,12 +13,13 @@ import (
var (
exactMatchPaths = map[string]struct{}{
"/login": {},
"/login.html": {},
"/v0/api/auth/login": {},
"/v0/api/auth/init": {},
"/init.html": {},
"/favicon.ico": {},
"/login": {},
"/login.html": {},
"/v0/api/auth/login": {},
"/v0/api/auth/logout": {},
"/v0/api/auth/init": {},
"/init.html": {},
"/favicon.ico": {},
}
prefixMatchPaths = []string{ // 保持前缀匹配,因为数量少
"/js/",
@ -98,6 +99,7 @@ func AuthLogin(c *touka.Context, cfg *config.Config, cdb *db.ConfigDB) {
c.JSON(http.StatusBadRequest, touka.H{"error": "Need username and password"})
return
}
c.Infof("user login: %s password: %s", username, password)
// 验证账户密码
pass, err := user.CheckLogin(username, password, cdb)
@ -119,9 +121,65 @@ func AuthLogin(c *touka.Context, cfg *config.Config, cdb *db.ConfigDB) {
}
func AuthLogout(c *touka.Context) {
session := sessions.Default(c)
session.Clear()
session.Set("authenticated", false)
session.Save()
session.Clear()
err := session.Save()
if err != nil {
c.Errorf("Failed to save session: %v", err)
c.JSON(http.StatusInternalServerError, touka.H{"error": "Failed to save session"})
return
}
c.Redirect(http.StatusFound, "/login.html")
}
func ResetPassword(cdb *db.ConfigDB) touka.HandlerFunc {
return func(c *touka.Context) {
username := c.PostForm("username")
oldPassword := c.PostForm("old_password")
newPassword := c.PostForm("new_password")
// 验证是否为空
if username == "" || oldPassword == "" || newPassword == "" {
c.JSON(400, touka.H{"error": "username and password are required"})
return
}
// 验证用户是否存在
exist, err := cdb.IsUserExists(username)
if err != nil {
c.JSON(500, touka.H{"error": err.Error()})
return
}
if !exist {
//不正确的参数
c.JSON(400, touka.H{"error": "user not exist"})
return
}
// 是否可以重置
ok, err := user.CheckLogin(username, oldPassword, cdb)
if err != nil {
c.JSON(500, touka.H{"error": err.Error()})
return
}
if !ok {
// 错误的密码
c.JSON(400, touka.H{"error": "current password is not correct"})
return
}
// 更新密码
hashpwd, err := user.HashPassword(newPassword)
if err != nil {
c.Errorf("Failed to hash password: %v", err)
c.JSON(500, touka.H{"error": err.Error()})
return
}
err = cdb.UpdateUserPassword(username, hashpwd)
if err != nil {
c.JSON(500, touka.H{"error": err.Error()})
return
}
// 进行logout
AuthLogout(c)
}
}