From 4fdd2de1bb08049fbaa0902fa06e06327572a41f Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 10 Jul 2025 09:12:12 -0700 Subject: [PATCH] Fix bug when updating user visibility to public --- modules/optional/option.go | 14 ++++++++++---- routers/api/v1/admin/user.go | 16 +++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) 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),