Skip to content

Commit 75122ed

Browse files
GiteaBotlunny
authored andcommitted
Only validate changed columns when update user (go-gitea#24867) (go-gitea#24903)
Backport go-gitea#24867 by @lunny Fix go-gitea#23211 Replace go-gitea#23496 --------- Co-authored-by: Lunny Xiao <[email protected]> (cherry picked from commit 275abd6)
1 parent 936eb64 commit 75122ed

File tree

2 files changed

+35
-9
lines changed

2 files changed

+35
-9
lines changed

models/user/user.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ func CreateUser(u *User, overwriteDefault ...*CreateUserOverwriteOptions) (err e
614614
}
615615

616616
// validate data
617-
if err := validateUser(u); err != nil {
617+
if err := ValidateUser(u); err != nil {
618618
return err
619619
}
620620

@@ -804,19 +804,26 @@ func checkDupEmail(ctx context.Context, u *User) error {
804804
return nil
805805
}
806806

807-
// validateUser check if user is valid to insert / update into database
808-
func validateUser(u *User) error {
809-
if !setting.Service.AllowedUserVisibilityModesSlice.IsAllowedVisibility(u.Visibility) && !u.IsOrganization() {
810-
return fmt.Errorf("visibility Mode not allowed: %s", u.Visibility.String())
807+
// ValidateUser check if user is valid to insert / update into database
808+
func ValidateUser(u *User, cols ...string) error {
809+
if len(cols) == 0 || util.SliceContainsString(cols, "visibility", true) {
810+
if !setting.Service.AllowedUserVisibilityModesSlice.IsAllowedVisibility(u.Visibility) && !u.IsOrganization() {
811+
return fmt.Errorf("visibility Mode not allowed: %s", u.Visibility.String())
812+
}
811813
}
812814

813-
u.Email = strings.ToLower(u.Email)
814-
return ValidateEmail(u.Email)
815+
if len(cols) == 0 || util.SliceContainsString(cols, "email", true) {
816+
u.Email = strings.ToLower(u.Email)
817+
if err := ValidateEmail(u.Email); err != nil {
818+
return err
819+
}
820+
}
821+
return nil
815822
}
816823

817824
// UpdateUser updates user's information.
818825
func UpdateUser(ctx context.Context, u *User, changePrimaryEmail bool, cols ...string) error {
819-
err := validateUser(u)
826+
err := ValidateUser(u, cols...)
820827
if err != nil {
821828
return err
822829
}
@@ -882,7 +889,7 @@ func UpdateUser(ctx context.Context, u *User, changePrimaryEmail bool, cols ...s
882889

883890
// UpdateUserCols update user according special columns
884891
func UpdateUserCols(ctx context.Context, u *User, cols ...string) error {
885-
if err := validateUser(u); err != nil {
892+
if err := ValidateUser(u, cols...); err != nil {
886893
return err
887894
}
888895

models/user/user_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package user_test
55

66
import (
77
"context"
8+
"fmt"
89
"math/rand"
910
"strings"
1011
"testing"
@@ -524,3 +525,21 @@ func TestIsUserVisibleToViewer(t *testing.T) {
524525
test(user31, user33, true)
525526
test(user31, nil, false)
526527
}
528+
529+
func Test_ValidateUser(t *testing.T) {
530+
oldSetting := setting.Service.AllowedUserVisibilityModesSlice
531+
defer func() {
532+
setting.Service.AllowedUserVisibilityModesSlice = oldSetting
533+
}()
534+
setting.Service.AllowedUserVisibilityModesSlice = []bool{true, false, true}
535+
kases := map[*user_model.User]bool{
536+
{ID: 1, Visibility: structs.VisibleTypePublic}: true,
537+
{ID: 2, Visibility: structs.VisibleTypeLimited}: false,
538+
{ID: 2, Visibility: structs.VisibleTypeLimited, Email: "invalid"}: false,
539+
{ID: 2, Visibility: structs.VisibleTypePrivate, Email: "[email protected]"}: true,
540+
}
541+
for kase, expected := range kases {
542+
err := user_model.ValidateUser(kase)
543+
assert.EqualValues(t, expected, err == nil, fmt.Sprintf("case: %+v", kase))
544+
}
545+
}

0 commit comments

Comments
 (0)