mirror of https://github.com/Xhofe/alist
perf: delete user cache after cancel `2FA`
parent
1d06a0019f
commit
30415cefbe
|
@ -24,6 +24,7 @@ var Cancel2FACmd = &cobra.Command{
|
|||
utils.Log.Errorf("failed to cancel 2FA: %+v", err)
|
||||
} else {
|
||||
utils.Log.Info("2FA canceled")
|
||||
DelAdminCacheOnline()
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/alist-org/alist/v3/internal/conf"
|
||||
"github.com/alist-org/alist/v3/internal/op"
|
||||
"github.com/alist-org/alist/v3/internal/setting"
|
||||
"github.com/alist-org/alist/v3/pkg/utils"
|
||||
"github.com/go-resty/resty/v2"
|
||||
)
|
||||
|
||||
func DelAdminCacheOnline() {
|
||||
admin, err := op.GetAdmin()
|
||||
if err != nil {
|
||||
utils.Log.Errorf("[del_admin_cache] get admin error: %+v", err)
|
||||
return
|
||||
}
|
||||
DelUserCacheOnline(admin.Username)
|
||||
}
|
||||
|
||||
func DelUserCacheOnline(username string) {
|
||||
client := resty.New().SetTimeout(3 * time.Second).SetTLSClientConfig(&tls.Config{InsecureSkipVerify: conf.Conf.TlsInsecureSkipVerify})
|
||||
token := setting.GetStr(conf.Token)
|
||||
port := conf.Conf.Scheme.HttpPort
|
||||
u := fmt.Sprintf("http://localhost:%d/api/admin/user/del_cache", port)
|
||||
if port == -1 {
|
||||
if conf.Conf.Scheme.HttpsPort == -1 {
|
||||
utils.Log.Infof("[del_user_cache] no open port")
|
||||
return
|
||||
}
|
||||
u = fmt.Sprintf("https://localhost:%d/api/admin/user/del_cache", conf.Conf.Scheme.HttpsPort)
|
||||
}
|
||||
res, err := client.R().SetHeader("Authorization", token).SetQueryParam("username", username).Post(u)
|
||||
if err != nil {
|
||||
utils.Log.Errorf("[del_user_cache] del cache error: %+v", err)
|
||||
return
|
||||
}
|
||||
if res.StatusCode() != 200 {
|
||||
utils.Log.Errorf("[del_user_cache] del cache error: %+v", res.String())
|
||||
return
|
||||
}
|
||||
code := utils.Json.Get(res.Body(), "code").ToInt()
|
||||
msg := utils.Json.Get(res.Body(), "message").ToString()
|
||||
if code != 200 {
|
||||
utils.Log.Errorf("[del_user_cache] del cache error: %s", msg)
|
||||
return
|
||||
}
|
||||
utils.Log.Infof("[del_user_cache] del user [%s] cache success", username)
|
||||
}
|
|
@ -113,3 +113,18 @@ func Cancel2FAById(id uint) error {
|
|||
}
|
||||
return Cancel2FAByUser(user)
|
||||
}
|
||||
|
||||
func DelUserCache(username string) error {
|
||||
user, err := GetUserByName(username)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if user.IsAdmin() {
|
||||
adminUser = nil
|
||||
}
|
||||
if user.IsGuest() {
|
||||
guestUser = nil
|
||||
}
|
||||
userCache.Del(username)
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ type LoginReq struct {
|
|||
OtpCode string `json:"otp_code"`
|
||||
}
|
||||
|
||||
// Login Deprecated
|
||||
func Login(c *gin.Context) {
|
||||
// check count of login
|
||||
ip := c.ClientIP()
|
||||
|
|
|
@ -120,3 +120,13 @@ func Cancel2FAById(c *gin.Context) {
|
|||
}
|
||||
common.SuccessResp(c)
|
||||
}
|
||||
|
||||
func DelUserCache(c *gin.Context) {
|
||||
username := c.Query("username")
|
||||
err := op.DelUserCache(username)
|
||||
if err != nil {
|
||||
common.ErrorResp(c, err, 500)
|
||||
return
|
||||
}
|
||||
common.SuccessResp(c)
|
||||
}
|
||||
|
|
|
@ -84,6 +84,7 @@ func admin(g *gin.RouterGroup) {
|
|||
user.POST("/update", handles.UpdateUser)
|
||||
user.POST("/cancel_2fa", handles.Cancel2FAById)
|
||||
user.POST("/delete", handles.DeleteUser)
|
||||
user.POST("/del_cache", handles.DelUserCache)
|
||||
|
||||
storage := g.Group("/storage")
|
||||
storage.GET("/list", handles.ListStorages)
|
||||
|
|
Loading…
Reference in New Issue