diff --git a/modules/optional/option.go b/modules/optional/option.go index 6075c6347e..5524b375d9 100644 --- a/modules/optional/option.go +++ b/modules/optional/option.go @@ -28,12 +28,18 @@ func FromPtr[T any](v *T) Option[T] { return Some(*v) } -func FromNonDefault[T comparable](v T) Option[T] { - var zero T - if v == zero { +func FromNonDefaultFunc[T comparable](f T, isZero func(T) bool) Option[T] { + if isZero(f) { return None[T]() } - return Some(v) + return Some(f) +} + +func FromNonDefault[T comparable](v T) Option[T] { + return FromNonDefaultFunc(v, func(v T) bool { + var zero T + return v == zero + }) } func (o Option[T]) Has() bool { diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go index 8a267cc418..d689cdcb6d 100644 --- a/routers/api/v1/admin/user.go +++ b/routers/api/v1/admin/user.go @@ -234,13 +234,15 @@ func EditUser(ctx *context.APIContext) { } opts := &user_service.UpdateOptions{ - FullName: optional.FromPtr(form.FullName), - Website: optional.FromPtr(form.Website), - Location: optional.FromPtr(form.Location), - Description: optional.FromPtr(form.Description), - IsActive: optional.FromPtr(form.Active), - IsAdmin: user_service.UpdateOptionFieldFromPtr(form.Admin), - Visibility: optional.FromNonDefault(api.VisibilityModes[form.Visibility]), + FullName: optional.FromPtr(form.FullName), + Website: optional.FromPtr(form.Website), + Location: optional.FromPtr(form.Location), + Description: optional.FromPtr(form.Description), + IsActive: optional.FromPtr(form.Active), + IsAdmin: user_service.UpdateOptionFieldFromPtr(form.Admin), + Visibility: optional.FromNonDefaultFunc(api.VisibilityModes[form.Visibility], func(v api.VisibleType) bool { + return v < api.VisibleTypePublic || v > api.VisibleTypePrivate + }), AllowGitHook: optional.FromPtr(form.AllowGitHook), AllowImportLocal: optional.FromPtr(form.AllowImportLocal), MaxRepoCreation: optional.FromPtr(form.MaxRepoCreation),