From c06bf9e715c8446b539ab7f58c3f5507afe2cfdf Mon Sep 17 00:00:00 2001 From: xmdhs Date: Fri, 13 Oct 2023 12:59:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/admin.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/service/admin.go b/service/admin.go index 7cd4a72..5d48362 100644 --- a/service/admin.go +++ b/service/admin.go @@ -10,6 +10,7 @@ import ( "github.com/xmdhs/authlib-skin/db/ent/predicate" "github.com/xmdhs/authlib-skin/db/ent/user" "github.com/xmdhs/authlib-skin/db/ent/userprofile" + "github.com/xmdhs/authlib-skin/db/ent/usertoken" "github.com/xmdhs/authlib-skin/model" "github.com/xmdhs/authlib-skin/model/yggdrasil" utilsService "github.com/xmdhs/authlib-skin/service/utils" @@ -81,6 +82,8 @@ func (w *WebService) EditUser(ctx context.Context, u model.EditUser, uid int) er uuid := "" changePasswd := false err := utils.WithTx(ctx, w.client, func(tx *ent.Tx) error { + upUser := tx.User.UpdateOneID(uid) + if u.Email != "" { c, err := tx.User.Query().Where(user.Email(u.Email)).Count(ctx) if err != nil { @@ -89,10 +92,7 @@ func (w *WebService) EditUser(ctx context.Context, u model.EditUser, uid int) er if c != 0 { return ErrExistUser } - err = tx.User.UpdateOneID(uid).SetEmail(u.Email).Exec(ctx) - if err != nil { - return err - } + upUser = upUser.SetEmail(u.Email) } if u.Name != "" { @@ -117,7 +117,7 @@ func (w *WebService) EditUser(ctx context.Context, u model.EditUser, uid int) er uuid = userProfile.UUID tl := []string{"skin", "cape"} for _, v := range tl { - err := utilsService.DelTexture(ctx, userProfile.ID, v, w.client, w.config.TexturePath) + err := utilsService.DelTexture(ctx, userProfile.ID, v, tx.Client(), w.config.TexturePath) if err != nil { return err } @@ -134,14 +134,32 @@ func (w *WebService) EditUser(ctx context.Context, u model.EditUser, uid int) er state = utilsService.SetAdmin(state, *u.IsAdmin) } if u.IsDisable != nil { + if *u.IsDisable { + changePasswd = true + } state = utilsService.SetDisable(state, *u.IsDisable) } if state != aUser.State { - err := tx.User.UpdateOneID(uid).SetState(state).Exec(ctx) + upUser = upUser.SetState(state) + } + if u.Password != "" { + pass, salt := utils.Argon2ID(u.Password) + upUser = upUser.SetPassword(pass).SetSalt(salt) + changePasswd = true + } + + err = upUser.Exec(ctx) + if err != nil { + return err + } + + if changePasswd { + err = tx.UserToken.Update().Where(usertoken.HasUserWith(user.ID(uid))).AddTokenID(1).Exec(ctx) if err != nil { return err } } + return nil }) if err != nil {