From 1df3fe79559ccf94b6c71e9ffb58e870ed43820d Mon Sep 17 00:00:00 2001 From: boojack Date: Thu, 30 Apr 2026 08:49:03 +0800 Subject: [PATCH] fix(user): omit internal settings from list responses (#5917) --- .../router/api/v1/test/user_setting_test.go | 58 +++++++++++++++++++ server/router/api/v1/user_service.go | 14 ++--- 2 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 server/router/api/v1/test/user_setting_test.go diff --git a/server/router/api/v1/test/user_setting_test.go b/server/router/api/v1/test/user_setting_test.go new file mode 100644 index 00000000..9e68368a --- /dev/null +++ b/server/router/api/v1/test/user_setting_test.go @@ -0,0 +1,58 @@ +package test + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + + apiv1 "github.com/usememos/memos/proto/gen/api/v1" + storepb "github.com/usememos/memos/proto/gen/store" + apiv1server "github.com/usememos/memos/server/router/api/v1" +) + +func TestListUserSettingsOmitsInternalStoreSettings(t *testing.T) { + ctx := context.Background() + ts := NewTestService(t) + defer ts.Cleanup() + + user, err := ts.CreateRegularUser(ctx, "locale-user") + require.NoError(t, err) + + _, err = ts.Store.UpsertUserSetting(ctx, &storepb.UserSetting{ + UserId: user.ID, + Key: storepb.UserSetting_REFRESH_TOKENS, + Value: &storepb.UserSetting_RefreshTokens{ + RefreshTokens: &storepb.RefreshTokensUserSetting{}, + }, + }) + require.NoError(t, err) + + _, err = ts.Store.UpsertUserSetting(ctx, &storepb.UserSetting{ + UserId: user.ID, + Key: storepb.UserSetting_SHORTCUTS, + Value: &storepb.UserSetting_Shortcuts{ + Shortcuts: &storepb.ShortcutsUserSetting{}, + }, + }) + require.NoError(t, err) + + _, err = ts.Store.UpsertUserSetting(ctx, &storepb.UserSetting{ + UserId: user.ID, + Key: storepb.UserSetting_GENERAL, + Value: &storepb.UserSetting_General{ + General: &storepb.GeneralUserSetting{ + Locale: "ja", + }, + }, + }) + require.NoError(t, err) + + resp, err := ts.Service.ListUserSettings(ts.CreateUserContext(ctx, user.ID), &apiv1.ListUserSettingsRequest{ + Parent: apiv1server.BuildUserName(user.Username), + }) + require.NoError(t, err) + require.Len(t, resp.Settings, 1) + require.Equal(t, "users/locale-user/settings/GENERAL", resp.Settings[0].Name) + require.Equal(t, "ja", resp.Settings[0].GetGeneralSetting().Locale) +} diff --git a/server/router/api/v1/user_service.go b/server/router/api/v1/user_service.go index 8fab09b8..4d59b011 100644 --- a/server/router/api/v1/user_service.go +++ b/server/router/api/v1/user_service.go @@ -1294,6 +1294,10 @@ func convertUserSettingFromStore(storeSetting *storepb.UserSetting, user *store. } switch key { + case storepb.UserSetting_GENERAL: + setting.Value = &v1pb.UserSetting_GeneralSetting_{ + GeneralSetting: getDefaultUserGeneralSetting(), + } case storepb.UserSetting_WEBHOOKS: setting.Value = &v1pb.UserSetting_WebhooksSetting_{ WebhooksSetting: &v1pb.UserSetting_WebhooksSetting{ @@ -1301,10 +1305,7 @@ func convertUserSettingFromStore(storeSetting *storepb.UserSetting, user *store. }, } default: - // Default to general setting - setting.Value = &v1pb.UserSetting_GeneralSetting_{ - GeneralSetting: getDefaultUserGeneralSetting(), - } + return nil } return setting } @@ -1349,10 +1350,7 @@ func convertUserSettingFromStore(storeSetting *storepb.UserSetting, user *store. }, } default: - // Default to general setting if unknown key - setting.Value = &v1pb.UserSetting_GeneralSetting_{ - GeneralSetting: getDefaultUserGeneralSetting(), - } + return nil } return setting