mirror of
https://github.com/aykhans/slash-e.git
synced 2025-04-20 22:07:15 +00:00
refactor: update user setting keys
This commit is contained in:
parent
87deeca110
commit
8010f54747
@ -8,8 +8,8 @@ const PreferenceSection: React.FC = () => {
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const userSetting = userStore.getCurrentUserSetting();
|
const userSetting = userStore.getCurrentUserSetting();
|
||||||
const language = userSetting.locale;
|
const language = userSetting.general?.locale || "EN";
|
||||||
const colorTheme = userSetting.colorTheme;
|
const colorTheme = userSetting.general?.colorTheme || "SYSTEM";
|
||||||
|
|
||||||
const languageOptions = [
|
const languageOptions = [
|
||||||
{
|
{
|
||||||
@ -49,9 +49,12 @@ const PreferenceSection: React.FC = () => {
|
|||||||
await userStore.updateUserSetting(
|
await userStore.updateUserSetting(
|
||||||
{
|
{
|
||||||
...userSetting,
|
...userSetting,
|
||||||
|
general: {
|
||||||
|
...userSetting.general,
|
||||||
locale: locale,
|
locale: locale,
|
||||||
|
},
|
||||||
} as UserSetting,
|
} as UserSetting,
|
||||||
["locale"],
|
["general"],
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -59,9 +62,12 @@ const PreferenceSection: React.FC = () => {
|
|||||||
await userStore.updateUserSetting(
|
await userStore.updateUserSetting(
|
||||||
{
|
{
|
||||||
...userSetting,
|
...userSetting,
|
||||||
|
general: {
|
||||||
|
...userSetting.general,
|
||||||
colorTheme: colorTheme,
|
colorTheme: colorTheme,
|
||||||
|
},
|
||||||
} as UserSetting,
|
} as UserSetting,
|
||||||
["color_theme"],
|
["general"],
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7,21 +7,21 @@ import zh from "../../locales/zh.json";
|
|||||||
|
|
||||||
i18n.use(initReactI18next).init({
|
i18n.use(initReactI18next).init({
|
||||||
resources: {
|
resources: {
|
||||||
en: {
|
EN: {
|
||||||
translation: en,
|
translation: en,
|
||||||
},
|
},
|
||||||
zh: {
|
ZH: {
|
||||||
translation: zh,
|
translation: zh,
|
||||||
},
|
},
|
||||||
fr: {
|
FR: {
|
||||||
translation: fr,
|
translation: fr,
|
||||||
},
|
},
|
||||||
ja: {
|
JA: {
|
||||||
translation: ja,
|
translation: ja,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
lng: "en",
|
lng: "EN",
|
||||||
fallbackLng: "en",
|
fallbackLng: "EN",
|
||||||
});
|
});
|
||||||
|
|
||||||
export default i18n;
|
export default i18n;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { useColorScheme } from "@mui/joy";
|
import { useColorScheme } from "@mui/joy";
|
||||||
import { isEqual } from "lodash-es";
|
|
||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { Outlet } from "react-router-dom";
|
import { Outlet } from "react-router-dom";
|
||||||
@ -34,19 +33,11 @@ const Root: React.FC = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isEqual(currentUserSetting.locale, "ZH")) {
|
i18n.changeLanguage(currentUserSetting.general?.locale || "en");
|
||||||
i18n.changeLanguage("zh");
|
|
||||||
} else if (isEqual(currentUserSetting.locale, "FR")) {
|
|
||||||
i18n.changeLanguage("fr");
|
|
||||||
} else if (isEqual(currentUserSetting.locale, "JA")) {
|
|
||||||
i18n.changeLanguage("ja");
|
|
||||||
} else {
|
|
||||||
i18n.changeLanguage("en");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentUserSetting.colorTheme === "LIGHT") {
|
if (currentUserSetting.general?.colorTheme === "LIGHT") {
|
||||||
setMode("light");
|
setMode("light");
|
||||||
} else if (currentUserSetting.colorTheme === "DARK") {
|
} else if (currentUserSetting.general?.colorTheme === "DARK") {
|
||||||
setMode("dark");
|
setMode("dark");
|
||||||
} else {
|
} else {
|
||||||
setMode("system");
|
setMode("system");
|
||||||
|
@ -129,6 +129,11 @@ const useUserStore = create<UserState>()((set, get) => ({
|
|||||||
updateMask,
|
updateMask,
|
||||||
})
|
})
|
||||||
).userSetting as UserSetting;
|
).userSetting as UserSetting;
|
||||||
|
console.log("1", {
|
||||||
|
id: userId,
|
||||||
|
userSetting,
|
||||||
|
updateMask,
|
||||||
|
});
|
||||||
const userSettingMap = get().userSettingMapById;
|
const userSettingMap = get().userSettingMapById;
|
||||||
userSettingMap[userId] = updatedUserSetting;
|
userSettingMap[userId] = updatedUserSetting;
|
||||||
set(userSettingMap);
|
set(userSettingMap);
|
||||||
|
@ -28,11 +28,12 @@ message UserSetting {
|
|||||||
// id is the user id.
|
// id is the user id.
|
||||||
int32 id = 1;
|
int32 id = 1;
|
||||||
|
|
||||||
// locale is the user locale.
|
UserSettingGeneral general = 2;
|
||||||
string locale = 2;
|
}
|
||||||
|
|
||||||
// color_theme is the user color theme.
|
message UserSettingGeneral {
|
||||||
string color_theme = 3;
|
string locale = 1;
|
||||||
|
string color_theme = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetUserSettingRequest {
|
message GetUserSettingRequest {
|
||||||
|
@ -98,6 +98,7 @@
|
|||||||
- [UpdateUserSettingRequest](#slash-api-v1-UpdateUserSettingRequest)
|
- [UpdateUserSettingRequest](#slash-api-v1-UpdateUserSettingRequest)
|
||||||
- [UpdateUserSettingResponse](#slash-api-v1-UpdateUserSettingResponse)
|
- [UpdateUserSettingResponse](#slash-api-v1-UpdateUserSettingResponse)
|
||||||
- [UserSetting](#slash-api-v1-UserSetting)
|
- [UserSetting](#slash-api-v1-UserSetting)
|
||||||
|
- [UserSettingGeneral](#slash-api-v1-UserSettingGeneral)
|
||||||
|
|
||||||
- [UserSettingService](#slash-api-v1-UserSettingService)
|
- [UserSettingService](#slash-api-v1-UserSettingService)
|
||||||
|
|
||||||
@ -1323,8 +1324,23 @@
|
|||||||
| Field | Type | Label | Description |
|
| Field | Type | Label | Description |
|
||||||
| ----- | ---- | ----- | ----------- |
|
| ----- | ---- | ----- | ----------- |
|
||||||
| id | [int32](#int32) | | id is the user id. |
|
| id | [int32](#int32) | | id is the user id. |
|
||||||
| locale | [string](#string) | | locale is the user locale. |
|
| general | [UserSettingGeneral](#slash-api-v1-UserSettingGeneral) | | |
|
||||||
| color_theme | [string](#string) | | color_theme is the user color theme. |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="slash-api-v1-UserSettingGeneral"></a>
|
||||||
|
|
||||||
|
### UserSettingGeneral
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| locale | [string](#string) | | |
|
||||||
|
| color_theme | [string](#string) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,10 +29,7 @@ type UserSetting struct {
|
|||||||
|
|
||||||
// id is the user id.
|
// id is the user id.
|
||||||
Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||||
// locale is the user locale.
|
General *UserSettingGeneral `protobuf:"bytes,2,opt,name=general,proto3" json:"general,omitempty"`
|
||||||
Locale string `protobuf:"bytes,2,opt,name=locale,proto3" json:"locale,omitempty"`
|
|
||||||
// color_theme is the user color theme.
|
|
||||||
ColorTheme string `protobuf:"bytes,3,opt,name=color_theme,json=colorTheme,proto3" json:"color_theme,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *UserSetting) Reset() {
|
func (x *UserSetting) Reset() {
|
||||||
@ -74,14 +71,62 @@ func (x *UserSetting) GetId() int32 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *UserSetting) GetLocale() string {
|
func (x *UserSetting) GetGeneral() *UserSettingGeneral {
|
||||||
|
if x != nil {
|
||||||
|
return x.General
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserSettingGeneral struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
Locale string `protobuf:"bytes,1,opt,name=locale,proto3" json:"locale,omitempty"`
|
||||||
|
ColorTheme string `protobuf:"bytes,2,opt,name=color_theme,json=colorTheme,proto3" json:"color_theme,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *UserSettingGeneral) Reset() {
|
||||||
|
*x = UserSettingGeneral{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[1]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *UserSettingGeneral) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*UserSettingGeneral) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *UserSettingGeneral) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[1]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use UserSettingGeneral.ProtoReflect.Descriptor instead.
|
||||||
|
func (*UserSettingGeneral) Descriptor() ([]byte, []int) {
|
||||||
|
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{1}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *UserSettingGeneral) GetLocale() string {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Locale
|
return x.Locale
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *UserSetting) GetColorTheme() string {
|
func (x *UserSettingGeneral) GetColorTheme() string {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.ColorTheme
|
return x.ColorTheme
|
||||||
}
|
}
|
||||||
@ -100,7 +145,7 @@ type GetUserSettingRequest struct {
|
|||||||
func (x *GetUserSettingRequest) Reset() {
|
func (x *GetUserSettingRequest) Reset() {
|
||||||
*x = GetUserSettingRequest{}
|
*x = GetUserSettingRequest{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[1]
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[2]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
@ -113,7 +158,7 @@ func (x *GetUserSettingRequest) String() string {
|
|||||||
func (*GetUserSettingRequest) ProtoMessage() {}
|
func (*GetUserSettingRequest) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *GetUserSettingRequest) ProtoReflect() protoreflect.Message {
|
func (x *GetUserSettingRequest) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[1]
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[2]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
@ -126,7 +171,7 @@ func (x *GetUserSettingRequest) ProtoReflect() protoreflect.Message {
|
|||||||
|
|
||||||
// Deprecated: Use GetUserSettingRequest.ProtoReflect.Descriptor instead.
|
// Deprecated: Use GetUserSettingRequest.ProtoReflect.Descriptor instead.
|
||||||
func (*GetUserSettingRequest) Descriptor() ([]byte, []int) {
|
func (*GetUserSettingRequest) Descriptor() ([]byte, []int) {
|
||||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{1}
|
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{2}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GetUserSettingRequest) GetId() int32 {
|
func (x *GetUserSettingRequest) GetId() int32 {
|
||||||
@ -147,7 +192,7 @@ type GetUserSettingResponse struct {
|
|||||||
func (x *GetUserSettingResponse) Reset() {
|
func (x *GetUserSettingResponse) Reset() {
|
||||||
*x = GetUserSettingResponse{}
|
*x = GetUserSettingResponse{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[2]
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[3]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
@ -160,7 +205,7 @@ func (x *GetUserSettingResponse) String() string {
|
|||||||
func (*GetUserSettingResponse) ProtoMessage() {}
|
func (*GetUserSettingResponse) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *GetUserSettingResponse) ProtoReflect() protoreflect.Message {
|
func (x *GetUserSettingResponse) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[2]
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[3]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
@ -173,7 +218,7 @@ func (x *GetUserSettingResponse) ProtoReflect() protoreflect.Message {
|
|||||||
|
|
||||||
// Deprecated: Use GetUserSettingResponse.ProtoReflect.Descriptor instead.
|
// Deprecated: Use GetUserSettingResponse.ProtoReflect.Descriptor instead.
|
||||||
func (*GetUserSettingResponse) Descriptor() ([]byte, []int) {
|
func (*GetUserSettingResponse) Descriptor() ([]byte, []int) {
|
||||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{2}
|
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{3}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GetUserSettingResponse) GetUserSetting() *UserSetting {
|
func (x *GetUserSettingResponse) GetUserSetting() *UserSetting {
|
||||||
@ -199,7 +244,7 @@ type UpdateUserSettingRequest struct {
|
|||||||
func (x *UpdateUserSettingRequest) Reset() {
|
func (x *UpdateUserSettingRequest) Reset() {
|
||||||
*x = UpdateUserSettingRequest{}
|
*x = UpdateUserSettingRequest{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[3]
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[4]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
@ -212,7 +257,7 @@ func (x *UpdateUserSettingRequest) String() string {
|
|||||||
func (*UpdateUserSettingRequest) ProtoMessage() {}
|
func (*UpdateUserSettingRequest) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *UpdateUserSettingRequest) ProtoReflect() protoreflect.Message {
|
func (x *UpdateUserSettingRequest) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[3]
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[4]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
@ -225,7 +270,7 @@ func (x *UpdateUserSettingRequest) ProtoReflect() protoreflect.Message {
|
|||||||
|
|
||||||
// Deprecated: Use UpdateUserSettingRequest.ProtoReflect.Descriptor instead.
|
// Deprecated: Use UpdateUserSettingRequest.ProtoReflect.Descriptor instead.
|
||||||
func (*UpdateUserSettingRequest) Descriptor() ([]byte, []int) {
|
func (*UpdateUserSettingRequest) Descriptor() ([]byte, []int) {
|
||||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{3}
|
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{4}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *UpdateUserSettingRequest) GetId() int32 {
|
func (x *UpdateUserSettingRequest) GetId() int32 {
|
||||||
@ -260,7 +305,7 @@ type UpdateUserSettingResponse struct {
|
|||||||
func (x *UpdateUserSettingResponse) Reset() {
|
func (x *UpdateUserSettingResponse) Reset() {
|
||||||
*x = UpdateUserSettingResponse{}
|
*x = UpdateUserSettingResponse{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[4]
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[5]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
@ -273,7 +318,7 @@ func (x *UpdateUserSettingResponse) String() string {
|
|||||||
func (*UpdateUserSettingResponse) ProtoMessage() {}
|
func (*UpdateUserSettingResponse) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *UpdateUserSettingResponse) ProtoReflect() protoreflect.Message {
|
func (x *UpdateUserSettingResponse) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[4]
|
mi := &file_api_v1_user_setting_service_proto_msgTypes[5]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
@ -286,7 +331,7 @@ func (x *UpdateUserSettingResponse) ProtoReflect() protoreflect.Message {
|
|||||||
|
|
||||||
// Deprecated: Use UpdateUserSettingResponse.ProtoReflect.Descriptor instead.
|
// Deprecated: Use UpdateUserSettingResponse.ProtoReflect.Descriptor instead.
|
||||||
func (*UpdateUserSettingResponse) Descriptor() ([]byte, []int) {
|
func (*UpdateUserSettingResponse) Descriptor() ([]byte, []int) {
|
||||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{4}
|
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{5}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *UpdateUserSettingResponse) GetUserSetting() *UserSetting {
|
func (x *UpdateUserSettingResponse) GetUserSetting() *UserSetting {
|
||||||
@ -307,70 +352,75 @@ var file_api_v1_user_setting_service_proto_rawDesc = []byte{
|
|||||||
0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65,
|
0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65,
|
||||||
0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
||||||
0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f,
|
0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f,
|
||||||
0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x56, 0x0a, 0x0b, 0x55, 0x73,
|
0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x59, 0x0a, 0x0b, 0x55, 0x73,
|
||||||
0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
|
0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63,
|
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x67, 0x65, 0x6e,
|
||||||
0x61, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c,
|
0x65, 0x72, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x6c, 0x61,
|
||||||
0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x68, 0x65, 0x6d, 0x65,
|
0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65,
|
||||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x68, 0x65,
|
0x74, 0x74, 0x69, 0x6e, 0x67, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x07, 0x67, 0x65,
|
||||||
0x6d, 0x65, 0x22, 0x27, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74,
|
0x6e, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x4d, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
|
0x74, 0x69, 0x6e, 0x67, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6c,
|
||||||
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a, 0x16, 0x47,
|
0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63,
|
||||||
0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73,
|
0x61, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x68, 0x65,
|
||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65,
|
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x54,
|
||||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x6c,
|
0x68, 0x65, 0x6d, 0x65, 0x22, 0x27, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53,
|
||||||
0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53,
|
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a,
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74,
|
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a,
|
||||||
0x69, 0x6e, 0x67, 0x22, 0xa5, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73,
|
0x16, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52,
|
||||||
0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f,
|
||||||
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64,
|
0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
|
||||||
0x12, 0x3c, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61,
|
0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65,
|
||||||
0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
0x74, 0x74, 0x69, 0x6e, 0x67, 0x22, 0xa5, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||||
0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x3b,
|
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20,
|
0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02,
|
||||||
0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
|
0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69,
|
||||||
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52,
|
0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68,
|
||||||
0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x59, 0x0a, 0x19, 0x55,
|
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74,
|
||||||
0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72,
|
0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18,
|
||||||
0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
|
0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
|
||||||
0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73,
|
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73,
|
||||||
0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53,
|
0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x59, 0x0a,
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0xd1, 0x02, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53,
|
0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69,
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x85, 0x01,
|
0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x75, 0x73,
|
||||||
0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
|
||||||
0x12, 0x23, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e,
|
0x32, 0x19, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e,
|
||||||
0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65,
|
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65,
|
||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70,
|
0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0xd1, 0x02, 0x0a, 0x12, 0x55, 0x73, 0x65,
|
||||||
0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74,
|
0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
|
||||||
0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda, 0x41, 0x02,
|
0x85, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69,
|
||||||
0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76,
|
0x6e, 0x67, 0x12, 0x23, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
|
||||||
0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74,
|
0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb2, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e,
|
||||||
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x2e, 0x73, 0x6c,
|
0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65,
|
||||||
0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
|
0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda,
|
||||||
0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75,
|
0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69,
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73,
|
||||||
0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74,
|
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb2, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0xda, 0x41,
|
0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x2e,
|
||||||
0x18, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2c, 0x75, 0x70,
|
0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64,
|
||||||
0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a,
|
0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65,
|
||||||
0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x1b, 0x2f,
|
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70,
|
||||||
0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64,
|
0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53,
|
||||||
0x7d, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0xb5, 0x01, 0x0a, 0x10, 0x63,
|
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c,
|
||||||
0x6f, 0x6d, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42,
|
0xda, 0x41, 0x18, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2c,
|
||||||
0x17, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76,
|
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
||||||
0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68,
|
0x2b, 0x3a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32,
|
||||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x79, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x68,
|
0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b,
|
||||||
0x6f, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74,
|
0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0xb5, 0x01, 0x0a,
|
||||||
0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69,
|
0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
|
||||||
0x76, 0x31, 0xa2, 0x02, 0x03, 0x53, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x53, 0x6c, 0x61, 0x73, 0x68,
|
0x31, 0x42, 0x17, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65,
|
||||||
0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x5c,
|
0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69,
|
||||||
0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x5c, 0x41,
|
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x79, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x6c,
|
||||||
0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
|
0x66, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x70, 0x72,
|
||||||
0x61, 0xea, 0x02, 0x0e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x3a, 0x3a, 0x41, 0x70, 0x69, 0x3a, 0x3a,
|
0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61,
|
||||||
0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x53, 0x41, 0x58, 0xaa, 0x02, 0x0c, 0x53, 0x6c, 0x61,
|
||||||
|
0x73, 0x68, 0x2e, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x53, 0x6c, 0x61, 0x73,
|
||||||
|
0x68, 0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x53, 0x6c, 0x61, 0x73, 0x68,
|
||||||
|
0x5c, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64,
|
||||||
|
0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x3a, 0x3a, 0x41, 0x70, 0x69,
|
||||||
|
0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -385,29 +435,31 @@ func file_api_v1_user_setting_service_proto_rawDescGZIP() []byte {
|
|||||||
return file_api_v1_user_setting_service_proto_rawDescData
|
return file_api_v1_user_setting_service_proto_rawDescData
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_api_v1_user_setting_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
|
var file_api_v1_user_setting_service_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
|
||||||
var file_api_v1_user_setting_service_proto_goTypes = []any{
|
var file_api_v1_user_setting_service_proto_goTypes = []any{
|
||||||
(*UserSetting)(nil), // 0: slash.api.v1.UserSetting
|
(*UserSetting)(nil), // 0: slash.api.v1.UserSetting
|
||||||
(*GetUserSettingRequest)(nil), // 1: slash.api.v1.GetUserSettingRequest
|
(*UserSettingGeneral)(nil), // 1: slash.api.v1.UserSettingGeneral
|
||||||
(*GetUserSettingResponse)(nil), // 2: slash.api.v1.GetUserSettingResponse
|
(*GetUserSettingRequest)(nil), // 2: slash.api.v1.GetUserSettingRequest
|
||||||
(*UpdateUserSettingRequest)(nil), // 3: slash.api.v1.UpdateUserSettingRequest
|
(*GetUserSettingResponse)(nil), // 3: slash.api.v1.GetUserSettingResponse
|
||||||
(*UpdateUserSettingResponse)(nil), // 4: slash.api.v1.UpdateUserSettingResponse
|
(*UpdateUserSettingRequest)(nil), // 4: slash.api.v1.UpdateUserSettingRequest
|
||||||
(*fieldmaskpb.FieldMask)(nil), // 5: google.protobuf.FieldMask
|
(*UpdateUserSettingResponse)(nil), // 5: slash.api.v1.UpdateUserSettingResponse
|
||||||
|
(*fieldmaskpb.FieldMask)(nil), // 6: google.protobuf.FieldMask
|
||||||
}
|
}
|
||||||
var file_api_v1_user_setting_service_proto_depIdxs = []int32{
|
var file_api_v1_user_setting_service_proto_depIdxs = []int32{
|
||||||
0, // 0: slash.api.v1.GetUserSettingResponse.user_setting:type_name -> slash.api.v1.UserSetting
|
1, // 0: slash.api.v1.UserSetting.general:type_name -> slash.api.v1.UserSettingGeneral
|
||||||
0, // 1: slash.api.v1.UpdateUserSettingRequest.user_setting:type_name -> slash.api.v1.UserSetting
|
0, // 1: slash.api.v1.GetUserSettingResponse.user_setting:type_name -> slash.api.v1.UserSetting
|
||||||
5, // 2: slash.api.v1.UpdateUserSettingRequest.update_mask:type_name -> google.protobuf.FieldMask
|
0, // 2: slash.api.v1.UpdateUserSettingRequest.user_setting:type_name -> slash.api.v1.UserSetting
|
||||||
0, // 3: slash.api.v1.UpdateUserSettingResponse.user_setting:type_name -> slash.api.v1.UserSetting
|
6, // 3: slash.api.v1.UpdateUserSettingRequest.update_mask:type_name -> google.protobuf.FieldMask
|
||||||
1, // 4: slash.api.v1.UserSettingService.GetUserSetting:input_type -> slash.api.v1.GetUserSettingRequest
|
0, // 4: slash.api.v1.UpdateUserSettingResponse.user_setting:type_name -> slash.api.v1.UserSetting
|
||||||
3, // 5: slash.api.v1.UserSettingService.UpdateUserSetting:input_type -> slash.api.v1.UpdateUserSettingRequest
|
2, // 5: slash.api.v1.UserSettingService.GetUserSetting:input_type -> slash.api.v1.GetUserSettingRequest
|
||||||
2, // 6: slash.api.v1.UserSettingService.GetUserSetting:output_type -> slash.api.v1.GetUserSettingResponse
|
4, // 6: slash.api.v1.UserSettingService.UpdateUserSetting:input_type -> slash.api.v1.UpdateUserSettingRequest
|
||||||
4, // 7: slash.api.v1.UserSettingService.UpdateUserSetting:output_type -> slash.api.v1.UpdateUserSettingResponse
|
3, // 7: slash.api.v1.UserSettingService.GetUserSetting:output_type -> slash.api.v1.GetUserSettingResponse
|
||||||
6, // [6:8] is the sub-list for method output_type
|
5, // 8: slash.api.v1.UserSettingService.UpdateUserSetting:output_type -> slash.api.v1.UpdateUserSettingResponse
|
||||||
4, // [4:6] is the sub-list for method input_type
|
7, // [7:9] is the sub-list for method output_type
|
||||||
4, // [4:4] is the sub-list for extension type_name
|
5, // [5:7] is the sub-list for method input_type
|
||||||
4, // [4:4] is the sub-list for extension extendee
|
5, // [5:5] is the sub-list for extension type_name
|
||||||
0, // [0:4] is the sub-list for field type_name
|
5, // [5:5] is the sub-list for extension extendee
|
||||||
|
0, // [0:5] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_api_v1_user_setting_service_proto_init() }
|
func init() { file_api_v1_user_setting_service_proto_init() }
|
||||||
@ -429,7 +481,7 @@ func file_api_v1_user_setting_service_proto_init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_api_v1_user_setting_service_proto_msgTypes[1].Exporter = func(v any, i int) any {
|
file_api_v1_user_setting_service_proto_msgTypes[1].Exporter = func(v any, i int) any {
|
||||||
switch v := v.(*GetUserSettingRequest); i {
|
switch v := v.(*UserSettingGeneral); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
@ -441,7 +493,7 @@ func file_api_v1_user_setting_service_proto_init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_api_v1_user_setting_service_proto_msgTypes[2].Exporter = func(v any, i int) any {
|
file_api_v1_user_setting_service_proto_msgTypes[2].Exporter = func(v any, i int) any {
|
||||||
switch v := v.(*GetUserSettingResponse); i {
|
switch v := v.(*GetUserSettingRequest); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
@ -453,7 +505,7 @@ func file_api_v1_user_setting_service_proto_init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_api_v1_user_setting_service_proto_msgTypes[3].Exporter = func(v any, i int) any {
|
file_api_v1_user_setting_service_proto_msgTypes[3].Exporter = func(v any, i int) any {
|
||||||
switch v := v.(*UpdateUserSettingRequest); i {
|
switch v := v.(*GetUserSettingResponse); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
@ -465,6 +517,18 @@ func file_api_v1_user_setting_service_proto_init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_api_v1_user_setting_service_proto_msgTypes[4].Exporter = func(v any, i int) any {
|
file_api_v1_user_setting_service_proto_msgTypes[4].Exporter = func(v any, i int) any {
|
||||||
|
switch v := v.(*UpdateUserSettingRequest); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_api_v1_user_setting_service_proto_msgTypes[5].Exporter = func(v any, i int) any {
|
||||||
switch v := v.(*UpdateUserSettingResponse); i {
|
switch v := v.(*UpdateUserSettingResponse); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
@ -483,7 +547,7 @@ func file_api_v1_user_setting_service_proto_init() {
|
|||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_api_v1_user_setting_service_proto_rawDesc,
|
RawDescriptor: file_api_v1_user_setting_service_proto_rawDesc,
|
||||||
NumEnums: 0,
|
NumEnums: 0,
|
||||||
NumMessages: 5,
|
NumMessages: 6,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 1,
|
NumServices: 1,
|
||||||
},
|
},
|
||||||
|
@ -827,12 +827,15 @@ definitions:
|
|||||||
type: integer
|
type: integer
|
||||||
format: int32
|
format: int32
|
||||||
description: id is the user id.
|
description: id is the user id.
|
||||||
|
general:
|
||||||
|
$ref: '#/definitions/apiv1UserSettingGeneral'
|
||||||
|
apiv1UserSettingGeneral:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
locale:
|
locale:
|
||||||
type: string
|
type: string
|
||||||
description: locale is the user locale.
|
|
||||||
colorTheme:
|
colorTheme:
|
||||||
type: string
|
type: string
|
||||||
description: color_theme is the user color theme.
|
|
||||||
apiv1Visibility:
|
apiv1Visibility:
|
||||||
type: string
|
type: string
|
||||||
enum:
|
enum:
|
||||||
|
@ -19,9 +19,10 @@
|
|||||||
- [Shortcut](#slash-store-Shortcut)
|
- [Shortcut](#slash-store-Shortcut)
|
||||||
|
|
||||||
- [store/user_setting.proto](#store_user_setting-proto)
|
- [store/user_setting.proto](#store_user_setting-proto)
|
||||||
- [AccessTokensUserSetting](#slash-store-AccessTokensUserSetting)
|
|
||||||
- [AccessTokensUserSetting.AccessToken](#slash-store-AccessTokensUserSetting-AccessToken)
|
|
||||||
- [UserSetting](#slash-store-UserSetting)
|
- [UserSetting](#slash-store-UserSetting)
|
||||||
|
- [UserSettingAccessTokens](#slash-store-UserSettingAccessTokens)
|
||||||
|
- [UserSettingAccessTokens.AccessToken](#slash-store-UserSettingAccessTokens-AccessToken)
|
||||||
|
- [UserSettingGeneral](#slash-store-UserSettingGeneral)
|
||||||
|
|
||||||
- [UserSettingKey](#slash-store-UserSettingKey)
|
- [UserSettingKey](#slash-store-UserSettingKey)
|
||||||
|
|
||||||
@ -232,24 +233,42 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="slash-store-AccessTokensUserSetting"></a>
|
<a name="slash-store-UserSetting"></a>
|
||||||
|
|
||||||
### AccessTokensUserSetting
|
### UserSetting
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
| Field | Type | Label | Description |
|
| Field | Type | Label | Description |
|
||||||
| ----- | ---- | ----- | ----------- |
|
| ----- | ---- | ----- | ----------- |
|
||||||
| access_tokens | [AccessTokensUserSetting.AccessToken](#slash-store-AccessTokensUserSetting-AccessToken) | repeated | |
|
| user_id | [int32](#int32) | | |
|
||||||
|
| key | [UserSettingKey](#slash-store-UserSettingKey) | | |
|
||||||
|
| general | [UserSettingGeneral](#slash-store-UserSettingGeneral) | | |
|
||||||
|
| access_tokens | [UserSettingAccessTokens](#slash-store-UserSettingAccessTokens) | | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="slash-store-AccessTokensUserSetting-AccessToken"></a>
|
<a name="slash-store-UserSettingAccessTokens"></a>
|
||||||
|
|
||||||
### AccessTokensUserSetting.AccessToken
|
### UserSettingAccessTokens
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Field | Type | Label | Description |
|
||||||
|
| ----- | ---- | ----- | ----------- |
|
||||||
|
| access_tokens | [UserSettingAccessTokens.AccessToken](#slash-store-UserSettingAccessTokens-AccessToken) | repeated | |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<a name="slash-store-UserSettingAccessTokens-AccessToken"></a>
|
||||||
|
|
||||||
|
### UserSettingAccessTokens.AccessToken
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -263,17 +282,14 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a name="slash-store-UserSetting"></a>
|
<a name="slash-store-UserSettingGeneral"></a>
|
||||||
|
|
||||||
### UserSetting
|
### UserSettingGeneral
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
| Field | Type | Label | Description |
|
| Field | Type | Label | Description |
|
||||||
| ----- | ---- | ----- | ----------- |
|
| ----- | ---- | ----- | ----------- |
|
||||||
| user_id | [int32](#int32) | | |
|
|
||||||
| key | [UserSettingKey](#slash-store-UserSettingKey) | | |
|
|
||||||
| access_tokens | [AccessTokensUserSetting](#slash-store-AccessTokensUserSetting) | | |
|
|
||||||
| locale | [string](#string) | | |
|
| locale | [string](#string) | | |
|
||||||
| color_theme | [string](#string) | | |
|
| color_theme | [string](#string) | | |
|
||||||
|
|
||||||
@ -292,9 +308,8 @@
|
|||||||
| Name | Number | Description |
|
| Name | Number | Description |
|
||||||
| ---- | ------ | ----------- |
|
| ---- | ------ | ----------- |
|
||||||
| USER_SETTING_KEY_UNSPECIFIED | 0 | |
|
| USER_SETTING_KEY_UNSPECIFIED | 0 | |
|
||||||
| ACCESS_TOKENS | 1 | Access tokens for the user. |
|
| GENERAL | 1 | General settings for the user. |
|
||||||
| LOCALE | 2 | Locale for the user. |
|
| ACCESS_TOKENS | 2 | Access tokens for the user. |
|
||||||
| COLOR_THEME | 3 | Color theme for the user. |
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,27 +24,23 @@ type UserSettingKey int32
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
UserSettingKey_USER_SETTING_KEY_UNSPECIFIED UserSettingKey = 0
|
UserSettingKey_USER_SETTING_KEY_UNSPECIFIED UserSettingKey = 0
|
||||||
|
// General settings for the user.
|
||||||
|
UserSettingKey_GENERAL UserSettingKey = 1
|
||||||
// Access tokens for the user.
|
// Access tokens for the user.
|
||||||
UserSettingKey_ACCESS_TOKENS UserSettingKey = 1
|
UserSettingKey_ACCESS_TOKENS UserSettingKey = 2
|
||||||
// Locale for the user.
|
|
||||||
UserSettingKey_LOCALE UserSettingKey = 2
|
|
||||||
// Color theme for the user.
|
|
||||||
UserSettingKey_COLOR_THEME UserSettingKey = 3
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Enum value maps for UserSettingKey.
|
// Enum value maps for UserSettingKey.
|
||||||
var (
|
var (
|
||||||
UserSettingKey_name = map[int32]string{
|
UserSettingKey_name = map[int32]string{
|
||||||
0: "USER_SETTING_KEY_UNSPECIFIED",
|
0: "USER_SETTING_KEY_UNSPECIFIED",
|
||||||
1: "ACCESS_TOKENS",
|
1: "GENERAL",
|
||||||
2: "LOCALE",
|
2: "ACCESS_TOKENS",
|
||||||
3: "COLOR_THEME",
|
|
||||||
}
|
}
|
||||||
UserSettingKey_value = map[string]int32{
|
UserSettingKey_value = map[string]int32{
|
||||||
"USER_SETTING_KEY_UNSPECIFIED": 0,
|
"USER_SETTING_KEY_UNSPECIFIED": 0,
|
||||||
"ACCESS_TOKENS": 1,
|
"GENERAL": 1,
|
||||||
"LOCALE": 2,
|
"ACCESS_TOKENS": 2,
|
||||||
"COLOR_THEME": 3,
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -84,9 +80,8 @@ type UserSetting struct {
|
|||||||
Key UserSettingKey `protobuf:"varint,2,opt,name=key,proto3,enum=slash.store.UserSettingKey" json:"key,omitempty"`
|
Key UserSettingKey `protobuf:"varint,2,opt,name=key,proto3,enum=slash.store.UserSettingKey" json:"key,omitempty"`
|
||||||
// Types that are assignable to Value:
|
// Types that are assignable to Value:
|
||||||
//
|
//
|
||||||
|
// *UserSetting_General
|
||||||
// *UserSetting_AccessTokens
|
// *UserSetting_AccessTokens
|
||||||
// *UserSetting_Locale
|
|
||||||
// *UserSetting_ColorTheme
|
|
||||||
Value isUserSetting_Value `protobuf_oneof:"value"`
|
Value isUserSetting_Value `protobuf_oneof:"value"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,59 +138,47 @@ func (m *UserSetting) GetValue() isUserSetting_Value {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *UserSetting) GetAccessTokens() *AccessTokensUserSetting {
|
func (x *UserSetting) GetGeneral() *UserSettingGeneral {
|
||||||
|
if x, ok := x.GetValue().(*UserSetting_General); ok {
|
||||||
|
return x.General
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *UserSetting) GetAccessTokens() *UserSettingAccessTokens {
|
||||||
if x, ok := x.GetValue().(*UserSetting_AccessTokens); ok {
|
if x, ok := x.GetValue().(*UserSetting_AccessTokens); ok {
|
||||||
return x.AccessTokens
|
return x.AccessTokens
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *UserSetting) GetLocale() string {
|
|
||||||
if x, ok := x.GetValue().(*UserSetting_Locale); ok {
|
|
||||||
return x.Locale
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *UserSetting) GetColorTheme() string {
|
|
||||||
if x, ok := x.GetValue().(*UserSetting_ColorTheme); ok {
|
|
||||||
return x.ColorTheme
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type isUserSetting_Value interface {
|
type isUserSetting_Value interface {
|
||||||
isUserSetting_Value()
|
isUserSetting_Value()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UserSetting_General struct {
|
||||||
|
General *UserSettingGeneral `protobuf:"bytes,3,opt,name=general,proto3,oneof"`
|
||||||
|
}
|
||||||
|
|
||||||
type UserSetting_AccessTokens struct {
|
type UserSetting_AccessTokens struct {
|
||||||
AccessTokens *AccessTokensUserSetting `protobuf:"bytes,3,opt,name=access_tokens,json=accessTokens,proto3,oneof"`
|
AccessTokens *UserSettingAccessTokens `protobuf:"bytes,4,opt,name=access_tokens,json=accessTokens,proto3,oneof"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserSetting_Locale struct {
|
func (*UserSetting_General) isUserSetting_Value() {}
|
||||||
Locale string `protobuf:"bytes,4,opt,name=locale,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UserSetting_ColorTheme struct {
|
|
||||||
ColorTheme string `protobuf:"bytes,5,opt,name=color_theme,json=colorTheme,proto3,oneof"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*UserSetting_AccessTokens) isUserSetting_Value() {}
|
func (*UserSetting_AccessTokens) isUserSetting_Value() {}
|
||||||
|
|
||||||
func (*UserSetting_Locale) isUserSetting_Value() {}
|
type UserSettingGeneral struct {
|
||||||
|
|
||||||
func (*UserSetting_ColorTheme) isUserSetting_Value() {}
|
|
||||||
|
|
||||||
type AccessTokensUserSetting struct {
|
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
AccessTokens []*AccessTokensUserSetting_AccessToken `protobuf:"bytes,1,rep,name=access_tokens,json=accessTokens,proto3" json:"access_tokens,omitempty"`
|
Locale string `protobuf:"bytes,1,opt,name=locale,proto3" json:"locale,omitempty"`
|
||||||
|
ColorTheme string `protobuf:"bytes,2,opt,name=color_theme,json=colorTheme,proto3" json:"color_theme,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AccessTokensUserSetting) Reset() {
|
func (x *UserSettingGeneral) Reset() {
|
||||||
*x = AccessTokensUserSetting{}
|
*x = UserSettingGeneral{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_store_user_setting_proto_msgTypes[1]
|
mi := &file_store_user_setting_proto_msgTypes[1]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
@ -203,13 +186,13 @@ func (x *AccessTokensUserSetting) Reset() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AccessTokensUserSetting) String() string {
|
func (x *UserSettingGeneral) String() string {
|
||||||
return protoimpl.X.MessageStringOf(x)
|
return protoimpl.X.MessageStringOf(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*AccessTokensUserSetting) ProtoMessage() {}
|
func (*UserSettingGeneral) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *AccessTokensUserSetting) ProtoReflect() protoreflect.Message {
|
func (x *UserSettingGeneral) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_store_user_setting_proto_msgTypes[1]
|
mi := &file_store_user_setting_proto_msgTypes[1]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
@ -221,19 +204,73 @@ func (x *AccessTokensUserSetting) ProtoReflect() protoreflect.Message {
|
|||||||
return mi.MessageOf(x)
|
return mi.MessageOf(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deprecated: Use AccessTokensUserSetting.ProtoReflect.Descriptor instead.
|
// Deprecated: Use UserSettingGeneral.ProtoReflect.Descriptor instead.
|
||||||
func (*AccessTokensUserSetting) Descriptor() ([]byte, []int) {
|
func (*UserSettingGeneral) Descriptor() ([]byte, []int) {
|
||||||
return file_store_user_setting_proto_rawDescGZIP(), []int{1}
|
return file_store_user_setting_proto_rawDescGZIP(), []int{1}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AccessTokensUserSetting) GetAccessTokens() []*AccessTokensUserSetting_AccessToken {
|
func (x *UserSettingGeneral) GetLocale() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Locale
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *UserSettingGeneral) GetColorTheme() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.ColorTheme
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserSettingAccessTokens struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
AccessTokens []*UserSettingAccessTokens_AccessToken `protobuf:"bytes,1,rep,name=access_tokens,json=accessTokens,proto3" json:"access_tokens,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *UserSettingAccessTokens) Reset() {
|
||||||
|
*x = UserSettingAccessTokens{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_store_user_setting_proto_msgTypes[2]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *UserSettingAccessTokens) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*UserSettingAccessTokens) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *UserSettingAccessTokens) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_store_user_setting_proto_msgTypes[2]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use UserSettingAccessTokens.ProtoReflect.Descriptor instead.
|
||||||
|
func (*UserSettingAccessTokens) Descriptor() ([]byte, []int) {
|
||||||
|
return file_store_user_setting_proto_rawDescGZIP(), []int{2}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *UserSettingAccessTokens) GetAccessTokens() []*UserSettingAccessTokens_AccessToken {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.AccessTokens
|
return x.AccessTokens
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type AccessTokensUserSetting_AccessToken struct {
|
type UserSettingAccessTokens_AccessToken struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
@ -245,23 +282,23 @@ type AccessTokensUserSetting_AccessToken struct {
|
|||||||
Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
|
Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AccessTokensUserSetting_AccessToken) Reset() {
|
func (x *UserSettingAccessTokens_AccessToken) Reset() {
|
||||||
*x = AccessTokensUserSetting_AccessToken{}
|
*x = UserSettingAccessTokens_AccessToken{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_store_user_setting_proto_msgTypes[2]
|
mi := &file_store_user_setting_proto_msgTypes[3]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AccessTokensUserSetting_AccessToken) String() string {
|
func (x *UserSettingAccessTokens_AccessToken) String() string {
|
||||||
return protoimpl.X.MessageStringOf(x)
|
return protoimpl.X.MessageStringOf(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*AccessTokensUserSetting_AccessToken) ProtoMessage() {}
|
func (*UserSettingAccessTokens_AccessToken) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *AccessTokensUserSetting_AccessToken) ProtoReflect() protoreflect.Message {
|
func (x *UserSettingAccessTokens_AccessToken) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_store_user_setting_proto_msgTypes[2]
|
mi := &file_store_user_setting_proto_msgTypes[3]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
@ -272,19 +309,19 @@ func (x *AccessTokensUserSetting_AccessToken) ProtoReflect() protoreflect.Messag
|
|||||||
return mi.MessageOf(x)
|
return mi.MessageOf(x)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deprecated: Use AccessTokensUserSetting_AccessToken.ProtoReflect.Descriptor instead.
|
// Deprecated: Use UserSettingAccessTokens_AccessToken.ProtoReflect.Descriptor instead.
|
||||||
func (*AccessTokensUserSetting_AccessToken) Descriptor() ([]byte, []int) {
|
func (*UserSettingAccessTokens_AccessToken) Descriptor() ([]byte, []int) {
|
||||||
return file_store_user_setting_proto_rawDescGZIP(), []int{1, 0}
|
return file_store_user_setting_proto_rawDescGZIP(), []int{2, 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AccessTokensUserSetting_AccessToken) GetAccessToken() string {
|
func (x *UserSettingAccessTokens_AccessToken) GetAccessToken() string {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.AccessToken
|
return x.AccessToken
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *AccessTokensUserSetting_AccessToken) GetDescription() string {
|
func (x *UserSettingAccessTokens_AccessToken) GetDescription() string {
|
||||||
if x != nil {
|
if x != nil {
|
||||||
return x.Description
|
return x.Description
|
||||||
}
|
}
|
||||||
@ -302,45 +339,49 @@ var file_store_user_setting_proto_rawDesc = []byte{
|
|||||||
0x12, 0x2d, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e,
|
0x12, 0x2d, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e,
|
||||||
0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72,
|
0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72,
|
||||||
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
|
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
|
||||||
0x4b, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73,
|
0x3b, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
|
||||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73,
|
0x32, 0x1f, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x55,
|
||||||
0x74, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
|
0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
|
||||||
0x73, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0c,
|
0x6c, 0x48, 0x00, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x4b, 0x0a, 0x0d,
|
||||||
0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x06,
|
0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20,
|
||||||
0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06,
|
0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72,
|
||||||
0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f,
|
0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63,
|
||||||
0x74, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x63,
|
0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x63, 0x63,
|
||||||
0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x68, 0x65, 0x6d, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c,
|
0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c,
|
||||||
0x75, 0x65, 0x22, 0xc4, 0x01, 0x0a, 0x17, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b,
|
0x75, 0x65, 0x22, 0x4d, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
||||||
0x65, 0x6e, 0x73, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x55,
|
0x67, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x61,
|
||||||
0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18,
|
0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65,
|
||||||
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74,
|
0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x18,
|
||||||
0x6f, 0x72, 0x65, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73,
|
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x68, 0x65, 0x6d,
|
||||||
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x41, 0x63, 0x63, 0x65,
|
0x65, 0x22, 0xc4, 0x01, 0x0a, 0x17, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
||||||
0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54,
|
0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x55, 0x0a,
|
||||||
0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x52, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54,
|
0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01,
|
||||||
0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74,
|
0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f,
|
||||||
0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65,
|
0x72, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63,
|
||||||
0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
|
0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73,
|
||||||
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,
|
0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f,
|
||||||
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x62, 0x0a, 0x0e, 0x55, 0x73, 0x65,
|
0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x52, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f,
|
||||||
0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x1c, 0x55,
|
0x6b, 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f,
|
||||||
0x53, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4b, 0x45, 0x59, 0x5f,
|
0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73,
|
||||||
0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a,
|
0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
|
||||||
0x0d, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x53, 0x10, 0x01,
|
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73,
|
||||||
0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b,
|
0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x52, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72,
|
||||||
0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x54, 0x48, 0x45, 0x4d, 0x45, 0x10, 0x03, 0x42, 0xa1, 0x01,
|
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x53,
|
||||||
0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72,
|
0x45, 0x52, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x55,
|
||||||
0x65, 0x42, 0x10, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72,
|
0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07,
|
||||||
0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
|
0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x43, 0x43,
|
||||||
0x6d, 0x2f, 0x79, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64,
|
0x45, 0x53, 0x53, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x53, 0x10, 0x02, 0x42, 0xa1, 0x01, 0x0a,
|
||||||
0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e,
|
0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65,
|
||||||
0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0xa2, 0x02, 0x03, 0x53, 0x53, 0x58, 0xaa, 0x02, 0x0b, 0x53,
|
0x42, 0x10, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f,
|
||||||
0x6c, 0x61, 0x73, 0x68, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0b, 0x53, 0x6c, 0x61,
|
0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||||
0x73, 0x68, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0xe2, 0x02, 0x17, 0x53, 0x6c, 0x61, 0x73, 0x68,
|
0x2f, 0x79, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x2f,
|
||||||
0x5c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
|
0x73, 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f,
|
||||||
0x74, 0x61, 0xea, 0x02, 0x0c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x3a, 0x3a, 0x53, 0x74, 0x6f, 0x72,
|
0x73, 0x74, 0x6f, 0x72, 0x65, 0xa2, 0x02, 0x03, 0x53, 0x53, 0x58, 0xaa, 0x02, 0x0b, 0x53, 0x6c,
|
||||||
0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x61, 0x73, 0x68, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0xca, 0x02, 0x0b, 0x53, 0x6c, 0x61, 0x73,
|
||||||
|
0x68, 0x5c, 0x53, 0x74, 0x6f, 0x72, 0x65, 0xe2, 0x02, 0x17, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x5c,
|
||||||
|
0x53, 0x74, 0x6f, 0x72, 0x65, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
|
||||||
|
0x61, 0xea, 0x02, 0x0c, 0x53, 0x6c, 0x61, 0x73, 0x68, 0x3a, 0x3a, 0x53, 0x74, 0x6f, 0x72, 0x65,
|
||||||
|
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -356,22 +397,24 @@ func file_store_user_setting_proto_rawDescGZIP() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var file_store_user_setting_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
var file_store_user_setting_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
||||||
var file_store_user_setting_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
|
var file_store_user_setting_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
||||||
var file_store_user_setting_proto_goTypes = []any{
|
var file_store_user_setting_proto_goTypes = []any{
|
||||||
(UserSettingKey)(0), // 0: slash.store.UserSettingKey
|
(UserSettingKey)(0), // 0: slash.store.UserSettingKey
|
||||||
(*UserSetting)(nil), // 1: slash.store.UserSetting
|
(*UserSetting)(nil), // 1: slash.store.UserSetting
|
||||||
(*AccessTokensUserSetting)(nil), // 2: slash.store.AccessTokensUserSetting
|
(*UserSettingGeneral)(nil), // 2: slash.store.UserSettingGeneral
|
||||||
(*AccessTokensUserSetting_AccessToken)(nil), // 3: slash.store.AccessTokensUserSetting.AccessToken
|
(*UserSettingAccessTokens)(nil), // 3: slash.store.UserSettingAccessTokens
|
||||||
|
(*UserSettingAccessTokens_AccessToken)(nil), // 4: slash.store.UserSettingAccessTokens.AccessToken
|
||||||
}
|
}
|
||||||
var file_store_user_setting_proto_depIdxs = []int32{
|
var file_store_user_setting_proto_depIdxs = []int32{
|
||||||
0, // 0: slash.store.UserSetting.key:type_name -> slash.store.UserSettingKey
|
0, // 0: slash.store.UserSetting.key:type_name -> slash.store.UserSettingKey
|
||||||
2, // 1: slash.store.UserSetting.access_tokens:type_name -> slash.store.AccessTokensUserSetting
|
2, // 1: slash.store.UserSetting.general:type_name -> slash.store.UserSettingGeneral
|
||||||
3, // 2: slash.store.AccessTokensUserSetting.access_tokens:type_name -> slash.store.AccessTokensUserSetting.AccessToken
|
3, // 2: slash.store.UserSetting.access_tokens:type_name -> slash.store.UserSettingAccessTokens
|
||||||
3, // [3:3] is the sub-list for method output_type
|
4, // 3: slash.store.UserSettingAccessTokens.access_tokens:type_name -> slash.store.UserSettingAccessTokens.AccessToken
|
||||||
3, // [3:3] is the sub-list for method input_type
|
4, // [4:4] is the sub-list for method output_type
|
||||||
3, // [3:3] is the sub-list for extension type_name
|
4, // [4:4] is the sub-list for method input_type
|
||||||
3, // [3:3] is the sub-list for extension extendee
|
4, // [4:4] is the sub-list for extension type_name
|
||||||
0, // [0:3] is the sub-list for field type_name
|
4, // [4:4] is the sub-list for extension extendee
|
||||||
|
0, // [0:4] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_store_user_setting_proto_init() }
|
func init() { file_store_user_setting_proto_init() }
|
||||||
@ -393,7 +436,7 @@ func file_store_user_setting_proto_init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_store_user_setting_proto_msgTypes[1].Exporter = func(v any, i int) any {
|
file_store_user_setting_proto_msgTypes[1].Exporter = func(v any, i int) any {
|
||||||
switch v := v.(*AccessTokensUserSetting); i {
|
switch v := v.(*UserSettingGeneral); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
@ -405,7 +448,19 @@ func file_store_user_setting_proto_init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_store_user_setting_proto_msgTypes[2].Exporter = func(v any, i int) any {
|
file_store_user_setting_proto_msgTypes[2].Exporter = func(v any, i int) any {
|
||||||
switch v := v.(*AccessTokensUserSetting_AccessToken); i {
|
switch v := v.(*UserSettingAccessTokens); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_store_user_setting_proto_msgTypes[3].Exporter = func(v any, i int) any {
|
||||||
|
switch v := v.(*UserSettingAccessTokens_AccessToken); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
case 1:
|
case 1:
|
||||||
@ -418,9 +473,8 @@ func file_store_user_setting_proto_init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_store_user_setting_proto_msgTypes[0].OneofWrappers = []any{
|
file_store_user_setting_proto_msgTypes[0].OneofWrappers = []any{
|
||||||
|
(*UserSetting_General)(nil),
|
||||||
(*UserSetting_AccessTokens)(nil),
|
(*UserSetting_AccessTokens)(nil),
|
||||||
(*UserSetting_Locale)(nil),
|
|
||||||
(*UserSetting_ColorTheme)(nil),
|
|
||||||
}
|
}
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
@ -428,7 +482,7 @@ func file_store_user_setting_proto_init() {
|
|||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_store_user_setting_proto_rawDesc,
|
RawDescriptor: file_store_user_setting_proto_rawDesc,
|
||||||
NumEnums: 1,
|
NumEnums: 1,
|
||||||
NumMessages: 3,
|
NumMessages: 4,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
@ -10,25 +10,26 @@ message UserSetting {
|
|||||||
UserSettingKey key = 2;
|
UserSettingKey key = 2;
|
||||||
|
|
||||||
oneof value {
|
oneof value {
|
||||||
AccessTokensUserSetting access_tokens = 3;
|
UserSettingGeneral general = 3;
|
||||||
|
|
||||||
string locale = 4;
|
UserSettingAccessTokens access_tokens = 4;
|
||||||
|
|
||||||
string color_theme = 5;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum UserSettingKey {
|
enum UserSettingKey {
|
||||||
USER_SETTING_KEY_UNSPECIFIED = 0;
|
USER_SETTING_KEY_UNSPECIFIED = 0;
|
||||||
|
// General settings for the user.
|
||||||
|
GENERAL = 1;
|
||||||
// Access tokens for the user.
|
// Access tokens for the user.
|
||||||
ACCESS_TOKENS = 1;
|
ACCESS_TOKENS = 2;
|
||||||
// Locale for the user.
|
|
||||||
LOCALE = 2;
|
|
||||||
// Color theme for the user.
|
|
||||||
COLOR_THEME = 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message AccessTokensUserSetting {
|
message UserSettingGeneral {
|
||||||
|
string locale = 1;
|
||||||
|
string color_theme = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserSettingAccessTokens {
|
||||||
message AccessToken {
|
message AccessToken {
|
||||||
// The access token is a JWT token.
|
// The access token is a JWT token.
|
||||||
// Including expiration time, issuer, etc.
|
// Including expiration time, issuer, etc.
|
||||||
|
@ -163,7 +163,7 @@ func audienceContains(audience jwt.ClaimStrings, token string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func validateAccessToken(accessTokenString string, userAccessTokens []*storepb.AccessTokensUserSetting_AccessToken) bool {
|
func validateAccessToken(accessTokenString string, userAccessTokens []*storepb.UserSettingAccessTokens_AccessToken) bool {
|
||||||
for _, userAccessToken := range userAccessTokens {
|
for _, userAccessToken := range userAccessTokens {
|
||||||
if accessTokenString == userAccessToken.AccessToken {
|
if accessTokenString == userAccessToken.AccessToken {
|
||||||
return true
|
return true
|
||||||
|
@ -251,7 +251,7 @@ func (s *APIV1Service) DeleteUserAccessToken(ctx context.Context, request *v1pb.
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to list access tokens: %v", err)
|
return nil, status.Errorf(codes.Internal, "failed to list access tokens: %v", err)
|
||||||
}
|
}
|
||||||
updatedUserAccessTokens := []*storepb.AccessTokensUserSetting_AccessToken{}
|
updatedUserAccessTokens := []*storepb.UserSettingAccessTokens_AccessToken{}
|
||||||
for _, userAccessToken := range userAccessTokens {
|
for _, userAccessToken := range userAccessTokens {
|
||||||
if userAccessToken.AccessToken == request.AccessToken {
|
if userAccessToken.AccessToken == request.AccessToken {
|
||||||
continue
|
continue
|
||||||
@ -262,7 +262,7 @@ func (s *APIV1Service) DeleteUserAccessToken(ctx context.Context, request *v1pb.
|
|||||||
UserId: user.ID,
|
UserId: user.ID,
|
||||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||||
Value: &storepb.UserSetting_AccessTokens{
|
Value: &storepb.UserSetting_AccessTokens{
|
||||||
AccessTokens: &storepb.AccessTokensUserSetting{
|
AccessTokens: &storepb.UserSettingAccessTokens{
|
||||||
AccessTokens: updatedUserAccessTokens,
|
AccessTokens: updatedUserAccessTokens,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -278,7 +278,7 @@ func (s *APIV1Service) UpsertAccessTokenToStore(ctx context.Context, user *store
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "failed to get user access tokens")
|
return errors.Wrap(err, "failed to get user access tokens")
|
||||||
}
|
}
|
||||||
userAccessToken := storepb.AccessTokensUserSetting_AccessToken{
|
userAccessToken := storepb.UserSettingAccessTokens_AccessToken{
|
||||||
AccessToken: accessToken,
|
AccessToken: accessToken,
|
||||||
Description: description,
|
Description: description,
|
||||||
}
|
}
|
||||||
@ -287,7 +287,7 @@ func (s *APIV1Service) UpsertAccessTokenToStore(ctx context.Context, user *store
|
|||||||
UserId: user.ID,
|
UserId: user.ID,
|
||||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||||
Value: &storepb.UserSetting_AccessTokens{
|
Value: &storepb.UserSetting_AccessTokens{
|
||||||
AccessTokens: &storepb.AccessTokensUserSetting{
|
AccessTokens: &storepb.UserSettingAccessTokens{
|
||||||
AccessTokens: userAccessTokens,
|
AccessTokens: userAccessTokens,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -32,22 +32,15 @@ func (s *APIV1Service) UpdateUserSetting(ctx context.Context, request *v1pb.Upda
|
|||||||
return nil, status.Errorf(codes.Unauthenticated, "failed to get current user: %v", err)
|
return nil, status.Errorf(codes.Unauthenticated, "failed to get current user: %v", err)
|
||||||
}
|
}
|
||||||
for _, path := range request.UpdateMask.Paths {
|
for _, path := range request.UpdateMask.Paths {
|
||||||
if path == "locale" {
|
if path == "general" {
|
||||||
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
|
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||||
UserId: user.ID,
|
UserId: user.ID,
|
||||||
Key: storepb.UserSettingKey_LOCALE,
|
Key: storepb.UserSettingKey_GENERAL,
|
||||||
Value: &storepb.UserSetting_Locale{
|
Value: &storepb.UserSetting_General{
|
||||||
Locale: request.UserSetting.Locale,
|
General: &storepb.UserSettingGeneral{
|
||||||
|
Locale: request.UserSetting.General.Locale,
|
||||||
|
ColorTheme: request.UserSetting.General.ColorTheme,
|
||||||
},
|
},
|
||||||
}); err != nil {
|
|
||||||
return nil, status.Errorf(codes.Internal, "failed to update user setting: %v", err)
|
|
||||||
}
|
|
||||||
} else if path == "color_theme" {
|
|
||||||
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
|
|
||||||
UserId: user.ID,
|
|
||||||
Key: storepb.UserSettingKey_COLOR_THEME,
|
|
||||||
Value: &storepb.UserSetting_ColorTheme{
|
|
||||||
ColorTheme: request.UserSetting.ColorTheme,
|
|
||||||
},
|
},
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to update user setting: %v", err)
|
return nil, status.Errorf(codes.Internal, "failed to update user setting: %v", err)
|
||||||
@ -76,14 +69,17 @@ func getUserSetting(ctx context.Context, s *store.Store, userID int32) (*v1pb.Us
|
|||||||
|
|
||||||
userSetting := &v1pb.UserSetting{
|
userSetting := &v1pb.UserSetting{
|
||||||
Id: userID,
|
Id: userID,
|
||||||
|
General: &v1pb.UserSettingGeneral{
|
||||||
Locale: "EN",
|
Locale: "EN",
|
||||||
ColorTheme: "SYSTEM",
|
ColorTheme: "SYSTEM",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, setting := range userSettings {
|
for _, setting := range userSettings {
|
||||||
if setting.Key == storepb.UserSettingKey_LOCALE {
|
if setting.Key == storepb.UserSettingKey_GENERAL {
|
||||||
userSetting.Locale = setting.GetLocale()
|
userSetting.General = &v1pb.UserSettingGeneral{
|
||||||
} else if setting.Key == storepb.UserSettingKey_COLOR_THEME {
|
Locale: setting.GetGeneral().Locale,
|
||||||
userSetting.ColorTheme = setting.GetColorTheme()
|
ColorTheme: setting.GetGeneral().ColorTheme,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return userSetting, nil
|
return userSetting, nil
|
||||||
|
@ -29,10 +29,12 @@ func (d *DB) UpsertUserSetting(ctx context.Context, upsert *storepb.UserSetting)
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
valueString = string(valueBytes)
|
valueString = string(valueBytes)
|
||||||
} else if upsert.Key == storepb.UserSettingKey_LOCALE {
|
} else if upsert.Key == storepb.UserSettingKey_GENERAL {
|
||||||
valueString = upsert.GetLocale()
|
valueBytes, err := protojson.Marshal(upsert.GetGeneral())
|
||||||
} else if upsert.Key == storepb.UserSettingKey_COLOR_THEME {
|
if err != nil {
|
||||||
valueString = upsert.GetColorTheme()
|
return nil, err
|
||||||
|
}
|
||||||
|
valueString = string(valueBytes)
|
||||||
} else {
|
} else {
|
||||||
return nil, errors.New("invalid user setting key")
|
return nil, errors.New("invalid user setting key")
|
||||||
}
|
}
|
||||||
@ -81,20 +83,20 @@ func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting)
|
|||||||
}
|
}
|
||||||
userSetting.Key = storepb.UserSettingKey(storepb.UserSettingKey_value[keyString])
|
userSetting.Key = storepb.UserSettingKey(storepb.UserSettingKey_value[keyString])
|
||||||
if userSetting.Key == storepb.UserSettingKey_ACCESS_TOKENS {
|
if userSetting.Key == storepb.UserSettingKey_ACCESS_TOKENS {
|
||||||
accessTokensUserSetting := &storepb.AccessTokensUserSetting{}
|
userSettingAccessTokens := &storepb.UserSettingAccessTokens{}
|
||||||
if err := protojson.Unmarshal([]byte(valueString), accessTokensUserSetting); err != nil {
|
if err := protojson.Unmarshal([]byte(valueString), userSettingAccessTokens); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
userSetting.Value = &storepb.UserSetting_AccessTokens{
|
userSetting.Value = &storepb.UserSetting_AccessTokens{
|
||||||
AccessTokens: accessTokensUserSetting,
|
AccessTokens: userSettingAccessTokens,
|
||||||
}
|
}
|
||||||
} else if userSetting.Key == storepb.UserSettingKey_LOCALE {
|
} else if userSetting.Key == storepb.UserSettingKey_GENERAL {
|
||||||
userSetting.Value = &storepb.UserSetting_Locale{
|
userSettingGeneral := &storepb.UserSettingGeneral{}
|
||||||
Locale: valueString,
|
if err := protojson.Unmarshal([]byte(valueString), userSettingGeneral); err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
} else if userSetting.Key == storepb.UserSettingKey_COLOR_THEME {
|
userSetting.Value = &storepb.UserSetting_General{
|
||||||
userSetting.Value = &storepb.UserSetting_ColorTheme{
|
General: userSettingGeneral,
|
||||||
ColorTheme: valueString,
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Skip unknown key.
|
// Skip unknown key.
|
||||||
|
@ -28,10 +28,12 @@ func (d *DB) UpsertUserSetting(ctx context.Context, upsert *storepb.UserSetting)
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
valueString = string(valueBytes)
|
valueString = string(valueBytes)
|
||||||
} else if upsert.Key == storepb.UserSettingKey_LOCALE {
|
} else if upsert.Key == storepb.UserSettingKey_GENERAL {
|
||||||
valueString = upsert.GetLocale()
|
valueBytes, err := protojson.Marshal(upsert.GetGeneral())
|
||||||
} else if upsert.Key == storepb.UserSettingKey_COLOR_THEME {
|
if err != nil {
|
||||||
valueString = upsert.GetColorTheme()
|
return nil, err
|
||||||
|
}
|
||||||
|
valueString = string(valueBytes)
|
||||||
} else {
|
} else {
|
||||||
return nil, errors.New("invalid user setting key")
|
return nil, errors.New("invalid user setting key")
|
||||||
}
|
}
|
||||||
@ -80,20 +82,20 @@ func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting)
|
|||||||
}
|
}
|
||||||
userSetting.Key = storepb.UserSettingKey(storepb.UserSettingKey_value[keyString])
|
userSetting.Key = storepb.UserSettingKey(storepb.UserSettingKey_value[keyString])
|
||||||
if userSetting.Key == storepb.UserSettingKey_ACCESS_TOKENS {
|
if userSetting.Key == storepb.UserSettingKey_ACCESS_TOKENS {
|
||||||
accessTokensUserSetting := &storepb.AccessTokensUserSetting{}
|
userSettingAccessTokens := &storepb.UserSettingAccessTokens{}
|
||||||
if err := protojson.Unmarshal([]byte(valueString), accessTokensUserSetting); err != nil {
|
if err := protojson.Unmarshal([]byte(valueString), userSettingAccessTokens); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
userSetting.Value = &storepb.UserSetting_AccessTokens{
|
userSetting.Value = &storepb.UserSetting_AccessTokens{
|
||||||
AccessTokens: accessTokensUserSetting,
|
AccessTokens: userSettingAccessTokens,
|
||||||
}
|
}
|
||||||
} else if userSetting.Key == storepb.UserSettingKey_LOCALE {
|
} else if userSetting.Key == storepb.UserSettingKey_GENERAL {
|
||||||
userSetting.Value = &storepb.UserSetting_Locale{
|
userSettingGeneral := &storepb.UserSettingGeneral{}
|
||||||
Locale: valueString,
|
if err := protojson.Unmarshal([]byte(valueString), userSettingGeneral); err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
} else if userSetting.Key == storepb.UserSettingKey_COLOR_THEME {
|
userSetting.Value = &storepb.UserSetting_General{
|
||||||
userSetting.Value = &storepb.UserSetting_ColorTheme{
|
General: userSettingGeneral,
|
||||||
ColorTheme: valueString,
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Skip unknown key.
|
// Skip unknown key.
|
||||||
|
@ -54,7 +54,7 @@ func (s *Store) GetUserSetting(ctx context.Context, find *FindUserSetting) (*sto
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetUserAccessTokens returns the access tokens of the user.
|
// GetUserAccessTokens returns the access tokens of the user.
|
||||||
func (s *Store) GetUserAccessTokens(ctx context.Context, userID int32) ([]*storepb.AccessTokensUserSetting_AccessToken, error) {
|
func (s *Store) GetUserAccessTokens(ctx context.Context, userID int32) ([]*storepb.UserSettingAccessTokens_AccessToken, error) {
|
||||||
userSetting, err := s.GetUserSetting(ctx, &FindUserSetting{
|
userSetting, err := s.GetUserSetting(ctx, &FindUserSetting{
|
||||||
UserID: &userID,
|
UserID: &userID,
|
||||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||||
@ -63,7 +63,7 @@ func (s *Store) GetUserAccessTokens(ctx context.Context, userID int32) ([]*store
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if userSetting == nil {
|
if userSetting == nil {
|
||||||
return []*storepb.AccessTokensUserSetting_AccessToken{}, nil
|
return []*storepb.UserSettingAccessTokens_AccessToken{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
accessTokensUserSetting := userSetting.GetAccessTokens()
|
accessTokensUserSetting := userSetting.GetAccessTokens()
|
||||||
|
@ -26,8 +26,8 @@ func TestUserSettingStore(t *testing.T) {
|
|||||||
UserId: user.ID,
|
UserId: user.ID,
|
||||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||||
Value: &storepb.UserSetting_AccessTokens{
|
Value: &storepb.UserSetting_AccessTokens{
|
||||||
AccessTokens: &storepb.AccessTokensUserSetting{
|
AccessTokens: &storepb.UserSettingAccessTokens{
|
||||||
AccessTokens: []*storepb.AccessTokensUserSetting_AccessToken{
|
AccessTokens: []*storepb.UserSettingAccessTokens_AccessToken{
|
||||||
{
|
{
|
||||||
AccessToken: "test_access_token",
|
AccessToken: "test_access_token",
|
||||||
},
|
},
|
||||||
@ -58,8 +58,8 @@ func TestUserSettingStore(t *testing.T) {
|
|||||||
UserId: user.ID,
|
UserId: user.ID,
|
||||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||||
Value: &storepb.UserSetting_AccessTokens{
|
Value: &storepb.UserSetting_AccessTokens{
|
||||||
AccessTokens: &storepb.AccessTokensUserSetting{
|
AccessTokens: &storepb.UserSettingAccessTokens{
|
||||||
AccessTokens: []*storepb.AccessTokensUserSetting_AccessToken{
|
AccessTokens: []*storepb.UserSettingAccessTokens_AccessToken{
|
||||||
{
|
{
|
||||||
AccessToken: "test_access_token",
|
AccessToken: "test_access_token",
|
||||||
},
|
},
|
||||||
@ -74,47 +74,33 @@ func TestUserSettingStore(t *testing.T) {
|
|||||||
require.NotNil(t, accessTokensUserSetting)
|
require.NotNil(t, accessTokensUserSetting)
|
||||||
require.Equal(t, 2, len(accessTokensUserSetting.GetAccessTokens().AccessTokens))
|
require.Equal(t, 2, len(accessTokensUserSetting.GetAccessTokens().AccessTokens))
|
||||||
|
|
||||||
// Test for locale user setting.
|
// Test for user setting general.
|
||||||
localeUserSetting, err := ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
userSettingGeneral, err := ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||||
UserId: user.ID,
|
UserId: user.ID,
|
||||||
Key: storepb.UserSettingKey_LOCALE,
|
Key: storepb.UserSettingKey_GENERAL,
|
||||||
Value: &storepb.UserSetting_Locale{
|
Value: &storepb.UserSetting_General{
|
||||||
|
General: &storepb.UserSettingGeneral{
|
||||||
Locale: "ZH",
|
Locale: "ZH",
|
||||||
|
ColorTheme: "SYSTEM",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotNil(t, localeUserSetting)
|
require.NotNil(t, userSettingGeneral)
|
||||||
require.Equal(t, storepb.UserSettingKey_LOCALE, localeUserSetting.Key)
|
require.Equal(t, storepb.UserSettingKey_GENERAL, userSettingGeneral.Key)
|
||||||
require.Equal(t, "ZH", localeUserSetting.GetLocale())
|
require.Equal(t, "ZH", userSettingGeneral.GetGeneral().Locale)
|
||||||
localeUserSetting, err = ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
require.Equal(t, "SYSTEM", userSettingGeneral.GetGeneral().ColorTheme)
|
||||||
|
userSettingGeneral, err = ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||||
UserId: user.ID,
|
UserId: user.ID,
|
||||||
Key: storepb.UserSettingKey_LOCALE,
|
Key: storepb.UserSettingKey_GENERAL,
|
||||||
Value: &storepb.UserSetting_Locale{
|
Value: &storepb.UserSetting_General{
|
||||||
|
General: &storepb.UserSettingGeneral{
|
||||||
Locale: "EN",
|
Locale: "EN",
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, "EN", localeUserSetting.GetLocale())
|
|
||||||
|
|
||||||
// Test for color theme user setting.
|
|
||||||
colorThemeUserSetting, err := ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
|
||||||
UserId: user.ID,
|
|
||||||
Key: storepb.UserSettingKey_COLOR_THEME,
|
|
||||||
Value: &storepb.UserSetting_ColorTheme{
|
|
||||||
ColorTheme: "LIGHT",
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.NotNil(t, colorThemeUserSetting)
|
|
||||||
require.Equal(t, storepb.UserSettingKey_COLOR_THEME, colorThemeUserSetting.Key)
|
|
||||||
require.Equal(t, "LIGHT", colorThemeUserSetting.GetColorTheme())
|
|
||||||
colorThemeUserSetting, err = ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
|
||||||
UserId: user.ID,
|
|
||||||
Key: storepb.UserSettingKey_COLOR_THEME,
|
|
||||||
Value: &storepb.UserSetting_ColorTheme{
|
|
||||||
ColorTheme: "DARK",
|
ColorTheme: "DARK",
|
||||||
},
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, "DARK", colorThemeUserSetting.GetColorTheme())
|
require.Equal(t, "EN", userSettingGeneral.GetGeneral().Locale)
|
||||||
|
require.Equal(t, "DARK", userSettingGeneral.GetGeneral().ColorTheme)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user