update pwd change
This commit is contained in:
parent
b91daad8ad
commit
47b6f4903f
13 changed files with 572 additions and 90 deletions
74
api/auth.go
74
api/auth.go
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue