mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-11-29 21:26:10 +01:00
Backport #24867 by @lunny
Fix #23211
Replace #23496
---------
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
(cherry picked from commit 275abd6593
)
This commit is contained in:
parent
936eb64ebf
commit
75122edc97
|
@ -614,7 +614,7 @@ func CreateUser(u *User, overwriteDefault ...*CreateUserOverwriteOptions) (err e
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate data
|
// validate data
|
||||||
if err := validateUser(u); err != nil {
|
if err := ValidateUser(u); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -804,19 +804,26 @@ func checkDupEmail(ctx context.Context, u *User) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// validateUser check if user is valid to insert / update into database
|
// ValidateUser check if user is valid to insert / update into database
|
||||||
func validateUser(u *User) error {
|
func ValidateUser(u *User, cols ...string) error {
|
||||||
|
if len(cols) == 0 || util.SliceContainsString(cols, "visibility", true) {
|
||||||
if !setting.Service.AllowedUserVisibilityModesSlice.IsAllowedVisibility(u.Visibility) && !u.IsOrganization() {
|
if !setting.Service.AllowedUserVisibilityModesSlice.IsAllowedVisibility(u.Visibility) && !u.IsOrganization() {
|
||||||
return fmt.Errorf("visibility Mode not allowed: %s", u.Visibility.String())
|
return fmt.Errorf("visibility Mode not allowed: %s", u.Visibility.String())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(cols) == 0 || util.SliceContainsString(cols, "email", true) {
|
||||||
u.Email = strings.ToLower(u.Email)
|
u.Email = strings.ToLower(u.Email)
|
||||||
return ValidateEmail(u.Email)
|
if err := ValidateEmail(u.Email); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdateUser updates user's information.
|
// UpdateUser updates user's information.
|
||||||
func UpdateUser(ctx context.Context, u *User, changePrimaryEmail bool, cols ...string) error {
|
func UpdateUser(ctx context.Context, u *User, changePrimaryEmail bool, cols ...string) error {
|
||||||
err := validateUser(u)
|
err := ValidateUser(u, cols...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -882,7 +889,7 @@ func UpdateUser(ctx context.Context, u *User, changePrimaryEmail bool, cols ...s
|
||||||
|
|
||||||
// UpdateUserCols update user according special columns
|
// UpdateUserCols update user according special columns
|
||||||
func UpdateUserCols(ctx context.Context, u *User, cols ...string) error {
|
func UpdateUserCols(ctx context.Context, u *User, cols ...string) error {
|
||||||
if err := validateUser(u); err != nil {
|
if err := ValidateUser(u, cols...); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ package user_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -524,3 +525,21 @@ func TestIsUserVisibleToViewer(t *testing.T) {
|
||||||
test(user31, user33, true)
|
test(user31, user33, true)
|
||||||
test(user31, nil, false)
|
test(user31, nil, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_ValidateUser(t *testing.T) {
|
||||||
|
oldSetting := setting.Service.AllowedUserVisibilityModesSlice
|
||||||
|
defer func() {
|
||||||
|
setting.Service.AllowedUserVisibilityModesSlice = oldSetting
|
||||||
|
}()
|
||||||
|
setting.Service.AllowedUserVisibilityModesSlice = []bool{true, false, true}
|
||||||
|
kases := map[*user_model.User]bool{
|
||||||
|
{ID: 1, Visibility: structs.VisibleTypePublic}: true,
|
||||||
|
{ID: 2, Visibility: structs.VisibleTypeLimited}: false,
|
||||||
|
{ID: 2, Visibility: structs.VisibleTypeLimited, Email: "invalid"}: false,
|
||||||
|
{ID: 2, Visibility: structs.VisibleTypePrivate, Email: "valid@valid.com"}: true,
|
||||||
|
}
|
||||||
|
for kase, expected := range kases {
|
||||||
|
err := user_model.ValidateUser(kase)
|
||||||
|
assert.EqualValues(t, expected, err == nil, fmt.Sprintf("case: %+v", kase))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue