feat(user): check username after check user center config

This commit is contained in:
LinkinStars 2023-04-28 15:46:47 +08:00
parent 9d304f0186
commit cba45d1eaa
3 changed files with 32 additions and 35 deletions

View File

@ -4,14 +4,12 @@ import (
"encoding/json" "encoding/json"
"github.com/answerdev/answer/internal/base/constant" "github.com/answerdev/answer/internal/base/constant"
"github.com/answerdev/answer/internal/base/reason"
"github.com/answerdev/answer/internal/base/validator" "github.com/answerdev/answer/internal/base/validator"
"github.com/answerdev/answer/internal/entity" "github.com/answerdev/answer/internal/entity"
"github.com/answerdev/answer/pkg/checker" "github.com/answerdev/answer/pkg/checker"
"github.com/answerdev/answer/pkg/converter" "github.com/answerdev/answer/pkg/converter"
"github.com/answerdev/answer/pkg/gravatar" "github.com/answerdev/answer/pkg/gravatar"
"github.com/jinzhu/copier" "github.com/jinzhu/copier"
"github.com/segmentfault/pacman/errors"
) )
// UserVerifyEmailReq user verify email request // UserVerifyEmailReq user verify email request
@ -300,7 +298,7 @@ func (u *UserModifyPassWordRequest) Check() (errFields []*validator.FormErrorFie
type UpdateInfoRequest struct { type UpdateInfoRequest struct {
// display_name // display_name
DisplayName string `validate:"required,gt=0,lte=30" json:"display_name"` DisplayName string `validate:"omitempty,gt=0,lte=30" json:"display_name"`
// username // username
Username string `validate:"omitempty,gt=3,lte=30" json:"username"` Username string `validate:"omitempty,gt=3,lte=30" json:"username"`
// avatar // avatar
@ -329,16 +327,6 @@ func (a *AvatarInfo) ToJsonString() string {
} }
func (req *UpdateInfoRequest) Check() (errFields []*validator.FormErrorField, err error) { func (req *UpdateInfoRequest) Check() (errFields []*validator.FormErrorField, err error) {
if len(req.Username) > 0 {
if checker.IsInvalidUsername(req.Username) {
errField := &validator.FormErrorField{
ErrorField: "username",
ErrorMsg: reason.UsernameInvalid,
}
errFields = append(errFields, errField)
return errFields, errors.BadRequest(reason.UsernameInvalid)
}
}
req.BioHTML = converter.Markdown2BasicHTML(req.Bio) req.BioHTML = converter.Markdown2BasicHTML(req.Bio)
return nil, nil return nil, nil
} }

View File

@ -259,15 +259,23 @@ func (us *UserService) UpdateInfo(ctx context.Context, req *schema.UpdateInfoReq
if err != nil { if err != nil {
return nil, err return nil, err
} }
oldUserInfo, exist, err := us.userRepo.GetByUserID(ctx, req.UserID)
if err != nil {
return nil, err
}
if !exist {
return nil, errors.BadRequest(reason.UserNotFound)
}
if len(req.Username) > 0 { if siteUsers.AllowUpdateUsername && len(req.Username) > 0 {
if checker.IsInvalidUsername(req.Username) {
errFields = append(errFields, &validator.FormErrorField{
ErrorField: "username",
ErrorMsg: reason.UsernameInvalid,
})
return errFields, errors.BadRequest(reason.UsernameInvalid)
}
if checker.IsReservedUsername(req.Username) {
errFields = append(errFields, &validator.FormErrorField{
ErrorField: "username",
ErrorMsg: reason.UsernameInvalid,
})
return errFields, errors.BadRequest(reason.UsernameInvalid)
}
userInfo, exist, err := us.userRepo.GetByUsername(ctx, req.Username) userInfo, exist, err := us.userRepo.GetByUsername(ctx, req.Username)
if err != nil { if err != nil {
return nil, err return nil, err
@ -279,13 +287,14 @@ func (us *UserService) UpdateInfo(ctx context.Context, req *schema.UpdateInfoReq
}) })
return errFields, errors.BadRequest(reason.UsernameDuplicate) return errFields, errors.BadRequest(reason.UsernameDuplicate)
} }
if checker.IsReservedUsername(req.Username) { }
errFields = append(errFields, &validator.FormErrorField{
ErrorField: "username", oldUserInfo, exist, err := us.userRepo.GetByUserID(ctx, req.UserID)
ErrorMsg: reason.UsernameInvalid, if err != nil {
}) return nil, err
return errFields, errors.BadRequest(reason.UsernameInvalid) }
} if !exist {
return nil, errors.BadRequest(reason.UserNotFound)
} }
cond := us.formatUserInfoForUpdateInfo(oldUserInfo, req, siteUsers) cond := us.formatUserInfoForUpdateInfo(oldUserInfo, req, siteUsers)
@ -307,13 +316,13 @@ func (us *UserService) formatUserInfoForUpdateInfo(
userInfo.Location = oldUserInfo.Location userInfo.Location = oldUserInfo.Location
userInfo.ID = req.UserID userInfo.ID = req.UserID
if siteUsersConf.AllowUpdateDisplayName { if len(req.DisplayName) > 0 && siteUsersConf.AllowUpdateDisplayName {
userInfo.DisplayName = req.DisplayName userInfo.DisplayName = req.DisplayName
} }
if siteUsersConf.AllowUpdateUsername { if len(req.Username) > 0 && siteUsersConf.AllowUpdateUsername {
userInfo.Username = req.Username userInfo.Username = req.Username
} }
if siteUsersConf.AllowUpdateAvatar { if len(avatar) > 0 && siteUsersConf.AllowUpdateAvatar {
userInfo.Avatar = string(avatar) userInfo.Avatar = string(avatar)
} }
if siteUsersConf.AllowUpdateBio { if siteUsersConf.AllowUpdateBio {

View File

@ -136,7 +136,7 @@ type TranslateFn func(ctx *GinContext) string
// Translator contains a function that translates the key to the current language of the context // Translator contains a function that translates the key to the current language of the context
type Translator struct { type Translator struct {
fn TranslateFn Fn TranslateFn
} }
// MakeTranslator generates a translator from the key // MakeTranslator generates a translator from the key
@ -144,13 +144,13 @@ func MakeTranslator(key string) Translator {
t := func(ctx *GinContext) string { t := func(ctx *GinContext) string {
return Translate(ctx, key) return Translate(ctx, key)
} }
return Translator{fn: t} return Translator{Fn: t}
} }
// Translate translates the key to the current language of the context // Translate translates the key to the current language of the context
func (t Translator) Translate(ctx *GinContext) string { func (t Translator) Translate(ctx *GinContext) string {
if &t == nil || t.fn == nil { if &t == nil || t.Fn == nil {
return "" return ""
} }
return t.fn(ctx) return t.Fn(ctx)
} }