From 0b31272c7e268e2c19511df23700791291cbf613 Mon Sep 17 00:00:00 2001 From: Giteabot Date: Fri, 11 Jul 2025 10:44:06 +0800 Subject: [PATCH] Fix updating user visibility (#35036) (#35044) Backport #35036 by @lunny Fix #35030 --------- Co-authored-by: Lunny Xiao Co-authored-by: wxiaoguang --- CHANGELOG.md | 1 + modules/optional/option.go | 7 +++++++ modules/optional/option_test.go | 6 ++++++ routers/api/v1/admin/user.go | 2 +- routers/api/v1/org/org.go | 2 +- 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 841721f9cd..b1d6d5e0c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ been added to each release, please refer to the [blog](https://blog.gitea.com). ## [1.24.3](https://github.com/go-gitea/gitea/releases/tag/1.24.3) - 2025-07-11 * BUGFIXES + * Fix updating user visibility (#35036) (#35044) * Support base64-encoded agit push options (#35037) (#35041) * Make submodule link work with relative path (#35034) (#35038) * Fix bug when displaying git user avatar in commits list (#35006) diff --git a/modules/optional/option.go b/modules/optional/option.go index ccbad259c2..2866632641 100644 --- a/modules/optional/option.go +++ b/modules/optional/option.go @@ -22,6 +22,13 @@ func FromPtr[T any](v *T) Option[T] { return Some(*v) } +func FromMapLookup[K comparable, V any](m map[K]V, k K) Option[V] { + if v, ok := m[k]; ok { + return Some(v) + } + return None[V]() +} + func FromNonDefault[T comparable](v T) Option[T] { var zero T if v == zero { diff --git a/modules/optional/option_test.go b/modules/optional/option_test.go index f600ff5a2c..ea80a2e3cb 100644 --- a/modules/optional/option_test.go +++ b/modules/optional/option_test.go @@ -56,6 +56,12 @@ func TestOption(t *testing.T) { opt3 := optional.FromNonDefault(1) assert.True(t, opt3.Has()) assert.Equal(t, int(1), opt3.Value()) + + opt4 := optional.FromMapLookup(map[string]int{"a": 1}, "a") + assert.True(t, opt4.Has()) + assert.Equal(t, 1, opt4.Value()) + opt4 = optional.FromMapLookup(map[string]int{"a": 1}, "b") + assert.False(t, opt4.Has()) } func Test_ParseBool(t *testing.T) { diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go index 769c157f63..a11c1e32e6 100644 --- a/routers/api/v1/admin/user.go +++ b/routers/api/v1/admin/user.go @@ -240,7 +240,7 @@ func EditUser(ctx *context.APIContext) { Description: optional.FromPtr(form.Description), IsActive: optional.FromPtr(form.Active), IsAdmin: user_service.UpdateOptionFieldFromPtr(form.Admin), - Visibility: optional.FromNonDefault(api.VisibilityModes[form.Visibility]), + Visibility: optional.FromMapLookup(api.VisibilityModes, form.Visibility), AllowGitHook: optional.FromPtr(form.AllowGitHook), AllowImportLocal: optional.FromPtr(form.AllowImportLocal), MaxRepoCreation: optional.FromPtr(form.MaxRepoCreation), diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go index c9208f4757..e23516a82d 100644 --- a/routers/api/v1/org/org.go +++ b/routers/api/v1/org/org.go @@ -393,7 +393,7 @@ func Edit(ctx *context.APIContext) { Description: optional.Some(form.Description), Website: optional.Some(form.Website), Location: optional.Some(form.Location), - Visibility: optional.FromNonDefault(api.VisibilityModes[form.Visibility]), + Visibility: optional.FromMapLookup(api.VisibilityModes, form.Visibility), RepoAdminChangeTeamAccess: optional.FromPtr(form.RepoAdminChangeTeamAccess), } if err := user_service.UpdateUser(ctx, ctx.Org.Organization.AsUser(), opts); err != nil {