mirror of
https://github.com/aykhans/slash-e.git
synced 2025-04-20 14:01:24 +00:00
refactor: workspace setting definitions
This commit is contained in:
parent
61d01a53eb
commit
ecf77e0774
@ -15,6 +15,7 @@ import (
|
||||
"github.com/yourselfhosted/slash/server"
|
||||
"github.com/yourselfhosted/slash/server/metric"
|
||||
"github.com/yourselfhosted/slash/server/profile"
|
||||
"github.com/yourselfhosted/slash/server/version"
|
||||
"github.com/yourselfhosted/slash/store"
|
||||
"github.com/yourselfhosted/slash/store/db"
|
||||
)
|
||||
@ -24,36 +25,47 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
serverProfile *profile.Profile
|
||||
mode string
|
||||
port int
|
||||
data string
|
||||
driver string
|
||||
dsn string
|
||||
enableMetric bool
|
||||
|
||||
rootCmd = &cobra.Command{
|
||||
Use: "slash",
|
||||
Short: `An open source, self-hosted links shortener and sharing platform.`,
|
||||
Run: func(_ *cobra.Command, _ []string) {
|
||||
serverProfile := &profile.Profile{
|
||||
Mode: viper.GetString("mode"),
|
||||
Port: viper.GetInt("port"),
|
||||
Data: viper.GetString("data"),
|
||||
DSN: viper.GetString("dsn"),
|
||||
Driver: viper.GetString("driver"),
|
||||
Public: viper.GetBool("public"),
|
||||
InstanceURL: viper.GetString("instance-url"),
|
||||
Version: version.GetCurrentVersion(viper.GetString("mode")),
|
||||
}
|
||||
if err := serverProfile.Validate(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
dbDriver, err := db.NewDBDriver(serverProfile)
|
||||
if err != nil {
|
||||
cancel()
|
||||
slog.Error("failed to create db driver", err)
|
||||
slog.Error("failed to create db driver", "error", err)
|
||||
return
|
||||
}
|
||||
if err := dbDriver.Migrate(ctx); err != nil {
|
||||
cancel()
|
||||
slog.Error("failed to migrate db", err)
|
||||
slog.Error("failed to migrate db", "error", err)
|
||||
return
|
||||
}
|
||||
|
||||
storeInstance := store.New(dbDriver, serverProfile)
|
||||
if err := storeInstance.MigrateWorkspaceSettings(ctx); err != nil {
|
||||
cancel()
|
||||
slog.Error("failed to migrate workspace settings", "error", err)
|
||||
return
|
||||
}
|
||||
s, err := server.NewServer(ctx, serverProfile, storeInstance)
|
||||
if err != nil {
|
||||
cancel()
|
||||
slog.Error("failed to create server", err)
|
||||
slog.Error("failed to create server", "error", err)
|
||||
return
|
||||
}
|
||||
|
||||
@ -74,11 +86,11 @@ var (
|
||||
cancel()
|
||||
}()
|
||||
|
||||
printGreetings()
|
||||
printGreetings(serverProfile)
|
||||
|
||||
if err := s.Start(ctx); err != nil {
|
||||
if err != http.ErrServerClosed {
|
||||
slog.Error("failed to start server", err)
|
||||
slog.Error("failed to start server", "error", err)
|
||||
cancel()
|
||||
}
|
||||
}
|
||||
@ -89,71 +101,60 @@ var (
|
||||
}
|
||||
)
|
||||
|
||||
func Execute() error {
|
||||
return rootCmd.Execute()
|
||||
}
|
||||
|
||||
func init() {
|
||||
cobra.OnInitialize(initConfig)
|
||||
|
||||
rootCmd.PersistentFlags().StringVarP(&mode, "mode", "m", "demo", `mode of server, can be "prod" or "dev" or "demo"`)
|
||||
rootCmd.PersistentFlags().IntVarP(&port, "port", "p", 8082, "port of server")
|
||||
rootCmd.PersistentFlags().StringVarP(&data, "data", "d", "", "data directory")
|
||||
rootCmd.PersistentFlags().StringVarP(&driver, "driver", "", "", "database driver")
|
||||
rootCmd.PersistentFlags().StringVarP(&dsn, "dsn", "", "", "database source name(aka. DSN)")
|
||||
rootCmd.PersistentFlags().BoolVarP(&enableMetric, "metric", "", true, "allow metric collection")
|
||||
|
||||
err := viper.BindPFlag("mode", rootCmd.PersistentFlags().Lookup("mode"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = viper.BindPFlag("data", rootCmd.PersistentFlags().Lookup("data"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = viper.BindPFlag("driver", rootCmd.PersistentFlags().Lookup("driver"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = viper.BindPFlag("dsn", rootCmd.PersistentFlags().Lookup("dsn"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = viper.BindPFlag("metric", rootCmd.PersistentFlags().Lookup("metric"))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
viper.SetDefault("mode", "demo")
|
||||
viper.SetDefault("port", 8082)
|
||||
viper.SetDefault("driver", "sqlite")
|
||||
viper.SetDefault("metric", true)
|
||||
viper.SetDefault("port", 8082)
|
||||
viper.SetDefault("public", true)
|
||||
|
||||
rootCmd.PersistentFlags().String("mode", "demo", `mode of server, can be "prod" or "dev" or "demo"`)
|
||||
rootCmd.PersistentFlags().String("addr", "", "address of server")
|
||||
rootCmd.PersistentFlags().Int("port", 8082, "port of server")
|
||||
rootCmd.PersistentFlags().String("data", "", "data directory")
|
||||
rootCmd.PersistentFlags().String("driver", "sqlite", "database driver")
|
||||
rootCmd.PersistentFlags().String("dsn", "", "database source name(aka. DSN)")
|
||||
rootCmd.PersistentFlags().Bool("public", true, "")
|
||||
rootCmd.PersistentFlags().String("instance-url", "", "URL of the instance")
|
||||
|
||||
if err := viper.BindPFlag("mode", rootCmd.PersistentFlags().Lookup("mode")); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port")); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := viper.BindPFlag("data", rootCmd.PersistentFlags().Lookup("data")); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := viper.BindPFlag("driver", rootCmd.PersistentFlags().Lookup("driver")); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := viper.BindPFlag("dsn", rootCmd.PersistentFlags().Lookup("dsn")); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := viper.BindPFlag("public", rootCmd.PersistentFlags().Lookup("public")); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := viper.BindPFlag("instance-url", rootCmd.PersistentFlags().Lookup("instance-url")); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
viper.SetEnvPrefix("slash")
|
||||
viper.AutomaticEnv()
|
||||
if err := viper.BindEnv("instance-url", "SLASH_INSTANCE_URL"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func initConfig() {
|
||||
viper.AutomaticEnv()
|
||||
var err error
|
||||
serverProfile, err = profile.GetProfile()
|
||||
if err != nil {
|
||||
slog.Error("failed to get profile", err)
|
||||
return
|
||||
}
|
||||
|
||||
func printGreetings(serverProfile *profile.Profile) {
|
||||
println("---")
|
||||
println("Server profile")
|
||||
println("dsn:", serverProfile.DSN)
|
||||
println("port:", serverProfile.Port)
|
||||
println("mode:", serverProfile.Mode)
|
||||
println("version:", serverProfile.Version)
|
||||
println("public:", serverProfile.Public)
|
||||
println("instance-url:", serverProfile.InstanceURL)
|
||||
println("---")
|
||||
}
|
||||
|
||||
func printGreetings() {
|
||||
println(greetingBanner)
|
||||
fmt.Printf("Version %s has been started on port %d\n", serverProfile.Version, serverProfile.Port)
|
||||
println("---")
|
||||
@ -163,8 +164,7 @@ func printGreetings() {
|
||||
}
|
||||
|
||||
func main() {
|
||||
err := Execute()
|
||||
if err != nil {
|
||||
if err := rootCmd.Execute(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
import { useState } from "react";
|
||||
import { useWorkspaceStore } from "@/stores";
|
||||
import Icon from "./Icon";
|
||||
|
||||
interface Props {
|
||||
@ -18,8 +17,7 @@ const getFaviconUrlWithProvider = (url: string, provider: string) => {
|
||||
|
||||
const LinkFavicon = (props: Props) => {
|
||||
const { url } = props;
|
||||
const workspaceStore = useWorkspaceStore();
|
||||
const faviconProvider = workspaceStore.profile.faviconProvider || "https://www.google.com/s2/favicons";
|
||||
const faviconProvider = "https://www.google.com/s2/favicons";
|
||||
const [faviconUrl, setFaviconUrl] = useState<string>(getFaviconUrlWithProvider(url, faviconProvider));
|
||||
|
||||
const handleImgError = () => {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { Button, Input, Link, Option, Select, Switch, Textarea } from "@mui/joy";
|
||||
import { Button, Option, Select, Textarea } from "@mui/joy";
|
||||
import { isEqual } from "lodash-es";
|
||||
import { useRef, useState } from "react";
|
||||
import toast from "react-hot-toast";
|
||||
@ -7,7 +7,6 @@ import { workspaceServiceClient } from "@/grpcweb";
|
||||
import { useWorkspaceStore } from "@/stores";
|
||||
import { Visibility } from "@/types/proto/api/v1/common";
|
||||
import { WorkspaceSetting } from "@/types/proto/api/v1/workspace_service";
|
||||
import BetaBadge from "../BetaBadge";
|
||||
|
||||
const getDefaultVisibility = (visibility?: Visibility) => {
|
||||
if (!visibility || [Visibility.VISIBILITY_UNSPECIFIED, Visibility.UNRECOGNIZED].includes(visibility)) {
|
||||
@ -24,27 +23,6 @@ const WorkspaceSection = () => {
|
||||
const originalWorkspaceSetting = useRef<WorkspaceSetting>(workspaceStore.setting);
|
||||
const allowSave = !isEqual(originalWorkspaceSetting.current, workspaceSetting);
|
||||
|
||||
const handleEnableSignUpChange = async (value: boolean) => {
|
||||
setWorkspaceSetting({
|
||||
...workspaceSetting,
|
||||
enableSignup: value,
|
||||
});
|
||||
};
|
||||
|
||||
const handleInstanceUrlChange = async (value: string) => {
|
||||
setWorkspaceSetting({
|
||||
...workspaceSetting,
|
||||
instanceUrl: value,
|
||||
});
|
||||
};
|
||||
|
||||
const handleFaviconProvierChange = async (value: string) => {
|
||||
setWorkspaceSetting({
|
||||
...workspaceSetting,
|
||||
faviconProvider: value,
|
||||
});
|
||||
};
|
||||
|
||||
const handleCustomStyleChange = async (value: string) => {
|
||||
setWorkspaceSetting({
|
||||
...workspaceSetting,
|
||||
@ -61,21 +39,12 @@ const WorkspaceSection = () => {
|
||||
|
||||
const handleSaveWorkspaceSetting = async () => {
|
||||
const updateMask: string[] = [];
|
||||
if (!isEqual(originalWorkspaceSetting.current.enableSignup, workspaceSetting.enableSignup)) {
|
||||
updateMask.push("enable_signup");
|
||||
}
|
||||
if (!isEqual(originalWorkspaceSetting.current.instanceUrl, workspaceSetting.instanceUrl)) {
|
||||
updateMask.push("instance_url");
|
||||
}
|
||||
if (!isEqual(originalWorkspaceSetting.current.customStyle, workspaceSetting.customStyle)) {
|
||||
updateMask.push("custom_style");
|
||||
}
|
||||
if (!isEqual(originalWorkspaceSetting.current.defaultVisibility, workspaceSetting.defaultVisibility)) {
|
||||
updateMask.push("default_visibility");
|
||||
}
|
||||
if (!isEqual(originalWorkspaceSetting.current.faviconProvider, workspaceSetting.faviconProvider)) {
|
||||
updateMask.push("favicon_provider");
|
||||
}
|
||||
if (updateMask.length === 0) {
|
||||
toast.error("No changes made");
|
||||
return;
|
||||
@ -101,33 +70,6 @@ const WorkspaceSection = () => {
|
||||
<div className="w-full flex flex-col sm:flex-row justify-start items-start gap-4 sm:gap-x-16">
|
||||
<p className="sm:w-1/4 text-2xl shrink-0 font-semibold text-gray-900 dark:text-gray-500">{t("settings.workspace.self")}</p>
|
||||
<div className="w-full sm:w-auto grow flex flex-col justify-start items-start gap-4">
|
||||
<div className="w-full flex flex-col justify-start items-start">
|
||||
<div className="w-full flex flex-col justify-start items-start">
|
||||
<p className="font-medium dark:text-gray-400">Instance URL</p>
|
||||
<p className="text-sm text-gray-500 leading-tight">
|
||||
{"Mainly used for SEO and social sharing. Leave empty to disallow crawlers."}
|
||||
</p>
|
||||
</div>
|
||||
<Input
|
||||
className="w-full mt-2"
|
||||
placeholder="Your instance URL. e.g. https://slash.example.com"
|
||||
value={workspaceSetting.instanceUrl}
|
||||
onChange={(event) => handleInstanceUrlChange(event.target.value)}
|
||||
/>
|
||||
</div>
|
||||
<div className="w-full flex flex-row justify-between items-center">
|
||||
<div className="w-full flex flex-col justify-start items-start">
|
||||
<p className="font-medium dark:text-gray-400">{t("settings.workspace.enable-user-signup.self")}</p>
|
||||
<p className="text-sm text-gray-500">{t("settings.workspace.enable-user-signup.description")}</p>
|
||||
</div>
|
||||
<div>
|
||||
<Switch
|
||||
size="lg"
|
||||
checked={workspaceSetting.enableSignup}
|
||||
onChange={(event) => handleEnableSignUpChange(event.target.checked)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="w-full flex flex-row justify-between items-center">
|
||||
<div className="w-full flex flex-col justify-start items-start">
|
||||
<p className="font-medium dark:text-gray-400">{t("settings.workspace.default-visibility")}</p>
|
||||
@ -143,24 +85,6 @@ const WorkspaceSection = () => {
|
||||
<Option value={Visibility.PUBLIC}>{t(`shortcut.visibility.public.self`)}</Option>
|
||||
</Select>
|
||||
</div>
|
||||
<div className="w-full flex flex-col justify-start items-start">
|
||||
<div className="w-full flex flex-row justify-start items-center gap-2">
|
||||
<p className="font-medium dark:text-gray-400">Favicon provider</p>
|
||||
<BetaBadge />
|
||||
</div>
|
||||
<p className="text-sm text-gray-500">
|
||||
e.g.{" "}
|
||||
<Link className="!text-sm" href="https://github.com/yourselfhosted/favicons" target="_blank">
|
||||
yourselfhosted/favicons
|
||||
</Link>
|
||||
</p>
|
||||
<Input
|
||||
className="w-full mt-2"
|
||||
placeholder="The provider of favicon. Empty for default Google S2."
|
||||
value={workspaceSetting.faviconProvider}
|
||||
onChange={(event) => handleFaviconProvierChange(event.target.value)}
|
||||
/>
|
||||
</div>
|
||||
<div className="w-full flex flex-col justify-start items-start">
|
||||
<p className="mt-2 font-medium dark:text-gray-400">{t("settings.workspace.custom-style")}</p>
|
||||
<Textarea
|
||||
|
@ -121,7 +121,7 @@ const useUserStore = create<UserState>()((set, get) => ({
|
||||
return userSetting;
|
||||
},
|
||||
updateUserSetting: async (userSetting: UserSetting, updateMask: string[]) => {
|
||||
const userId = userSetting.id;
|
||||
const userId = userSetting.userId;
|
||||
const updatedUserSetting = (
|
||||
await userSettingServiceClient.updateUserSetting({
|
||||
id: userId,
|
||||
@ -129,11 +129,6 @@ const useUserStore = create<UserState>()((set, get) => ({
|
||||
updateMask,
|
||||
})
|
||||
).userSetting as UserSetting;
|
||||
console.log("1", {
|
||||
id: userId,
|
||||
userSetting,
|
||||
updateMask,
|
||||
});
|
||||
const userSettingMap = get().userSettingMapById;
|
||||
userSettingMap[userId] = updatedUserSetting;
|
||||
set(userSettingMap);
|
||||
|
@ -25,15 +25,26 @@ service UserSettingService {
|
||||
}
|
||||
|
||||
message UserSetting {
|
||||
// id is the user id.
|
||||
int32 id = 1;
|
||||
int32 user_id = 1;
|
||||
|
||||
UserSettingGeneral general = 2;
|
||||
}
|
||||
GeneralSetting general = 2;
|
||||
|
||||
message UserSettingGeneral {
|
||||
string locale = 1;
|
||||
string color_theme = 2;
|
||||
AccessTokensSetting access_tokens = 3;
|
||||
|
||||
message GeneralSetting {
|
||||
string locale = 1;
|
||||
string color_theme = 2;
|
||||
}
|
||||
|
||||
message AccessTokensSetting {
|
||||
message AccessToken {
|
||||
// The access token is a JWT token, including expiration time, issuer, etc.
|
||||
string access_token = 1;
|
||||
// A description for the access token.
|
||||
string description = 2;
|
||||
}
|
||||
repeated AccessToken access_tokens = 1; // Nested repeated field
|
||||
}
|
||||
}
|
||||
|
||||
message GetUserSettingRequest {
|
||||
|
@ -37,25 +37,16 @@ message WorkspaceProfile {
|
||||
bool enable_signup = 4;
|
||||
// The custom style.
|
||||
string custom_style = 5;
|
||||
// The url of custom favicon provider.
|
||||
string favicon_provider = 7;
|
||||
// The owner name.
|
||||
// Format: "users/{id}"
|
||||
string owner = 8;
|
||||
string owner = 6;
|
||||
}
|
||||
|
||||
message WorkspaceSetting {
|
||||
string license_key = 1;
|
||||
// Whether to enable other users to sign up.
|
||||
bool enable_signup = 2;
|
||||
// The instance URL.
|
||||
string instance_url = 3;
|
||||
// The custom style.
|
||||
string custom_style = 4;
|
||||
string custom_style = 1;
|
||||
// The default visibility of shortcuts and collections.
|
||||
Visibility default_visibility = 7;
|
||||
// The url of custom favicon provider.
|
||||
string favicon_provider = 8;
|
||||
Visibility default_visibility = 2;
|
||||
}
|
||||
|
||||
message GetWorkspaceProfileRequest {}
|
||||
|
@ -98,7 +98,9 @@
|
||||
- [UpdateUserSettingRequest](#slash-api-v1-UpdateUserSettingRequest)
|
||||
- [UpdateUserSettingResponse](#slash-api-v1-UpdateUserSettingResponse)
|
||||
- [UserSetting](#slash-api-v1-UserSetting)
|
||||
- [UserSettingGeneral](#slash-api-v1-UserSettingGeneral)
|
||||
- [UserSetting.AccessTokensSetting](#slash-api-v1-UserSetting-AccessTokensSetting)
|
||||
- [UserSetting.AccessTokensSetting.AccessToken](#slash-api-v1-UserSetting-AccessTokensSetting-AccessToken)
|
||||
- [UserSetting.GeneralSetting](#slash-api-v1-UserSetting-GeneralSetting)
|
||||
|
||||
- [UserSettingService](#slash-api-v1-UserSettingService)
|
||||
|
||||
@ -1322,17 +1324,49 @@
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| id | [int32](#int32) | | id is the user id. |
|
||||
| general | [UserSettingGeneral](#slash-api-v1-UserSettingGeneral) | | |
|
||||
| user_id | [int32](#int32) | | |
|
||||
| general | [UserSetting.GeneralSetting](#slash-api-v1-UserSetting-GeneralSetting) | | |
|
||||
| access_tokens | [UserSetting.AccessTokensSetting](#slash-api-v1-UserSetting-AccessTokensSetting) | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="slash-api-v1-UserSettingGeneral"></a>
|
||||
<a name="slash-api-v1-UserSetting-AccessTokensSetting"></a>
|
||||
|
||||
### UserSettingGeneral
|
||||
### UserSetting.AccessTokensSetting
|
||||
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| access_tokens | [UserSetting.AccessTokensSetting.AccessToken](#slash-api-v1-UserSetting-AccessTokensSetting-AccessToken) | repeated | Nested repeated field |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="slash-api-v1-UserSetting-AccessTokensSetting-AccessToken"></a>
|
||||
|
||||
### UserSetting.AccessTokensSetting.AccessToken
|
||||
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| access_token | [string](#string) | | The access token is a JWT token, including expiration time, issuer, etc. |
|
||||
| description | [string](#string) | | A description for the access token. |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="slash-api-v1-UserSetting-GeneralSetting"></a>
|
||||
|
||||
### UserSetting.GeneralSetting
|
||||
|
||||
|
||||
|
||||
@ -1467,7 +1501,6 @@
|
||||
| plan | [PlanType](#slash-api-v1-PlanType) | | The workspace plan. |
|
||||
| enable_signup | [bool](#bool) | | Whether to enable other users to sign up. |
|
||||
| custom_style | [string](#string) | | The custom style. |
|
||||
| favicon_provider | [string](#string) | | The url of custom favicon provider. |
|
||||
| owner | [string](#string) | | The owner name. Format: "users/{id}" |
|
||||
|
||||
|
||||
@ -1483,12 +1516,8 @@
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| license_key | [string](#string) | | |
|
||||
| enable_signup | [bool](#bool) | | Whether to enable other users to sign up. |
|
||||
| instance_url | [string](#string) | | The instance URL. |
|
||||
| custom_style | [string](#string) | | The custom style. |
|
||||
| default_visibility | [Visibility](#slash-api-v1-Visibility) | | The default visibility of shortcuts and collections. |
|
||||
| favicon_provider | [string](#string) | | The url of custom favicon provider. |
|
||||
|
||||
|
||||
|
||||
|
@ -27,9 +27,9 @@ type UserSetting struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// id is the user id.
|
||||
Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
|
||||
General *UserSettingGeneral `protobuf:"bytes,2,opt,name=general,proto3" json:"general,omitempty"`
|
||||
UserId int32 `protobuf:"varint,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"`
|
||||
General *UserSetting_GeneralSetting `protobuf:"bytes,2,opt,name=general,proto3" json:"general,omitempty"`
|
||||
AccessTokens *UserSetting_AccessTokensSetting `protobuf:"bytes,3,opt,name=access_tokens,json=accessTokens,proto3" json:"access_tokens,omitempty"`
|
||||
}
|
||||
|
||||
func (x *UserSetting) Reset() {
|
||||
@ -64,73 +64,25 @@ func (*UserSetting) Descriptor() ([]byte, []int) {
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *UserSetting) GetId() int32 {
|
||||
func (x *UserSetting) GetUserId() int32 {
|
||||
if x != nil {
|
||||
return x.Id
|
||||
return x.UserId
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *UserSetting) GetGeneral() *UserSettingGeneral {
|
||||
func (x *UserSetting) GetGeneral() *UserSetting_GeneralSetting {
|
||||
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 {
|
||||
func (x *UserSetting) GetAccessTokens() *UserSetting_AccessTokensSetting {
|
||||
if x != nil {
|
||||
return x.Locale
|
||||
return x.AccessTokens
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *UserSettingGeneral) GetColorTheme() string {
|
||||
if x != nil {
|
||||
return x.ColorTheme
|
||||
}
|
||||
return ""
|
||||
return nil
|
||||
}
|
||||
|
||||
type GetUserSettingRequest struct {
|
||||
@ -145,7 +97,7 @@ type GetUserSettingRequest struct {
|
||||
func (x *GetUserSettingRequest) Reset() {
|
||||
*x = GetUserSettingRequest{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[2]
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -158,7 +110,7 @@ func (x *GetUserSettingRequest) String() string {
|
||||
func (*GetUserSettingRequest) ProtoMessage() {}
|
||||
|
||||
func (x *GetUserSettingRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[2]
|
||||
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 {
|
||||
@ -171,7 +123,7 @@ func (x *GetUserSettingRequest) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use GetUserSettingRequest.ProtoReflect.Descriptor instead.
|
||||
func (*GetUserSettingRequest) Descriptor() ([]byte, []int) {
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{2}
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *GetUserSettingRequest) GetId() int32 {
|
||||
@ -192,7 +144,7 @@ type GetUserSettingResponse struct {
|
||||
func (x *GetUserSettingResponse) Reset() {
|
||||
*x = GetUserSettingResponse{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[3]
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -205,7 +157,7 @@ func (x *GetUserSettingResponse) String() string {
|
||||
func (*GetUserSettingResponse) ProtoMessage() {}
|
||||
|
||||
func (x *GetUserSettingResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[3]
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[2]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -218,7 +170,7 @@ func (x *GetUserSettingResponse) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use GetUserSettingResponse.ProtoReflect.Descriptor instead.
|
||||
func (*GetUserSettingResponse) Descriptor() ([]byte, []int) {
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{3}
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{2}
|
||||
}
|
||||
|
||||
func (x *GetUserSettingResponse) GetUserSetting() *UserSetting {
|
||||
@ -244,7 +196,7 @@ type UpdateUserSettingRequest struct {
|
||||
func (x *UpdateUserSettingRequest) Reset() {
|
||||
*x = UpdateUserSettingRequest{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[4]
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[3]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -257,7 +209,7 @@ func (x *UpdateUserSettingRequest) String() string {
|
||||
func (*UpdateUserSettingRequest) ProtoMessage() {}
|
||||
|
||||
func (x *UpdateUserSettingRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[4]
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[3]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -270,7 +222,7 @@ func (x *UpdateUserSettingRequest) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use UpdateUserSettingRequest.ProtoReflect.Descriptor instead.
|
||||
func (*UpdateUserSettingRequest) Descriptor() ([]byte, []int) {
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{4}
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{3}
|
||||
}
|
||||
|
||||
func (x *UpdateUserSettingRequest) GetId() int32 {
|
||||
@ -305,7 +257,7 @@ type UpdateUserSettingResponse struct {
|
||||
func (x *UpdateUserSettingResponse) Reset() {
|
||||
*x = UpdateUserSettingResponse{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[5]
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[4]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
@ -318,7 +270,7 @@ func (x *UpdateUserSettingResponse) String() string {
|
||||
func (*UpdateUserSettingResponse) ProtoMessage() {}
|
||||
|
||||
func (x *UpdateUserSettingResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[5]
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[4]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
@ -331,7 +283,7 @@ func (x *UpdateUserSettingResponse) ProtoReflect() protoreflect.Message {
|
||||
|
||||
// Deprecated: Use UpdateUserSettingResponse.ProtoReflect.Descriptor instead.
|
||||
func (*UpdateUserSettingResponse) Descriptor() ([]byte, []int) {
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{5}
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{4}
|
||||
}
|
||||
|
||||
func (x *UpdateUserSettingResponse) GetUserSetting() *UserSetting {
|
||||
@ -341,6 +293,165 @@ func (x *UpdateUserSettingResponse) GetUserSetting() *UserSetting {
|
||||
return nil
|
||||
}
|
||||
|
||||
type UserSetting_GeneralSetting 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 *UserSetting_GeneralSetting) Reset() {
|
||||
*x = UserSetting_GeneralSetting{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[5]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *UserSetting_GeneralSetting) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*UserSetting_GeneralSetting) ProtoMessage() {}
|
||||
|
||||
func (x *UserSetting_GeneralSetting) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[5]
|
||||
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 UserSetting_GeneralSetting.ProtoReflect.Descriptor instead.
|
||||
func (*UserSetting_GeneralSetting) Descriptor() ([]byte, []int) {
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{0, 0}
|
||||
}
|
||||
|
||||
func (x *UserSetting_GeneralSetting) GetLocale() string {
|
||||
if x != nil {
|
||||
return x.Locale
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *UserSetting_GeneralSetting) GetColorTheme() string {
|
||||
if x != nil {
|
||||
return x.ColorTheme
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type UserSetting_AccessTokensSetting struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
AccessTokens []*UserSetting_AccessTokensSetting_AccessToken `protobuf:"bytes,1,rep,name=access_tokens,json=accessTokens,proto3" json:"access_tokens,omitempty"` // Nested repeated field
|
||||
}
|
||||
|
||||
func (x *UserSetting_AccessTokensSetting) Reset() {
|
||||
*x = UserSetting_AccessTokensSetting{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[6]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *UserSetting_AccessTokensSetting) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*UserSetting_AccessTokensSetting) ProtoMessage() {}
|
||||
|
||||
func (x *UserSetting_AccessTokensSetting) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[6]
|
||||
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 UserSetting_AccessTokensSetting.ProtoReflect.Descriptor instead.
|
||||
func (*UserSetting_AccessTokensSetting) Descriptor() ([]byte, []int) {
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{0, 1}
|
||||
}
|
||||
|
||||
func (x *UserSetting_AccessTokensSetting) GetAccessTokens() []*UserSetting_AccessTokensSetting_AccessToken {
|
||||
if x != nil {
|
||||
return x.AccessTokens
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type UserSetting_AccessTokensSetting_AccessToken struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// The access token is a JWT token, including expiration time, issuer, etc.
|
||||
AccessToken string `protobuf:"bytes,1,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"`
|
||||
// A description for the access token.
|
||||
Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
|
||||
}
|
||||
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) Reset() {
|
||||
*x = UserSetting_AccessTokensSetting_AccessToken{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[7]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*UserSetting_AccessTokensSetting_AccessToken) ProtoMessage() {}
|
||||
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_api_v1_user_setting_service_proto_msgTypes[7]
|
||||
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 UserSetting_AccessTokensSetting_AccessToken.ProtoReflect.Descriptor instead.
|
||||
func (*UserSetting_AccessTokensSetting_AccessToken) Descriptor() ([]byte, []int) {
|
||||
return file_api_v1_user_setting_service_proto_rawDescGZIP(), []int{0, 1, 0}
|
||||
}
|
||||
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) GetAccessToken() string {
|
||||
if x != nil {
|
||||
return x.AccessToken
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) GetDescription() string {
|
||||
if x != nil {
|
||||
return x.Description
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
var File_api_v1_user_setting_service_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_api_v1_user_setting_service_proto_rawDesc = []byte{
|
||||
@ -352,75 +463,94 @@ 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,
|
||||
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,
|
||||
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,
|
||||
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3a, 0x0a, 0x07, 0x67, 0x65, 0x6e,
|
||||
0x65, 0x72, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x6c, 0x61,
|
||||
0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65,
|
||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x07, 0x67, 0x65,
|
||||
0x6e, 0x65, 0x72, 0x61, 0x6c, 0x22, 0x4d, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74,
|
||||
0x74, 0x69, 0x6e, 0x67, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6c,
|
||||
0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63,
|
||||
0x61, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x68, 0x65,
|
||||
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x54,
|
||||
0x68, 0x65, 0x6d, 0x65, 0x22, 0x27, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53,
|
||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a,
|
||||
0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a,
|
||||
0x16, 0x47, 0x65, 0x74, 0x55, 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, 0x5f,
|
||||
0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
|
||||
0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65,
|
||||
0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65,
|
||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x22, 0xa5, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02,
|
||||
0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69,
|
||||
0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68,
|
||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74,
|
||||
0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||
0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18,
|
||||
0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73,
|
||||
0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x59, 0x0a,
|
||||
0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 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, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x19, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e,
|
||||
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65,
|
||||
0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0xd1, 0x02, 0x0a, 0x12, 0x55, 0x73, 0x65,
|
||||
0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
|
||||
0x85, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69,
|
||||
0x6e, 0x67, 0x12, 0x23, 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, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 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, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda,
|
||||
0x41, 0x02, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69,
|
||||
0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73,
|
||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb2, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61,
|
||||
0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x2e,
|
||||
0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64,
|
||||
0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70,
|
||||
0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53,
|
||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c,
|
||||
0xda, 0x41, 0x18, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2c,
|
||||
0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
||||
0x2b, 0x3a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32,
|
||||
0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b,
|
||||
0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0xb5, 0x01, 0x0a,
|
||||
0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
|
||||
0x31, 0x42, 0x17, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69,
|
||||
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x79, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x6c,
|
||||
0x66, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61,
|
||||
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,
|
||||
0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd5, 0x03, 0x0a, 0x0b, 0x55,
|
||||
0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73,
|
||||
0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65,
|
||||
0x72, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69,
|
||||
0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e,
|
||||
0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x07,
|
||||
0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x52, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73,
|
||||
0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d,
|
||||
0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73,
|
||||
0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
|
||||
0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0c, 0x61,
|
||||
0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x49, 0x0a, 0x0e, 0x47,
|
||||
0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a,
|
||||
0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c,
|
||||
0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74,
|
||||
0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6f,
|
||||
0x72, 0x54, 0x68, 0x65, 0x6d, 0x65, 0x1a, 0xc9, 0x01, 0x0a, 0x13, 0x41, 0x63, 0x63, 0x65, 0x73,
|
||||
0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x5e,
|
||||
0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18,
|
||||
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70,
|
||||
0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||
0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x53, 0x65, 0x74,
|
||||
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
|
||||
0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x52,
|
||||
0x0a, 0x0b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x21, 0x0a,
|
||||
0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
|
||||
0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x22, 0x27, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74,
|
||||
0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
|
||||
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a, 0x16, 0x47,
|
||||
0x65, 0x74, 0x55, 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, 0x5f, 0x73, 0x65,
|
||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x6c,
|
||||
0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53,
|
||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74,
|
||||
0x69, 0x6e, 0x67, 0x22, 0xa5, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73,
|
||||
0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64,
|
||||
0x12, 0x3c, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
||||
0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x3b,
|
||||
0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52,
|
||||
0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x59, 0x0a, 0x19, 0x55,
|
||||
0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 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,
|
||||
0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
|
||||
0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73,
|
||||
0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x53,
|
||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0xd1, 0x02, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53,
|
||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x85, 0x01,
|
||||
0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||
0x12, 0x23, 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,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 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, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0xda, 0x41, 0x02,
|
||||
0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76,
|
||||
0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x65, 0x74,
|
||||
0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb2, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x26, 0x2e, 0x73, 0x6c,
|
||||
0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
|
||||
0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
||||
0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74,
|
||||
0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0xda, 0x41,
|
||||
0x18, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2c, 0x75, 0x70,
|
||||
0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a,
|
||||
0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x1b, 0x2f,
|
||||
0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64,
|
||||
0x7d, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x42, 0xb5, 0x01, 0x0a, 0x10, 0x63,
|
||||
0x6f, 0x6d, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42,
|
||||
0x17, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68,
|
||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x79, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x68,
|
||||
0x6f, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 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 (
|
||||
@ -435,31 +565,35 @@ func file_api_v1_user_setting_service_proto_rawDescGZIP() []byte {
|
||||
return file_api_v1_user_setting_service_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_api_v1_user_setting_service_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
|
||||
var file_api_v1_user_setting_service_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
|
||||
var file_api_v1_user_setting_service_proto_goTypes = []any{
|
||||
(*UserSetting)(nil), // 0: slash.api.v1.UserSetting
|
||||
(*UserSettingGeneral)(nil), // 1: slash.api.v1.UserSettingGeneral
|
||||
(*GetUserSettingRequest)(nil), // 2: slash.api.v1.GetUserSettingRequest
|
||||
(*GetUserSettingResponse)(nil), // 3: slash.api.v1.GetUserSettingResponse
|
||||
(*UpdateUserSettingRequest)(nil), // 4: slash.api.v1.UpdateUserSettingRequest
|
||||
(*UpdateUserSettingResponse)(nil), // 5: slash.api.v1.UpdateUserSettingResponse
|
||||
(*fieldmaskpb.FieldMask)(nil), // 6: google.protobuf.FieldMask
|
||||
(*UserSetting)(nil), // 0: slash.api.v1.UserSetting
|
||||
(*GetUserSettingRequest)(nil), // 1: slash.api.v1.GetUserSettingRequest
|
||||
(*GetUserSettingResponse)(nil), // 2: slash.api.v1.GetUserSettingResponse
|
||||
(*UpdateUserSettingRequest)(nil), // 3: slash.api.v1.UpdateUserSettingRequest
|
||||
(*UpdateUserSettingResponse)(nil), // 4: slash.api.v1.UpdateUserSettingResponse
|
||||
(*UserSetting_GeneralSetting)(nil), // 5: slash.api.v1.UserSetting.GeneralSetting
|
||||
(*UserSetting_AccessTokensSetting)(nil), // 6: slash.api.v1.UserSetting.AccessTokensSetting
|
||||
(*UserSetting_AccessTokensSetting_AccessToken)(nil), // 7: slash.api.v1.UserSetting.AccessTokensSetting.AccessToken
|
||||
(*fieldmaskpb.FieldMask)(nil), // 8: google.protobuf.FieldMask
|
||||
}
|
||||
var file_api_v1_user_setting_service_proto_depIdxs = []int32{
|
||||
1, // 0: slash.api.v1.UserSetting.general:type_name -> slash.api.v1.UserSettingGeneral
|
||||
0, // 1: slash.api.v1.GetUserSettingResponse.user_setting:type_name -> slash.api.v1.UserSetting
|
||||
0, // 2: slash.api.v1.UpdateUserSettingRequest.user_setting:type_name -> slash.api.v1.UserSetting
|
||||
6, // 3: slash.api.v1.UpdateUserSettingRequest.update_mask:type_name -> google.protobuf.FieldMask
|
||||
0, // 4: slash.api.v1.UpdateUserSettingResponse.user_setting:type_name -> slash.api.v1.UserSetting
|
||||
2, // 5: slash.api.v1.UserSettingService.GetUserSetting:input_type -> slash.api.v1.GetUserSettingRequest
|
||||
4, // 6: slash.api.v1.UserSettingService.UpdateUserSetting:input_type -> slash.api.v1.UpdateUserSettingRequest
|
||||
3, // 7: slash.api.v1.UserSettingService.GetUserSetting:output_type -> slash.api.v1.GetUserSettingResponse
|
||||
5, // 8: slash.api.v1.UserSettingService.UpdateUserSetting:output_type -> slash.api.v1.UpdateUserSettingResponse
|
||||
7, // [7:9] is the sub-list for method output_type
|
||||
5, // [5:7] is the sub-list for method input_type
|
||||
5, // [5:5] is the sub-list for extension type_name
|
||||
5, // [5:5] is the sub-list for extension extendee
|
||||
0, // [0:5] is the sub-list for field type_name
|
||||
5, // 0: slash.api.v1.UserSetting.general:type_name -> slash.api.v1.UserSetting.GeneralSetting
|
||||
6, // 1: slash.api.v1.UserSetting.access_tokens:type_name -> slash.api.v1.UserSetting.AccessTokensSetting
|
||||
0, // 2: slash.api.v1.GetUserSettingResponse.user_setting:type_name -> slash.api.v1.UserSetting
|
||||
0, // 3: slash.api.v1.UpdateUserSettingRequest.user_setting:type_name -> slash.api.v1.UserSetting
|
||||
8, // 4: slash.api.v1.UpdateUserSettingRequest.update_mask:type_name -> google.protobuf.FieldMask
|
||||
0, // 5: slash.api.v1.UpdateUserSettingResponse.user_setting:type_name -> slash.api.v1.UserSetting
|
||||
7, // 6: slash.api.v1.UserSetting.AccessTokensSetting.access_tokens:type_name -> slash.api.v1.UserSetting.AccessTokensSetting.AccessToken
|
||||
1, // 7: slash.api.v1.UserSettingService.GetUserSetting:input_type -> slash.api.v1.GetUserSettingRequest
|
||||
3, // 8: slash.api.v1.UserSettingService.UpdateUserSetting:input_type -> slash.api.v1.UpdateUserSettingRequest
|
||||
2, // 9: slash.api.v1.UserSettingService.GetUserSetting:output_type -> slash.api.v1.GetUserSettingResponse
|
||||
4, // 10: slash.api.v1.UserSettingService.UpdateUserSetting:output_type -> slash.api.v1.UpdateUserSettingResponse
|
||||
9, // [9:11] is the sub-list for method output_type
|
||||
7, // [7:9] is the sub-list for method input_type
|
||||
7, // [7:7] is the sub-list for extension type_name
|
||||
7, // [7:7] is the sub-list for extension extendee
|
||||
0, // [0:7] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_api_v1_user_setting_service_proto_init() }
|
||||
@ -481,18 +615,6 @@ 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 {
|
||||
switch v := v.(*UserSettingGeneral); 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[2].Exporter = func(v any, i int) any {
|
||||
switch v := v.(*GetUserSettingRequest); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
@ -504,7 +626,7 @@ func file_api_v1_user_setting_service_proto_init() {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_api_v1_user_setting_service_proto_msgTypes[3].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 {
|
||||
case 0:
|
||||
return &v.state
|
||||
@ -516,7 +638,7 @@ func file_api_v1_user_setting_service_proto_init() {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_api_v1_user_setting_service_proto_msgTypes[4].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 {
|
||||
case 0:
|
||||
return &v.state
|
||||
@ -528,7 +650,7 @@ func file_api_v1_user_setting_service_proto_init() {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_api_v1_user_setting_service_proto_msgTypes[5].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.(*UpdateUserSettingResponse); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
@ -540,6 +662,42 @@ func file_api_v1_user_setting_service_proto_init() {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_api_v1_user_setting_service_proto_msgTypes[5].Exporter = func(v any, i int) any {
|
||||
switch v := v.(*UserSetting_GeneralSetting); 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[6].Exporter = func(v any, i int) any {
|
||||
switch v := v.(*UserSetting_AccessTokensSetting); 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[7].Exporter = func(v any, i int) any {
|
||||
switch v := v.(*UserSetting_AccessTokensSetting_AccessToken); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
@ -547,7 +705,7 @@ func file_api_v1_user_setting_service_proto_init() {
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_api_v1_user_setting_service_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 6,
|
||||
NumMessages: 8,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
|
@ -37,11 +37,9 @@ type WorkspaceProfile struct {
|
||||
EnableSignup bool `protobuf:"varint,4,opt,name=enable_signup,json=enableSignup,proto3" json:"enable_signup,omitempty"`
|
||||
// The custom style.
|
||||
CustomStyle string `protobuf:"bytes,5,opt,name=custom_style,json=customStyle,proto3" json:"custom_style,omitempty"`
|
||||
// The url of custom favicon provider.
|
||||
FaviconProvider string `protobuf:"bytes,7,opt,name=favicon_provider,json=faviconProvider,proto3" json:"favicon_provider,omitempty"`
|
||||
// The owner name.
|
||||
// Format: "users/{id}"
|
||||
Owner string `protobuf:"bytes,8,opt,name=owner,proto3" json:"owner,omitempty"`
|
||||
Owner string `protobuf:"bytes,6,opt,name=owner,proto3" json:"owner,omitempty"`
|
||||
}
|
||||
|
||||
func (x *WorkspaceProfile) Reset() {
|
||||
@ -111,13 +109,6 @@ func (x *WorkspaceProfile) GetCustomStyle() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *WorkspaceProfile) GetFaviconProvider() string {
|
||||
if x != nil {
|
||||
return x.FaviconProvider
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *WorkspaceProfile) GetOwner() string {
|
||||
if x != nil {
|
||||
return x.Owner
|
||||
@ -130,17 +121,10 @@ type WorkspaceSetting struct {
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
LicenseKey string `protobuf:"bytes,1,opt,name=license_key,json=licenseKey,proto3" json:"license_key,omitempty"`
|
||||
// Whether to enable other users to sign up.
|
||||
EnableSignup bool `protobuf:"varint,2,opt,name=enable_signup,json=enableSignup,proto3" json:"enable_signup,omitempty"`
|
||||
// The instance URL.
|
||||
InstanceUrl string `protobuf:"bytes,3,opt,name=instance_url,json=instanceUrl,proto3" json:"instance_url,omitempty"`
|
||||
// The custom style.
|
||||
CustomStyle string `protobuf:"bytes,4,opt,name=custom_style,json=customStyle,proto3" json:"custom_style,omitempty"`
|
||||
CustomStyle string `protobuf:"bytes,1,opt,name=custom_style,json=customStyle,proto3" json:"custom_style,omitempty"`
|
||||
// The default visibility of shortcuts and collections.
|
||||
DefaultVisibility Visibility `protobuf:"varint,7,opt,name=default_visibility,json=defaultVisibility,proto3,enum=slash.api.v1.Visibility" json:"default_visibility,omitempty"`
|
||||
// The url of custom favicon provider.
|
||||
FaviconProvider string `protobuf:"bytes,8,opt,name=favicon_provider,json=faviconProvider,proto3" json:"favicon_provider,omitempty"`
|
||||
DefaultVisibility Visibility `protobuf:"varint,2,opt,name=default_visibility,json=defaultVisibility,proto3,enum=slash.api.v1.Visibility" json:"default_visibility,omitempty"`
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) Reset() {
|
||||
@ -175,27 +159,6 @@ func (*WorkspaceSetting) Descriptor() ([]byte, []int) {
|
||||
return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetLicenseKey() string {
|
||||
if x != nil {
|
||||
return x.LicenseKey
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetEnableSignup() bool {
|
||||
if x != nil {
|
||||
return x.EnableSignup
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetInstanceUrl() string {
|
||||
if x != nil {
|
||||
return x.InstanceUrl
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetCustomStyle() string {
|
||||
if x != nil {
|
||||
return x.CustomStyle
|
||||
@ -210,13 +173,6 @@ func (x *WorkspaceSetting) GetDefaultVisibility() Visibility {
|
||||
return Visibility_VISIBILITY_UNSPECIFIED
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetFaviconProvider() string {
|
||||
if x != nil {
|
||||
return x.FaviconProvider
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type GetWorkspaceProfileRequest struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@ -509,7 +465,7 @@ var file_api_v1_workspace_service_proto_rawDesc = []byte{
|
||||
0x2f, 0x63, 0x6c, 0x69, 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, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
|
||||
0xf5, 0x01, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f,
|
||||
0xca, 0x01, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f,
|
||||
0x66, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
|
||||
@ -520,28 +476,16 @@ var file_api_v1_workspace_service_proto_rawDesc = []byte{
|
||||
0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x67,
|
||||
0x6e, 0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x73, 0x74,
|
||||
0x79, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f,
|
||||
0x6d, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f,
|
||||
0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x0f, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
|
||||
0x72, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x92, 0x02, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b,
|
||||
0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b,
|
||||
0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x0a, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a,
|
||||
0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x67, 0x6e,
|
||||
0x75, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x75,
|
||||
0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e,
|
||||
0x63, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f,
|
||||
0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73,
|
||||
0x74, 0x6f, 0x6d, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61,
|
||||
0x75, 0x6c, 0x74, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x07,
|
||||
0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69,
|
||||
0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x11,
|
||||
0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74,
|
||||
0x79, 0x12, 0x29, 0x0a, 0x10, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f,
|
||||
0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x66, 0x61, 0x76,
|
||||
0x69, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x1c, 0x0a, 0x1a,
|
||||
0x6d, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18,
|
||||
0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x22, 0x7e, 0x0a, 0x10,
|
||||
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||
0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x53, 0x74,
|
||||
0x79, 0x6c, 0x65, 0x12, 0x47, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76,
|
||||
0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
|
||||
0x18, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56,
|
||||
0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75,
|
||||
0x6c, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x1c, 0x0a, 0x1a,
|
||||
0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66,
|
||||
0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x1b, 0x47, 0x65,
|
||||
0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c,
|
||||
|
@ -807,13 +807,32 @@ definitions:
|
||||
apiv1UserSetting:
|
||||
type: object
|
||||
properties:
|
||||
id:
|
||||
userId:
|
||||
type: integer
|
||||
format: int32
|
||||
description: id is the user id.
|
||||
general:
|
||||
$ref: '#/definitions/apiv1UserSettingGeneral'
|
||||
apiv1UserSettingGeneral:
|
||||
$ref: '#/definitions/apiv1UserSettingGeneralSetting'
|
||||
accessTokens:
|
||||
$ref: '#/definitions/apiv1UserSettingAccessTokensSetting'
|
||||
apiv1UserSettingAccessTokensSetting:
|
||||
type: object
|
||||
properties:
|
||||
accessTokens:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
$ref: '#/definitions/apiv1UserSettingAccessTokensSettingAccessToken'
|
||||
title: Nested repeated field
|
||||
apiv1UserSettingAccessTokensSettingAccessToken:
|
||||
type: object
|
||||
properties:
|
||||
accessToken:
|
||||
type: string
|
||||
description: The access token is a JWT token, including expiration time, issuer, etc.
|
||||
description:
|
||||
type: string
|
||||
description: A description for the access token.
|
||||
apiv1UserSettingGeneralSetting:
|
||||
type: object
|
||||
properties:
|
||||
locale:
|
||||
@ -831,23 +850,12 @@ definitions:
|
||||
apiv1WorkspaceSetting:
|
||||
type: object
|
||||
properties:
|
||||
licenseKey:
|
||||
type: string
|
||||
enableSignup:
|
||||
type: boolean
|
||||
description: Whether to enable other users to sign up.
|
||||
instanceUrl:
|
||||
type: string
|
||||
description: The instance URL.
|
||||
customStyle:
|
||||
type: string
|
||||
description: The custom style.
|
||||
defaultVisibility:
|
||||
$ref: '#/definitions/apiv1Visibility'
|
||||
description: The default visibility of shortcuts and collections.
|
||||
faviconProvider:
|
||||
type: string
|
||||
description: The url of custom favicon provider.
|
||||
protobufAny:
|
||||
type: object
|
||||
properties:
|
||||
@ -1128,9 +1136,6 @@ definitions:
|
||||
customStyle:
|
||||
type: string
|
||||
description: The custom style.
|
||||
faviconProvider:
|
||||
type: string
|
||||
description: The url of custom favicon provider.
|
||||
owner:
|
||||
type: string
|
||||
title: |-
|
||||
|
@ -20,14 +20,16 @@
|
||||
|
||||
- [store/user_setting.proto](#store_user_setting-proto)
|
||||
- [UserSetting](#slash-store-UserSetting)
|
||||
- [UserSettingAccessTokens](#slash-store-UserSettingAccessTokens)
|
||||
- [UserSettingAccessTokens.AccessToken](#slash-store-UserSettingAccessTokens-AccessToken)
|
||||
- [UserSettingGeneral](#slash-store-UserSettingGeneral)
|
||||
- [UserSetting.AccessTokensSetting](#slash-store-UserSetting-AccessTokensSetting)
|
||||
- [UserSetting.AccessTokensSetting.AccessToken](#slash-store-UserSetting-AccessTokensSetting-AccessToken)
|
||||
- [UserSetting.GeneralSetting](#slash-store-UserSetting-GeneralSetting)
|
||||
|
||||
- [UserSettingKey](#slash-store-UserSettingKey)
|
||||
|
||||
- [store/workspace_setting.proto](#store_workspace_setting-proto)
|
||||
- [WorkspaceSetting](#slash-store-WorkspaceSetting)
|
||||
- [WorkspaceSetting.GeneralSetting](#slash-store-WorkspaceSetting-GeneralSetting)
|
||||
- [WorkspaceSetting.ShortcutRelatedSetting](#slash-store-WorkspaceSetting-ShortcutRelatedSetting)
|
||||
|
||||
- [WorkspaceSettingKey](#slash-store-WorkspaceSettingKey)
|
||||
|
||||
@ -242,38 +244,38 @@
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| user_id | [int32](#int32) | | |
|
||||
| key | [UserSettingKey](#slash-store-UserSettingKey) | | |
|
||||
| general | [UserSettingGeneral](#slash-store-UserSettingGeneral) | | |
|
||||
| access_tokens | [UserSettingAccessTokens](#slash-store-UserSettingAccessTokens) | | |
|
||||
| general | [UserSetting.GeneralSetting](#slash-store-UserSetting-GeneralSetting) | | |
|
||||
| access_tokens | [UserSetting.AccessTokensSetting](#slash-store-UserSetting-AccessTokensSetting) | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="slash-store-UserSettingAccessTokens"></a>
|
||||
<a name="slash-store-UserSetting-AccessTokensSetting"></a>
|
||||
|
||||
### UserSettingAccessTokens
|
||||
### UserSetting.AccessTokensSetting
|
||||
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| access_tokens | [UserSettingAccessTokens.AccessToken](#slash-store-UserSettingAccessTokens-AccessToken) | repeated | |
|
||||
| access_tokens | [UserSetting.AccessTokensSetting.AccessToken](#slash-store-UserSetting-AccessTokensSetting-AccessToken) | repeated | Nested repeated field |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="slash-store-UserSettingAccessTokens-AccessToken"></a>
|
||||
<a name="slash-store-UserSetting-AccessTokensSetting-AccessToken"></a>
|
||||
|
||||
### UserSettingAccessTokens.AccessToken
|
||||
### UserSetting.AccessTokensSetting.AccessToken
|
||||
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| access_token | [string](#string) | | The access token is a JWT token. Including expiration time, issuer, etc. |
|
||||
| access_token | [string](#string) | | The access token is a JWT token, including expiration time, issuer, etc. |
|
||||
| description | [string](#string) | | A description for the access token. |
|
||||
|
||||
|
||||
@ -281,9 +283,9 @@
|
||||
|
||||
|
||||
|
||||
<a name="slash-store-UserSettingGeneral"></a>
|
||||
<a name="slash-store-UserSetting-GeneralSetting"></a>
|
||||
|
||||
### UserSettingGeneral
|
||||
### UserSetting.GeneralSetting
|
||||
|
||||
|
||||
|
||||
@ -307,8 +309,8 @@
|
||||
| Name | Number | Description |
|
||||
| ---- | ------ | ----------- |
|
||||
| USER_SETTING_KEY_UNSPECIFIED | 0 | |
|
||||
| GENERAL | 1 | General settings for the user. |
|
||||
| ACCESS_TOKENS | 2 | Access tokens for the user. |
|
||||
| USER_SETTING_GENERAL | 1 | User general settings. |
|
||||
| USER_SETTING_ACCESS_TOKENS | 2 | User access tokens. |
|
||||
|
||||
|
||||
|
||||
@ -335,13 +337,41 @@
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| key | [WorkspaceSettingKey](#slash-store-WorkspaceSettingKey) | | |
|
||||
| license_key | [string](#string) | | The license key of workspace. |
|
||||
| secret_session | [string](#string) | | The secret session key used to encrypt session data. |
|
||||
| enable_signup | [bool](#bool) | | Whether to enable other users to sign up. |
|
||||
| custom_style | [string](#string) | | The custom style. |
|
||||
| instance_url | [string](#string) | | The instance URL of workspace. |
|
||||
| default_visibility | [Visibility](#slash-store-Visibility) | | The default visibility of shortcuts and collections. |
|
||||
| favicon_provider | [string](#string) | | The url of custom favicon provider. e.g. https://github.com/yourselfhosted/favicons |
|
||||
| raw | [string](#string) | | |
|
||||
| general | [WorkspaceSetting.GeneralSetting](#slash-store-WorkspaceSetting-GeneralSetting) | | |
|
||||
| shortcut_related | [WorkspaceSetting.ShortcutRelatedSetting](#slash-store-WorkspaceSetting-ShortcutRelatedSetting) | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="slash-store-WorkspaceSetting-GeneralSetting"></a>
|
||||
|
||||
### WorkspaceSetting.GeneralSetting
|
||||
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| secret_session | [string](#string) | | |
|
||||
| license_key | [string](#string) | | |
|
||||
| custom_style | [string](#string) | | |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a name="slash-store-WorkspaceSetting-ShortcutRelatedSetting"></a>
|
||||
|
||||
### WorkspaceSetting.ShortcutRelatedSetting
|
||||
|
||||
|
||||
|
||||
| Field | Type | Label | Description |
|
||||
| ----- | ---- | ----- | ----------- |
|
||||
| default_visibility | [Visibility](#slash-store-Visibility) | | |
|
||||
|
||||
|
||||
|
||||
@ -358,13 +388,12 @@
|
||||
| Name | Number | Description |
|
||||
| ---- | ------ | ----------- |
|
||||
| WORKSPACE_SETTING_KEY_UNSPECIFIED | 0 | |
|
||||
| WORKSPACE_SETTING_LICENSE_KEY | 1 | The license key. |
|
||||
| WORKSPACE_SETTING_SECRET_SESSION | 2 | The secret session key used to encrypt session data. |
|
||||
| WORKSAPCE_SETTING_ENABLE_SIGNUP | 3 | Whether to enable other users to sign up. |
|
||||
| WORKSPACE_SETTING_CUSTOM_STYLE | 4 | The custom style. |
|
||||
| WORKSPACE_SETTING_INSTANCE_URL | 7 | The instance URL. |
|
||||
| WORKSPACE_SETTING_DEFAULT_VISIBILITY | 8 | The default visibility of shortcuts and collections. |
|
||||
| WORKSPACE_SETTING_FAVICON_PROVIDER | 9 | The url of custom favicon provider. |
|
||||
| WORKSPACE_SETTING_GENERAL | 1 | Workspace general settings. |
|
||||
| WORKSPACE_SETTING_SHORTCUT_RELATED | 2 | Workspace shortcut-related settings. |
|
||||
| WORKSPACE_SETTING_LICENSE_KEY | 3 | TODO: remove the following keys. The license key. |
|
||||
| WORKSPACE_SETTING_SECRET_SESSION | 4 | The secret session key used to encrypt session data. |
|
||||
| WORKSPACE_SETTING_CUSTOM_STYLE | 5 | The custom style. |
|
||||
| WORKSPACE_SETTING_DEFAULT_VISIBILITY | 6 | The default visibility of shortcuts and collections. |
|
||||
|
||||
|
||||
|
||||
|
@ -24,23 +24,23 @@ type UserSettingKey int32
|
||||
|
||||
const (
|
||||
UserSettingKey_USER_SETTING_KEY_UNSPECIFIED UserSettingKey = 0
|
||||
// General settings for the user.
|
||||
UserSettingKey_GENERAL UserSettingKey = 1
|
||||
// Access tokens for the user.
|
||||
UserSettingKey_ACCESS_TOKENS UserSettingKey = 2
|
||||
// User general settings.
|
||||
UserSettingKey_USER_SETTING_GENERAL UserSettingKey = 1
|
||||
// User access tokens.
|
||||
UserSettingKey_USER_SETTING_ACCESS_TOKENS UserSettingKey = 2
|
||||
)
|
||||
|
||||
// Enum value maps for UserSettingKey.
|
||||
var (
|
||||
UserSettingKey_name = map[int32]string{
|
||||
0: "USER_SETTING_KEY_UNSPECIFIED",
|
||||
1: "GENERAL",
|
||||
2: "ACCESS_TOKENS",
|
||||
1: "USER_SETTING_GENERAL",
|
||||
2: "USER_SETTING_ACCESS_TOKENS",
|
||||
}
|
||||
UserSettingKey_value = map[string]int32{
|
||||
"USER_SETTING_KEY_UNSPECIFIED": 0,
|
||||
"GENERAL": 1,
|
||||
"ACCESS_TOKENS": 2,
|
||||
"USER_SETTING_GENERAL": 1,
|
||||
"USER_SETTING_ACCESS_TOKENS": 2,
|
||||
}
|
||||
)
|
||||
|
||||
@ -138,14 +138,14 @@ func (m *UserSetting) GetValue() isUserSetting_Value {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *UserSetting) GetGeneral() *UserSettingGeneral {
|
||||
func (x *UserSetting) GetGeneral() *UserSetting_GeneralSetting {
|
||||
if x, ok := x.GetValue().(*UserSetting_General); ok {
|
||||
return x.General
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *UserSetting) GetAccessTokens() *UserSettingAccessTokens {
|
||||
func (x *UserSetting) GetAccessTokens() *UserSetting_AccessTokensSetting {
|
||||
if x, ok := x.GetValue().(*UserSetting_AccessTokens); ok {
|
||||
return x.AccessTokens
|
||||
}
|
||||
@ -157,18 +157,18 @@ type isUserSetting_Value interface {
|
||||
}
|
||||
|
||||
type UserSetting_General struct {
|
||||
General *UserSettingGeneral `protobuf:"bytes,3,opt,name=general,proto3,oneof"`
|
||||
General *UserSetting_GeneralSetting `protobuf:"bytes,3,opt,name=general,proto3,oneof"`
|
||||
}
|
||||
|
||||
type UserSetting_AccessTokens struct {
|
||||
AccessTokens *UserSettingAccessTokens `protobuf:"bytes,4,opt,name=access_tokens,json=accessTokens,proto3,oneof"`
|
||||
AccessTokens *UserSetting_AccessTokensSetting `protobuf:"bytes,4,opt,name=access_tokens,json=accessTokens,proto3,oneof"`
|
||||
}
|
||||
|
||||
func (*UserSetting_General) isUserSetting_Value() {}
|
||||
|
||||
func (*UserSetting_AccessTokens) isUserSetting_Value() {}
|
||||
|
||||
type UserSettingGeneral struct {
|
||||
type UserSetting_GeneralSetting struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
@ -177,8 +177,8 @@ type UserSettingGeneral struct {
|
||||
ColorTheme string `protobuf:"bytes,2,opt,name=color_theme,json=colorTheme,proto3" json:"color_theme,omitempty"`
|
||||
}
|
||||
|
||||
func (x *UserSettingGeneral) Reset() {
|
||||
*x = UserSettingGeneral{}
|
||||
func (x *UserSetting_GeneralSetting) Reset() {
|
||||
*x = UserSetting_GeneralSetting{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_store_user_setting_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
@ -186,13 +186,13 @@ func (x *UserSettingGeneral) Reset() {
|
||||
}
|
||||
}
|
||||
|
||||
func (x *UserSettingGeneral) String() string {
|
||||
func (x *UserSetting_GeneralSetting) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*UserSettingGeneral) ProtoMessage() {}
|
||||
func (*UserSetting_GeneralSetting) ProtoMessage() {}
|
||||
|
||||
func (x *UserSettingGeneral) ProtoReflect() protoreflect.Message {
|
||||
func (x *UserSetting_GeneralSetting) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_store_user_setting_proto_msgTypes[1]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
@ -204,35 +204,35 @@ func (x *UserSettingGeneral) ProtoReflect() protoreflect.Message {
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use UserSettingGeneral.ProtoReflect.Descriptor instead.
|
||||
func (*UserSettingGeneral) Descriptor() ([]byte, []int) {
|
||||
return file_store_user_setting_proto_rawDescGZIP(), []int{1}
|
||||
// Deprecated: Use UserSetting_GeneralSetting.ProtoReflect.Descriptor instead.
|
||||
func (*UserSetting_GeneralSetting) Descriptor() ([]byte, []int) {
|
||||
return file_store_user_setting_proto_rawDescGZIP(), []int{0, 0}
|
||||
}
|
||||
|
||||
func (x *UserSettingGeneral) GetLocale() string {
|
||||
func (x *UserSetting_GeneralSetting) GetLocale() string {
|
||||
if x != nil {
|
||||
return x.Locale
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *UserSettingGeneral) GetColorTheme() string {
|
||||
func (x *UserSetting_GeneralSetting) GetColorTheme() string {
|
||||
if x != nil {
|
||||
return x.ColorTheme
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type UserSettingAccessTokens struct {
|
||||
type UserSetting_AccessTokensSetting 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"`
|
||||
AccessTokens []*UserSetting_AccessTokensSetting_AccessToken `protobuf:"bytes,1,rep,name=access_tokens,json=accessTokens,proto3" json:"access_tokens,omitempty"` // Nested repeated field
|
||||
}
|
||||
|
||||
func (x *UserSettingAccessTokens) Reset() {
|
||||
*x = UserSettingAccessTokens{}
|
||||
func (x *UserSetting_AccessTokensSetting) Reset() {
|
||||
*x = UserSetting_AccessTokensSetting{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_store_user_setting_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
@ -240,13 +240,13 @@ func (x *UserSettingAccessTokens) Reset() {
|
||||
}
|
||||
}
|
||||
|
||||
func (x *UserSettingAccessTokens) String() string {
|
||||
func (x *UserSetting_AccessTokensSetting) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*UserSettingAccessTokens) ProtoMessage() {}
|
||||
func (*UserSetting_AccessTokensSetting) ProtoMessage() {}
|
||||
|
||||
func (x *UserSettingAccessTokens) ProtoReflect() protoreflect.Message {
|
||||
func (x *UserSetting_AccessTokensSetting) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_store_user_setting_proto_msgTypes[2]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
@ -258,32 +258,31 @@ func (x *UserSettingAccessTokens) ProtoReflect() protoreflect.Message {
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use UserSettingAccessTokens.ProtoReflect.Descriptor instead.
|
||||
func (*UserSettingAccessTokens) Descriptor() ([]byte, []int) {
|
||||
return file_store_user_setting_proto_rawDescGZIP(), []int{2}
|
||||
// Deprecated: Use UserSetting_AccessTokensSetting.ProtoReflect.Descriptor instead.
|
||||
func (*UserSetting_AccessTokensSetting) Descriptor() ([]byte, []int) {
|
||||
return file_store_user_setting_proto_rawDescGZIP(), []int{0, 1}
|
||||
}
|
||||
|
||||
func (x *UserSettingAccessTokens) GetAccessTokens() []*UserSettingAccessTokens_AccessToken {
|
||||
func (x *UserSetting_AccessTokensSetting) GetAccessTokens() []*UserSetting_AccessTokensSetting_AccessToken {
|
||||
if x != nil {
|
||||
return x.AccessTokens
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type UserSettingAccessTokens_AccessToken struct {
|
||||
type UserSetting_AccessTokensSetting_AccessToken struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// The access token is a JWT token.
|
||||
// Including expiration time, issuer, etc.
|
||||
// The access token is a JWT token, including expiration time, issuer, etc.
|
||||
AccessToken string `protobuf:"bytes,1,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"`
|
||||
// A description for the access token.
|
||||
Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
|
||||
}
|
||||
|
||||
func (x *UserSettingAccessTokens_AccessToken) Reset() {
|
||||
*x = UserSettingAccessTokens_AccessToken{}
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) Reset() {
|
||||
*x = UserSetting_AccessTokensSetting_AccessToken{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_store_user_setting_proto_msgTypes[3]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
@ -291,13 +290,13 @@ func (x *UserSettingAccessTokens_AccessToken) Reset() {
|
||||
}
|
||||
}
|
||||
|
||||
func (x *UserSettingAccessTokens_AccessToken) String() string {
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*UserSettingAccessTokens_AccessToken) ProtoMessage() {}
|
||||
func (*UserSetting_AccessTokensSetting_AccessToken) ProtoMessage() {}
|
||||
|
||||
func (x *UserSettingAccessTokens_AccessToken) ProtoReflect() protoreflect.Message {
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_store_user_setting_proto_msgTypes[3]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
@ -309,19 +308,19 @@ func (x *UserSettingAccessTokens_AccessToken) ProtoReflect() protoreflect.Messag
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use UserSettingAccessTokens_AccessToken.ProtoReflect.Descriptor instead.
|
||||
func (*UserSettingAccessTokens_AccessToken) Descriptor() ([]byte, []int) {
|
||||
return file_store_user_setting_proto_rawDescGZIP(), []int{2, 0}
|
||||
// Deprecated: Use UserSetting_AccessTokensSetting_AccessToken.ProtoReflect.Descriptor instead.
|
||||
func (*UserSetting_AccessTokensSetting_AccessToken) Descriptor() ([]byte, []int) {
|
||||
return file_store_user_setting_proto_rawDescGZIP(), []int{0, 1, 0}
|
||||
}
|
||||
|
||||
func (x *UserSettingAccessTokens_AccessToken) GetAccessToken() string {
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) GetAccessToken() string {
|
||||
if x != nil {
|
||||
return x.AccessToken
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *UserSettingAccessTokens_AccessToken) GetDescription() string {
|
||||
func (x *UserSetting_AccessTokensSetting_AccessToken) GetDescription() string {
|
||||
if x != nil {
|
||||
return x.Description
|
||||
}
|
||||
@ -333,55 +332,58 @@ var File_store_user_setting_proto protoreflect.FileDescriptor
|
||||
var file_store_user_setting_proto_rawDesc = []byte{
|
||||
0x0a, 0x18, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x74,
|
||||
0x74, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x73, 0x6c, 0x61, 0x73,
|
||||
0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72,
|
||||
0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x8e, 0x04, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72,
|
||||
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f,
|
||||
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64,
|
||||
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,
|
||||
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
|
||||
0x3b, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x1f, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x55,
|
||||
0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
|
||||
0x6c, 0x48, 0x00, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x4b, 0x0a, 0x0d,
|
||||
0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20,
|
||||
0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72,
|
||||
0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63, 0x63,
|
||||
0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x63, 0x63,
|
||||
0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c,
|
||||
0x75, 0x65, 0x22, 0x4d, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
||||
0x67, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x61,
|
||||
0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65,
|
||||
0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x68, 0x65, 0x6d, 0x65, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x54, 0x68, 0x65, 0x6d,
|
||||
0x65, 0x22, 0xc4, 0x01, 0x0a, 0x17, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
||||
0x67, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x55, 0x0a,
|
||||
0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01,
|
||||
0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f,
|
||||
0x72, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x41, 0x63,
|
||||
0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73,
|
||||
0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f,
|
||||
0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x52, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f,
|
||||
0x6b, 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f,
|
||||
0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73,
|
||||
0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
|
||||
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73,
|
||||
0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x52, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72,
|
||||
0x43, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x27, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x55,
|
||||
0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72,
|
||||
0x61, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x07, 0x67, 0x65, 0x6e,
|
||||
0x65, 0x72, 0x61, 0x6c, 0x12, 0x53, 0x0a, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74,
|
||||
0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x6c,
|
||||
0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65,
|
||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65,
|
||||
0x6e, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x63, 0x63,
|
||||
0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x49, 0x0a, 0x0e, 0x47, 0x65, 0x6e,
|
||||
0x65, 0x72, 0x61, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x6c,
|
||||
0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63,
|
||||
0x61, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x5f, 0x74, 0x68, 0x65,
|
||||
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x54,
|
||||
0x68, 0x65, 0x6d, 0x65, 0x1a, 0xc8, 0x01, 0x0a, 0x13, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54,
|
||||
0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x5d, 0x0a, 0x0d,
|
||||
0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20,
|
||||
0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72,
|
||||
0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x41, 0x63,
|
||||
0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
||||
0x67, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x0c, 0x61,
|
||||
0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x1a, 0x52, 0x0a, 0x0b, 0x41,
|
||||
0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63,
|
||||
0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a,
|
||||
0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42,
|
||||
0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x6c, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72,
|
||||
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x1c, 0x55, 0x53,
|
||||
0x45, 0x52, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x55,
|
||||
0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07,
|
||||
0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x41, 0x43, 0x43,
|
||||
0x45, 0x53, 0x53, 0x5f, 0x54, 0x4f, 0x4b, 0x45, 0x4e, 0x53, 0x10, 0x02, 0x42, 0xa1, 0x01, 0x0a,
|
||||
0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65,
|
||||
0x42, 0x10, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x2f, 0x79, 0x6f, 0x75, 0x72, 0x73, 0x65, 0x6c, 0x66, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x2f,
|
||||
0x73, 0x6c, 0x61, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f,
|
||||
0x73, 0x74, 0x6f, 0x72, 0x65, 0xa2, 0x02, 0x03, 0x53, 0x53, 0x58, 0xaa, 0x02, 0x0b, 0x53, 0x6c,
|
||||
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,
|
||||
0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14,
|
||||
0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x47, 0x45, 0x4e,
|
||||
0x45, 0x52, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53,
|
||||
0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x4f,
|
||||
0x4b, 0x45, 0x4e, 0x53, 0x10, 0x02, 0x42, 0xa1, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x73,
|
||||
0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x10, 0x55, 0x73, 0x65, 0x72,
|
||||
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f,
|
||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x79, 0x6f, 0x75, 0x72, 0x73,
|
||||
0x65, 0x6c, 0x66, 0x68, 0x6f, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2f,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0xa2,
|
||||
0x02, 0x03, 0x53, 0x53, 0x58, 0xaa, 0x02, 0x0b, 0x53, 0x6c, 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 (
|
||||
@ -399,17 +401,17 @@ 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_msgTypes = make([]protoimpl.MessageInfo, 4)
|
||||
var file_store_user_setting_proto_goTypes = []any{
|
||||
(UserSettingKey)(0), // 0: slash.store.UserSettingKey
|
||||
(*UserSetting)(nil), // 1: slash.store.UserSetting
|
||||
(*UserSettingGeneral)(nil), // 2: slash.store.UserSettingGeneral
|
||||
(*UserSettingAccessTokens)(nil), // 3: slash.store.UserSettingAccessTokens
|
||||
(*UserSettingAccessTokens_AccessToken)(nil), // 4: slash.store.UserSettingAccessTokens.AccessToken
|
||||
(UserSettingKey)(0), // 0: slash.store.UserSettingKey
|
||||
(*UserSetting)(nil), // 1: slash.store.UserSetting
|
||||
(*UserSetting_GeneralSetting)(nil), // 2: slash.store.UserSetting.GeneralSetting
|
||||
(*UserSetting_AccessTokensSetting)(nil), // 3: slash.store.UserSetting.AccessTokensSetting
|
||||
(*UserSetting_AccessTokensSetting_AccessToken)(nil), // 4: slash.store.UserSetting.AccessTokensSetting.AccessToken
|
||||
}
|
||||
var file_store_user_setting_proto_depIdxs = []int32{
|
||||
0, // 0: slash.store.UserSetting.key:type_name -> slash.store.UserSettingKey
|
||||
2, // 1: slash.store.UserSetting.general:type_name -> slash.store.UserSettingGeneral
|
||||
3, // 2: slash.store.UserSetting.access_tokens:type_name -> slash.store.UserSettingAccessTokens
|
||||
4, // 3: slash.store.UserSettingAccessTokens.access_tokens:type_name -> slash.store.UserSettingAccessTokens.AccessToken
|
||||
2, // 1: slash.store.UserSetting.general:type_name -> slash.store.UserSetting.GeneralSetting
|
||||
3, // 2: slash.store.UserSetting.access_tokens:type_name -> slash.store.UserSetting.AccessTokensSetting
|
||||
4, // 3: slash.store.UserSetting.AccessTokensSetting.access_tokens:type_name -> slash.store.UserSetting.AccessTokensSetting.AccessToken
|
||||
4, // [4:4] is the sub-list for method output_type
|
||||
4, // [4:4] is the sub-list for method input_type
|
||||
4, // [4:4] is the sub-list for extension type_name
|
||||
@ -436,7 +438,7 @@ func file_store_user_setting_proto_init() {
|
||||
}
|
||||
}
|
||||
file_store_user_setting_proto_msgTypes[1].Exporter = func(v any, i int) any {
|
||||
switch v := v.(*UserSettingGeneral); i {
|
||||
switch v := v.(*UserSetting_GeneralSetting); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
@ -448,7 +450,7 @@ func file_store_user_setting_proto_init() {
|
||||
}
|
||||
}
|
||||
file_store_user_setting_proto_msgTypes[2].Exporter = func(v any, i int) any {
|
||||
switch v := v.(*UserSettingAccessTokens); i {
|
||||
switch v := v.(*UserSetting_AccessTokensSetting); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
@ -460,7 +462,7 @@ func file_store_user_setting_proto_init() {
|
||||
}
|
||||
}
|
||||
file_store_user_setting_proto_msgTypes[3].Exporter = func(v any, i int) any {
|
||||
switch v := v.(*UserSettingAccessTokens_AccessToken); i {
|
||||
switch v := v.(*UserSetting_AccessTokensSetting_AccessToken); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
|
@ -24,43 +24,40 @@ type WorkspaceSettingKey int32
|
||||
|
||||
const (
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_KEY_UNSPECIFIED WorkspaceSettingKey = 0
|
||||
// Workspace general settings.
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL WorkspaceSettingKey = 1
|
||||
// Workspace shortcut-related settings.
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED WorkspaceSettingKey = 2
|
||||
// TODO: remove the following keys.
|
||||
// The license key.
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY WorkspaceSettingKey = 1
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY WorkspaceSettingKey = 3
|
||||
// The secret session key used to encrypt session data.
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION WorkspaceSettingKey = 2
|
||||
// Whether to enable other users to sign up.
|
||||
WorkspaceSettingKey_WORKSAPCE_SETTING_ENABLE_SIGNUP WorkspaceSettingKey = 3
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION WorkspaceSettingKey = 4
|
||||
// The custom style.
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE WorkspaceSettingKey = 4
|
||||
// The instance URL.
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_INSTANCE_URL WorkspaceSettingKey = 7
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE WorkspaceSettingKey = 5
|
||||
// The default visibility of shortcuts and collections.
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY WorkspaceSettingKey = 8
|
||||
// The url of custom favicon provider.
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_FAVICON_PROVIDER WorkspaceSettingKey = 9
|
||||
WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY WorkspaceSettingKey = 6
|
||||
)
|
||||
|
||||
// Enum value maps for WorkspaceSettingKey.
|
||||
var (
|
||||
WorkspaceSettingKey_name = map[int32]string{
|
||||
0: "WORKSPACE_SETTING_KEY_UNSPECIFIED",
|
||||
1: "WORKSPACE_SETTING_LICENSE_KEY",
|
||||
2: "WORKSPACE_SETTING_SECRET_SESSION",
|
||||
3: "WORKSAPCE_SETTING_ENABLE_SIGNUP",
|
||||
4: "WORKSPACE_SETTING_CUSTOM_STYLE",
|
||||
7: "WORKSPACE_SETTING_INSTANCE_URL",
|
||||
8: "WORKSPACE_SETTING_DEFAULT_VISIBILITY",
|
||||
9: "WORKSPACE_SETTING_FAVICON_PROVIDER",
|
||||
1: "WORKSPACE_SETTING_GENERAL",
|
||||
2: "WORKSPACE_SETTING_SHORTCUT_RELATED",
|
||||
3: "WORKSPACE_SETTING_LICENSE_KEY",
|
||||
4: "WORKSPACE_SETTING_SECRET_SESSION",
|
||||
5: "WORKSPACE_SETTING_CUSTOM_STYLE",
|
||||
6: "WORKSPACE_SETTING_DEFAULT_VISIBILITY",
|
||||
}
|
||||
WorkspaceSettingKey_value = map[string]int32{
|
||||
"WORKSPACE_SETTING_KEY_UNSPECIFIED": 0,
|
||||
"WORKSPACE_SETTING_LICENSE_KEY": 1,
|
||||
"WORKSPACE_SETTING_SECRET_SESSION": 2,
|
||||
"WORKSAPCE_SETTING_ENABLE_SIGNUP": 3,
|
||||
"WORKSPACE_SETTING_CUSTOM_STYLE": 4,
|
||||
"WORKSPACE_SETTING_INSTANCE_URL": 7,
|
||||
"WORKSPACE_SETTING_DEFAULT_VISIBILITY": 8,
|
||||
"WORKSPACE_SETTING_FAVICON_PROVIDER": 9,
|
||||
"WORKSPACE_SETTING_GENERAL": 1,
|
||||
"WORKSPACE_SETTING_SHORTCUT_RELATED": 2,
|
||||
"WORKSPACE_SETTING_LICENSE_KEY": 3,
|
||||
"WORKSPACE_SETTING_SECRET_SESSION": 4,
|
||||
"WORKSPACE_SETTING_CUSTOM_STYLE": 5,
|
||||
"WORKSPACE_SETTING_DEFAULT_VISIBILITY": 6,
|
||||
}
|
||||
)
|
||||
|
||||
@ -97,15 +94,11 @@ type WorkspaceSetting struct {
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Key WorkspaceSettingKey `protobuf:"varint,1,opt,name=key,proto3,enum=slash.store.WorkspaceSettingKey" json:"key,omitempty"`
|
||||
Raw string `protobuf:"bytes,4,opt,name=raw,proto3" json:"raw,omitempty"`
|
||||
// Types that are assignable to Value:
|
||||
//
|
||||
// *WorkspaceSetting_LicenseKey
|
||||
// *WorkspaceSetting_SecretSession
|
||||
// *WorkspaceSetting_EnableSignup
|
||||
// *WorkspaceSetting_CustomStyle
|
||||
// *WorkspaceSetting_InstanceUrl
|
||||
// *WorkspaceSetting_DefaultVisibility
|
||||
// *WorkspaceSetting_FaviconProvider
|
||||
// *WorkspaceSetting_General
|
||||
// *WorkspaceSetting_ShortcutRelated
|
||||
Value isWorkspaceSetting_Value `protobuf_oneof:"value"`
|
||||
}
|
||||
|
||||
@ -148,6 +141,13 @@ func (x *WorkspaceSetting) GetKey() WorkspaceSettingKey {
|
||||
return WorkspaceSettingKey_WORKSPACE_SETTING_KEY_UNSPECIFIED
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetRaw() string {
|
||||
if x != nil {
|
||||
return x.Raw
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *WorkspaceSetting) GetValue() isWorkspaceSetting_Value {
|
||||
if m != nil {
|
||||
return m.Value
|
||||
@ -155,107 +155,145 @@ func (m *WorkspaceSetting) GetValue() isWorkspaceSetting_Value {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetLicenseKey() string {
|
||||
if x, ok := x.GetValue().(*WorkspaceSetting_LicenseKey); ok {
|
||||
return x.LicenseKey
|
||||
func (x *WorkspaceSetting) GetGeneral() *WorkspaceSetting_GeneralSetting {
|
||||
if x, ok := x.GetValue().(*WorkspaceSetting_General); ok {
|
||||
return x.General
|
||||
}
|
||||
return ""
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetSecretSession() string {
|
||||
if x, ok := x.GetValue().(*WorkspaceSetting_SecretSession); ok {
|
||||
return x.SecretSession
|
||||
func (x *WorkspaceSetting) GetShortcutRelated() *WorkspaceSetting_ShortcutRelatedSetting {
|
||||
if x, ok := x.GetValue().(*WorkspaceSetting_ShortcutRelated); ok {
|
||||
return x.ShortcutRelated
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetEnableSignup() bool {
|
||||
if x, ok := x.GetValue().(*WorkspaceSetting_EnableSignup); ok {
|
||||
return x.EnableSignup
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetCustomStyle() string {
|
||||
if x, ok := x.GetValue().(*WorkspaceSetting_CustomStyle); ok {
|
||||
return x.CustomStyle
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetInstanceUrl() string {
|
||||
if x, ok := x.GetValue().(*WorkspaceSetting_InstanceUrl); ok {
|
||||
return x.InstanceUrl
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetDefaultVisibility() Visibility {
|
||||
if x, ok := x.GetValue().(*WorkspaceSetting_DefaultVisibility); ok {
|
||||
return x.DefaultVisibility
|
||||
}
|
||||
return Visibility_VISIBILITY_UNSPECIFIED
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting) GetFaviconProvider() string {
|
||||
if x, ok := x.GetValue().(*WorkspaceSetting_FaviconProvider); ok {
|
||||
return x.FaviconProvider
|
||||
}
|
||||
return ""
|
||||
return nil
|
||||
}
|
||||
|
||||
type isWorkspaceSetting_Value interface {
|
||||
isWorkspaceSetting_Value()
|
||||
}
|
||||
|
||||
type WorkspaceSetting_LicenseKey struct {
|
||||
// The license key of workspace.
|
||||
LicenseKey string `protobuf:"bytes,2,opt,name=license_key,json=licenseKey,proto3,oneof"`
|
||||
type WorkspaceSetting_General struct {
|
||||
General *WorkspaceSetting_GeneralSetting `protobuf:"bytes,2,opt,name=general,proto3,oneof"`
|
||||
}
|
||||
|
||||
type WorkspaceSetting_SecretSession struct {
|
||||
// The secret session key used to encrypt session data.
|
||||
SecretSession string `protobuf:"bytes,3,opt,name=secret_session,json=secretSession,proto3,oneof"`
|
||||
type WorkspaceSetting_ShortcutRelated struct {
|
||||
ShortcutRelated *WorkspaceSetting_ShortcutRelatedSetting `protobuf:"bytes,3,opt,name=shortcut_related,json=shortcutRelated,proto3,oneof"`
|
||||
}
|
||||
|
||||
type WorkspaceSetting_EnableSignup struct {
|
||||
// Whether to enable other users to sign up.
|
||||
EnableSignup bool `protobuf:"varint,4,opt,name=enable_signup,json=enableSignup,proto3,oneof"`
|
||||
func (*WorkspaceSetting_General) isWorkspaceSetting_Value() {}
|
||||
|
||||
func (*WorkspaceSetting_ShortcutRelated) isWorkspaceSetting_Value() {}
|
||||
|
||||
type WorkspaceSetting_GeneralSetting struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
SecretSession string `protobuf:"bytes,1,opt,name=secret_session,json=secretSession,proto3" json:"secret_session,omitempty"`
|
||||
LicenseKey string `protobuf:"bytes,2,opt,name=license_key,json=licenseKey,proto3" json:"license_key,omitempty"`
|
||||
CustomStyle string `protobuf:"bytes,3,opt,name=custom_style,json=customStyle,proto3" json:"custom_style,omitempty"`
|
||||
}
|
||||
|
||||
type WorkspaceSetting_CustomStyle struct {
|
||||
// The custom style.
|
||||
CustomStyle string `protobuf:"bytes,5,opt,name=custom_style,json=customStyle,proto3,oneof"`
|
||||
func (x *WorkspaceSetting_GeneralSetting) Reset() {
|
||||
*x = WorkspaceSetting_GeneralSetting{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_store_workspace_setting_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
type WorkspaceSetting_InstanceUrl struct {
|
||||
// The instance URL of workspace.
|
||||
InstanceUrl string `protobuf:"bytes,8,opt,name=instance_url,json=instanceUrl,proto3,oneof"`
|
||||
func (x *WorkspaceSetting_GeneralSetting) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
type WorkspaceSetting_DefaultVisibility struct {
|
||||
// The default visibility of shortcuts and collections.
|
||||
DefaultVisibility Visibility `protobuf:"varint,9,opt,name=default_visibility,json=defaultVisibility,proto3,enum=slash.store.Visibility,oneof"`
|
||||
func (*WorkspaceSetting_GeneralSetting) ProtoMessage() {}
|
||||
|
||||
func (x *WorkspaceSetting_GeneralSetting) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_store_workspace_setting_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)
|
||||
}
|
||||
|
||||
type WorkspaceSetting_FaviconProvider struct {
|
||||
// The url of custom favicon provider. e.g. https://github.com/yourselfhosted/favicons
|
||||
FaviconProvider string `protobuf:"bytes,10,opt,name=favicon_provider,json=faviconProvider,proto3,oneof"`
|
||||
// Deprecated: Use WorkspaceSetting_GeneralSetting.ProtoReflect.Descriptor instead.
|
||||
func (*WorkspaceSetting_GeneralSetting) Descriptor() ([]byte, []int) {
|
||||
return file_store_workspace_setting_proto_rawDescGZIP(), []int{0, 0}
|
||||
}
|
||||
|
||||
func (*WorkspaceSetting_LicenseKey) isWorkspaceSetting_Value() {}
|
||||
func (x *WorkspaceSetting_GeneralSetting) GetSecretSession() string {
|
||||
if x != nil {
|
||||
return x.SecretSession
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (*WorkspaceSetting_SecretSession) isWorkspaceSetting_Value() {}
|
||||
func (x *WorkspaceSetting_GeneralSetting) GetLicenseKey() string {
|
||||
if x != nil {
|
||||
return x.LicenseKey
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (*WorkspaceSetting_EnableSignup) isWorkspaceSetting_Value() {}
|
||||
func (x *WorkspaceSetting_GeneralSetting) GetCustomStyle() string {
|
||||
if x != nil {
|
||||
return x.CustomStyle
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (*WorkspaceSetting_CustomStyle) isWorkspaceSetting_Value() {}
|
||||
type WorkspaceSetting_ShortcutRelatedSetting struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
func (*WorkspaceSetting_InstanceUrl) isWorkspaceSetting_Value() {}
|
||||
DefaultVisibility Visibility `protobuf:"varint,1,opt,name=default_visibility,json=defaultVisibility,proto3,enum=slash.store.Visibility" json:"default_visibility,omitempty"`
|
||||
}
|
||||
|
||||
func (*WorkspaceSetting_DefaultVisibility) isWorkspaceSetting_Value() {}
|
||||
func (x *WorkspaceSetting_ShortcutRelatedSetting) Reset() {
|
||||
*x = WorkspaceSetting_ShortcutRelatedSetting{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_store_workspace_setting_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (*WorkspaceSetting_FaviconProvider) isWorkspaceSetting_Value() {}
|
||||
func (x *WorkspaceSetting_ShortcutRelatedSetting) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*WorkspaceSetting_ShortcutRelatedSetting) ProtoMessage() {}
|
||||
|
||||
func (x *WorkspaceSetting_ShortcutRelatedSetting) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_store_workspace_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 WorkspaceSetting_ShortcutRelatedSetting.ProtoReflect.Descriptor instead.
|
||||
func (*WorkspaceSetting_ShortcutRelatedSetting) Descriptor() ([]byte, []int) {
|
||||
return file_store_workspace_setting_proto_rawDescGZIP(), []int{0, 1}
|
||||
}
|
||||
|
||||
func (x *WorkspaceSetting_ShortcutRelatedSetting) GetDefaultVisibility() Visibility {
|
||||
if x != nil {
|
||||
return x.DefaultVisibility
|
||||
}
|
||||
return Visibility_VISIBILITY_UNSPECIFIED
|
||||
}
|
||||
|
||||
var File_store_workspace_setting_proto protoreflect.FileDescriptor
|
||||
|
||||
@ -264,51 +302,55 @@ var file_store_workspace_setting_proto_rawDesc = []byte{
|
||||
0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12,
|
||||
0x0b, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x1a, 0x12, 0x73, 0x74,
|
||||
0x6f, 0x72, 0x65, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x22, 0x83, 0x03, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65,
|
||||
0x22, 0xed, 0x03, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65,
|
||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x0e, 0x32, 0x20, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65,
|
||||
0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
||||
0x67, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0b, 0x6c, 0x69, 0x63,
|
||||
0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00,
|
||||
0x52, 0x0a, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x0e,
|
||||
0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03,
|
||||
0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65,
|
||||
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f,
|
||||
0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0c,
|
||||
0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x12, 0x23, 0x0a, 0x0c,
|
||||
0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01,
|
||||
0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x53, 0x74, 0x79, 0x6c,
|
||||
0x65, 0x12, 0x23, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x75, 0x72,
|
||||
0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61,
|
||||
0x6e, 0x63, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x48, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
|
||||
0x74, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01,
|
||||
0x28, 0x0e, 0x32, 0x17, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65,
|
||||
0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x11, 0x64,
|
||||
0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
|
||||
0x12, 0x2b, 0x0a, 0x10, 0x66, 0x61, 0x76, 0x69, 0x63, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x76,
|
||||
0x69, 0x64, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x66, 0x61,
|
||||
0x76, 0x69, 0x63, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x42, 0x07, 0x0a,
|
||||
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0xc4, 0x02, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x73,
|
||||
0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x12, 0x25,
|
||||
0x0a, 0x21, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54,
|
||||
0x49, 0x4e, 0x47, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
|
||||
0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41,
|
||||
0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x49, 0x43, 0x45, 0x4e,
|
||||
0x53, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x57, 0x4f, 0x52, 0x4b,
|
||||
0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x45,
|
||||
0x43, 0x52, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x23,
|
||||
0x0a, 0x1f, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x41, 0x50, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54,
|
||||
0x49, 0x4e, 0x47, 0x5f, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x55,
|
||||
0x50, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45,
|
||||
0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f,
|
||||
0x53, 0x54, 0x59, 0x4c, 0x45, 0x10, 0x04, 0x12, 0x22, 0x0a, 0x1e, 0x57, 0x4f, 0x52, 0x4b, 0x53,
|
||||
0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x49, 0x4e, 0x53,
|
||||
0x54, 0x41, 0x4e, 0x43, 0x45, 0x5f, 0x55, 0x52, 0x4c, 0x10, 0x07, 0x12, 0x28, 0x0a, 0x24, 0x57,
|
||||
0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47,
|
||||
0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c,
|
||||
0x49, 0x54, 0x59, 0x10, 0x08, 0x12, 0x26, 0x0a, 0x22, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41,
|
||||
0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x56, 0x49, 0x43,
|
||||
0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x10, 0x09, 0x42, 0xa6, 0x01,
|
||||
0x67, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x61, 0x77,
|
||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x61, 0x77, 0x12, 0x48, 0x0a, 0x07, 0x67,
|
||||
0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73,
|
||||
0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73,
|
||||
0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x6e, 0x65,
|
||||
0x72, 0x61, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x07, 0x67, 0x65,
|
||||
0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x61, 0x0a, 0x10, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75,
|
||||
0x74, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x34, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x57, 0x6f,
|
||||
0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53,
|
||||
0x68, 0x6f, 0x72, 0x74, 0x63, 0x75, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65,
|
||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75,
|
||||
0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x1a, 0x7b, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65,
|
||||
0x72, 0x61, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65,
|
||||
0x63, 0x72, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6b, 0x65, 0x79,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4b,
|
||||
0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x73, 0x74, 0x79,
|
||||
0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d,
|
||||
0x53, 0x74, 0x79, 0x6c, 0x65, 0x1a, 0x60, 0x0a, 0x16, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x63, 0x75,
|
||||
0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12,
|
||||
0x46, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x69, 0x73, 0x69, 0x62,
|
||||
0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x73, 0x6c,
|
||||
0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69,
|
||||
0x6c, 0x69, 0x74, 0x79, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x69, 0x73,
|
||||
0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x2a, 0x9a, 0x02, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65,
|
||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x21, 0x57, 0x4f, 0x52, 0x4b,
|
||||
0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4b, 0x45,
|
||||
0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
|
||||
0x1d, 0x0a, 0x19, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54,
|
||||
0x54, 0x49, 0x4e, 0x47, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x26,
|
||||
0x0a, 0x22, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54,
|
||||
0x49, 0x4e, 0x47, 0x5f, 0x53, 0x48, 0x4f, 0x52, 0x54, 0x43, 0x55, 0x54, 0x5f, 0x52, 0x45, 0x4c,
|
||||
0x41, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x21, 0x0a, 0x1d, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50,
|
||||
0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x4c, 0x49, 0x43, 0x45,
|
||||
0x4e, 0x53, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x10, 0x03, 0x12, 0x24, 0x0a, 0x20, 0x57, 0x4f, 0x52,
|
||||
0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x53,
|
||||
0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12,
|
||||
0x22, 0x0a, 0x1e, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x54,
|
||||
0x54, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x53, 0x54, 0x59, 0x4c,
|
||||
0x45, 0x10, 0x05, 0x12, 0x28, 0x0a, 0x24, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45,
|
||||
0x5f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54,
|
||||
0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x10, 0x06, 0x42, 0xa6, 0x01,
|
||||
0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x73, 0x74, 0x6f, 0x72,
|
||||
0x65, 0x42, 0x15, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74,
|
||||
0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68,
|
||||
@ -335,20 +377,24 @@ func file_store_workspace_setting_proto_rawDescGZIP() []byte {
|
||||
}
|
||||
|
||||
var file_store_workspace_setting_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
||||
var file_store_workspace_setting_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||
var file_store_workspace_setting_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
|
||||
var file_store_workspace_setting_proto_goTypes = []any{
|
||||
(WorkspaceSettingKey)(0), // 0: slash.store.WorkspaceSettingKey
|
||||
(*WorkspaceSetting)(nil), // 1: slash.store.WorkspaceSetting
|
||||
(Visibility)(0), // 2: slash.store.Visibility
|
||||
(WorkspaceSettingKey)(0), // 0: slash.store.WorkspaceSettingKey
|
||||
(*WorkspaceSetting)(nil), // 1: slash.store.WorkspaceSetting
|
||||
(*WorkspaceSetting_GeneralSetting)(nil), // 2: slash.store.WorkspaceSetting.GeneralSetting
|
||||
(*WorkspaceSetting_ShortcutRelatedSetting)(nil), // 3: slash.store.WorkspaceSetting.ShortcutRelatedSetting
|
||||
(Visibility)(0), // 4: slash.store.Visibility
|
||||
}
|
||||
var file_store_workspace_setting_proto_depIdxs = []int32{
|
||||
0, // 0: slash.store.WorkspaceSetting.key:type_name -> slash.store.WorkspaceSettingKey
|
||||
2, // 1: slash.store.WorkspaceSetting.default_visibility:type_name -> slash.store.Visibility
|
||||
2, // [2:2] is the sub-list for method output_type
|
||||
2, // [2:2] is the sub-list for method input_type
|
||||
2, // [2:2] is the sub-list for extension type_name
|
||||
2, // [2:2] is the sub-list for extension extendee
|
||||
0, // [0:2] is the sub-list for field type_name
|
||||
2, // 1: slash.store.WorkspaceSetting.general:type_name -> slash.store.WorkspaceSetting.GeneralSetting
|
||||
3, // 2: slash.store.WorkspaceSetting.shortcut_related:type_name -> slash.store.WorkspaceSetting.ShortcutRelatedSetting
|
||||
4, // 3: slash.store.WorkspaceSetting.ShortcutRelatedSetting.default_visibility:type_name -> slash.store.Visibility
|
||||
4, // [4:4] is the sub-list for method output_type
|
||||
4, // [4:4] is the sub-list for method input_type
|
||||
4, // [4:4] is the sub-list for extension 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_workspace_setting_proto_init() }
|
||||
@ -370,15 +416,34 @@ func file_store_workspace_setting_proto_init() {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_store_workspace_setting_proto_msgTypes[1].Exporter = func(v any, i int) any {
|
||||
switch v := v.(*WorkspaceSetting_GeneralSetting); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_store_workspace_setting_proto_msgTypes[2].Exporter = func(v any, i int) any {
|
||||
switch v := v.(*WorkspaceSetting_ShortcutRelatedSetting); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
file_store_workspace_setting_proto_msgTypes[0].OneofWrappers = []any{
|
||||
(*WorkspaceSetting_LicenseKey)(nil),
|
||||
(*WorkspaceSetting_SecretSession)(nil),
|
||||
(*WorkspaceSetting_EnableSignup)(nil),
|
||||
(*WorkspaceSetting_CustomStyle)(nil),
|
||||
(*WorkspaceSetting_InstanceUrl)(nil),
|
||||
(*WorkspaceSetting_DefaultVisibility)(nil),
|
||||
(*WorkspaceSetting_FaviconProvider)(nil),
|
||||
(*WorkspaceSetting_General)(nil),
|
||||
(*WorkspaceSetting_ShortcutRelated)(nil),
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
@ -386,7 +451,7 @@ func file_store_workspace_setting_proto_init() {
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_store_workspace_setting_proto_rawDesc,
|
||||
NumEnums: 1,
|
||||
NumMessages: 1,
|
||||
NumMessages: 3,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
|
@ -10,32 +10,30 @@ message UserSetting {
|
||||
UserSettingKey key = 2;
|
||||
|
||||
oneof value {
|
||||
UserSettingGeneral general = 3;
|
||||
GeneralSetting general = 3;
|
||||
AccessTokensSetting access_tokens = 4;
|
||||
}
|
||||
|
||||
UserSettingAccessTokens access_tokens = 4;
|
||||
message GeneralSetting {
|
||||
string locale = 1;
|
||||
string color_theme = 2;
|
||||
}
|
||||
|
||||
message AccessTokensSetting {
|
||||
message AccessToken {
|
||||
// The access token is a JWT token, including expiration time, issuer, etc.
|
||||
string access_token = 1;
|
||||
// A description for the access token.
|
||||
string description = 2;
|
||||
}
|
||||
repeated AccessToken access_tokens = 1; // Nested repeated field
|
||||
}
|
||||
}
|
||||
|
||||
enum UserSettingKey {
|
||||
USER_SETTING_KEY_UNSPECIFIED = 0;
|
||||
// General settings for the user.
|
||||
GENERAL = 1;
|
||||
// Access tokens for the user.
|
||||
ACCESS_TOKENS = 2;
|
||||
}
|
||||
|
||||
message UserSettingGeneral {
|
||||
string locale = 1;
|
||||
string color_theme = 2;
|
||||
}
|
||||
|
||||
message UserSettingAccessTokens {
|
||||
message AccessToken {
|
||||
// The access token is a JWT token.
|
||||
// Including expiration time, issuer, etc.
|
||||
string access_token = 1;
|
||||
// A description for the access token.
|
||||
string description = 2;
|
||||
}
|
||||
repeated AccessToken access_tokens = 1;
|
||||
// User general settings.
|
||||
USER_SETTING_GENERAL = 1;
|
||||
// User access tokens.
|
||||
USER_SETTING_ACCESS_TOKENS = 2;
|
||||
}
|
||||
|
@ -8,39 +8,38 @@ option go_package = "gen/store";
|
||||
|
||||
message WorkspaceSetting {
|
||||
WorkspaceSettingKey key = 1;
|
||||
string raw = 4;
|
||||
|
||||
oneof value {
|
||||
// The license key of workspace.
|
||||
GeneralSetting general = 2;
|
||||
ShortcutRelatedSetting shortcut_related = 3;
|
||||
}
|
||||
|
||||
message GeneralSetting {
|
||||
string secret_session = 1;
|
||||
string license_key = 2;
|
||||
// The secret session key used to encrypt session data.
|
||||
string secret_session = 3;
|
||||
// Whether to enable other users to sign up.
|
||||
bool enable_signup = 4;
|
||||
// The custom style.
|
||||
string custom_style = 5;
|
||||
// The instance URL of workspace.
|
||||
string instance_url = 8;
|
||||
// The default visibility of shortcuts and collections.
|
||||
Visibility default_visibility = 9;
|
||||
// The url of custom favicon provider. e.g. https://github.com/yourselfhosted/favicons
|
||||
string favicon_provider = 10;
|
||||
string custom_style = 3;
|
||||
}
|
||||
|
||||
message ShortcutRelatedSetting {
|
||||
Visibility default_visibility = 1;
|
||||
}
|
||||
}
|
||||
|
||||
enum WorkspaceSettingKey {
|
||||
WORKSPACE_SETTING_KEY_UNSPECIFIED = 0;
|
||||
// Workspace general settings.
|
||||
WORKSPACE_SETTING_GENERAL = 1;
|
||||
// Workspace shortcut-related settings.
|
||||
WORKSPACE_SETTING_SHORTCUT_RELATED = 2;
|
||||
|
||||
// TODO: remove the following keys.
|
||||
// The license key.
|
||||
WORKSPACE_SETTING_LICENSE_KEY = 1;
|
||||
WORKSPACE_SETTING_LICENSE_KEY = 3;
|
||||
// The secret session key used to encrypt session data.
|
||||
WORKSPACE_SETTING_SECRET_SESSION = 2;
|
||||
// Whether to enable other users to sign up.
|
||||
WORKSAPCE_SETTING_ENABLE_SIGNUP = 3;
|
||||
WORKSPACE_SETTING_SECRET_SESSION = 4;
|
||||
// The custom style.
|
||||
WORKSPACE_SETTING_CUSTOM_STYLE = 4;
|
||||
// The instance URL.
|
||||
WORKSPACE_SETTING_INSTANCE_URL = 7;
|
||||
WORKSPACE_SETTING_CUSTOM_STYLE = 5;
|
||||
// The default visibility of shortcuts and collections.
|
||||
WORKSPACE_SETTING_DEFAULT_VISIBILITY = 8;
|
||||
// The url of custom favicon provider.
|
||||
WORKSPACE_SETTING_FAVICON_PROVIDER = 9;
|
||||
WORKSPACE_SETTING_DEFAULT_VISIBILITY = 6;
|
||||
}
|
||||
|
@ -8,28 +8,28 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/viper"
|
||||
|
||||
"github.com/yourselfhosted/slash/server/version"
|
||||
)
|
||||
|
||||
// Profile is the configuration to start main server.
|
||||
type Profile struct {
|
||||
// Mode can be "prod" or "dev"
|
||||
Mode string `json:"mode"`
|
||||
// Port is the binding port for server
|
||||
Port int `json:"-"`
|
||||
// Data is the data directory
|
||||
Data string `json:"-"`
|
||||
// DSN points to where slash stores its own data
|
||||
DSN string `json:"-"`
|
||||
// Driver is the database driver
|
||||
// sqlite, mysql
|
||||
Driver string `json:"-"`
|
||||
// Version is the current version of server
|
||||
Version string `json:"version"`
|
||||
// Metric indicate the metric collection is enabled or not
|
||||
Metric bool `json:"-"`
|
||||
// Mode can be "prod" or "dev".
|
||||
Mode string
|
||||
// Port is the binding port for server.
|
||||
Port int
|
||||
// Data is the data directory.
|
||||
Data string
|
||||
// DSN points to where slash stores its own data.
|
||||
DSN string
|
||||
// Driver is the database driver. Supported drivers are sqlite, postgres.
|
||||
Driver string
|
||||
// Version is the current version of server.
|
||||
Version string
|
||||
// Metric indicate the metric collection is enabled or not.
|
||||
Metric bool
|
||||
// Pubic is the flag whether the instance is public for others.
|
||||
Public bool
|
||||
// InstanceURL is the URL of the instance.
|
||||
InstanceURL string
|
||||
}
|
||||
|
||||
func (p *Profile) IsDev() bool {
|
||||
@ -57,47 +57,36 @@ func checkDataDir(dataDir string) (string, error) {
|
||||
return dataDir, nil
|
||||
}
|
||||
|
||||
// GetProfile will return a profile for dev or prod.
|
||||
func GetProfile() (*Profile, error) {
|
||||
profile := Profile{}
|
||||
err := viper.Unmarshal(&profile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
func (p *Profile) Validate() error {
|
||||
if p.Mode != "demo" && p.Mode != "dev" && p.Mode != "prod" {
|
||||
p.Mode = "demo"
|
||||
}
|
||||
|
||||
if profile.Mode != "demo" && profile.Mode != "dev" && profile.Mode != "prod" {
|
||||
profile.Mode = "demo"
|
||||
}
|
||||
|
||||
if profile.Mode == "prod" && profile.Data == "" {
|
||||
if p.Mode == "prod" && p.Data == "" {
|
||||
if runtime.GOOS == "windows" {
|
||||
profile.Data = filepath.Join(os.Getenv("ProgramData"), "slash")
|
||||
|
||||
if _, err := os.Stat(profile.Data); os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(profile.Data, 0770); err != nil {
|
||||
fmt.Printf("Failed to create data directory: %s, err: %+v\n", profile.Data, err)
|
||||
return nil, err
|
||||
p.Data = filepath.Join(os.Getenv("ProgramData"), "slash")
|
||||
if _, err := os.Stat(p.Data); os.IsNotExist(err) {
|
||||
if err := os.MkdirAll(p.Data, 0770); err != nil {
|
||||
fmt.Printf("Failed to create data directory: %s, err: %+v\n", p.Data, err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
profile.Data = "/var/opt/slash"
|
||||
p.Data = "/var/opt/slash"
|
||||
}
|
||||
}
|
||||
|
||||
if profile.Driver == "sqlite" {
|
||||
dataDir, err := checkDataDir(profile.Data)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to check dsn: %s, err: %+v\n", dataDir, err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
profile.Data = dataDir
|
||||
if profile.DSN == "" {
|
||||
dbFile := fmt.Sprintf("slash_%s.db", profile.Mode)
|
||||
profile.DSN = filepath.Join(dataDir, dbFile)
|
||||
}
|
||||
dataDir, err := checkDataDir(p.Data)
|
||||
if err != nil {
|
||||
fmt.Printf("Failed to check dsn: %s, err: %+v\n", dataDir, err)
|
||||
return err
|
||||
}
|
||||
profile.Version = version.GetCurrentVersion(profile.Mode)
|
||||
|
||||
return &profile, nil
|
||||
p.Data = dataDir
|
||||
if p.Driver == "sqlite" && p.DSN == "" {
|
||||
dbFile := fmt.Sprintf("slash_%s.db", p.Mode)
|
||||
p.DSN = filepath.Join(dataDir, dbFile)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ func audienceContains(audience jwt.ClaimStrings, token string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func validateAccessToken(accessTokenString string, userAccessTokens []*storepb.UserSettingAccessTokens_AccessToken) bool {
|
||||
func validateAccessToken(accessTokenString string, userAccessTokens []*storepb.UserSetting_AccessTokensSetting_AccessToken) bool {
|
||||
for _, userAccessToken := range userAccessTokens {
|
||||
if accessTokenString == userAccessToken.AccessToken {
|
||||
return true
|
||||
|
@ -12,7 +12,6 @@ import (
|
||||
"google.golang.org/grpc/status"
|
||||
|
||||
v1pb "github.com/yourselfhosted/slash/proto/gen/api/v1"
|
||||
storepb "github.com/yourselfhosted/slash/proto/gen/store"
|
||||
"github.com/yourselfhosted/slash/server/metric"
|
||||
"github.com/yourselfhosted/slash/server/service/license"
|
||||
"github.com/yourselfhosted/slash/store"
|
||||
@ -70,13 +69,7 @@ func (s *APIV1Service) SignIn(ctx context.Context, request *v1pb.SignInRequest)
|
||||
}
|
||||
|
||||
func (s *APIV1Service) SignUp(ctx context.Context, request *v1pb.SignUpRequest) (*v1pb.SignUpResponse, error) {
|
||||
enableSignUpSetting, err := s.Store.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSAPCE_SETTING_ENABLE_SIGNUP,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, fmt.Sprintf("failed to get workspace setting, err: %s", err))
|
||||
}
|
||||
if enableSignUpSetting != nil && !enableSignUpSetting.GetEnableSignup() {
|
||||
if !s.Profile.Public {
|
||||
return nil, status.Errorf(codes.PermissionDenied, "sign up is not allowed")
|
||||
}
|
||||
|
||||
|
@ -251,7 +251,7 @@ func (s *APIV1Service) DeleteUserAccessToken(ctx context.Context, request *v1pb.
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to list access tokens: %v", err)
|
||||
}
|
||||
updatedUserAccessTokens := []*storepb.UserSettingAccessTokens_AccessToken{}
|
||||
updatedUserAccessTokens := []*storepb.UserSetting_AccessTokensSetting_AccessToken{}
|
||||
for _, userAccessToken := range userAccessTokens {
|
||||
if userAccessToken.AccessToken == request.AccessToken {
|
||||
continue
|
||||
@ -260,9 +260,9 @@ func (s *APIV1Service) DeleteUserAccessToken(ctx context.Context, request *v1pb.
|
||||
}
|
||||
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||
UserId: user.ID,
|
||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||
Key: storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS,
|
||||
Value: &storepb.UserSetting_AccessTokens{
|
||||
AccessTokens: &storepb.UserSettingAccessTokens{
|
||||
AccessTokens: &storepb.UserSetting_AccessTokensSetting{
|
||||
AccessTokens: updatedUserAccessTokens,
|
||||
},
|
||||
},
|
||||
@ -278,16 +278,16 @@ func (s *APIV1Service) UpsertAccessTokenToStore(ctx context.Context, user *store
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to get user access tokens")
|
||||
}
|
||||
userAccessToken := storepb.UserSettingAccessTokens_AccessToken{
|
||||
userAccessToken := storepb.UserSetting_AccessTokensSetting_AccessToken{
|
||||
AccessToken: accessToken,
|
||||
Description: description,
|
||||
}
|
||||
userAccessTokens = append(userAccessTokens, &userAccessToken)
|
||||
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||
UserId: user.ID,
|
||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||
Key: storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS,
|
||||
Value: &storepb.UserSetting_AccessTokens{
|
||||
AccessTokens: &storepb.UserSettingAccessTokens{
|
||||
AccessTokens: &storepb.UserSetting_AccessTokensSetting{
|
||||
AccessTokens: userAccessTokens,
|
||||
},
|
||||
},
|
||||
|
@ -35,9 +35,9 @@ func (s *APIV1Service) UpdateUserSetting(ctx context.Context, request *v1pb.Upda
|
||||
if path == "general" {
|
||||
if _, err := s.Store.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||
UserId: user.ID,
|
||||
Key: storepb.UserSettingKey_GENERAL,
|
||||
Key: storepb.UserSettingKey_USER_SETTING_GENERAL,
|
||||
Value: &storepb.UserSetting_General{
|
||||
General: &storepb.UserSettingGeneral{
|
||||
General: &storepb.UserSetting_GeneralSetting{
|
||||
Locale: request.UserSetting.General.Locale,
|
||||
ColorTheme: request.UserSetting.General.ColorTheme,
|
||||
},
|
||||
@ -68,15 +68,15 @@ func getUserSetting(ctx context.Context, s *store.Store, userID int32) (*v1pb.Us
|
||||
}
|
||||
|
||||
userSetting := &v1pb.UserSetting{
|
||||
Id: userID,
|
||||
General: &v1pb.UserSettingGeneral{
|
||||
UserId: userID,
|
||||
General: &v1pb.UserSetting_GeneralSetting{
|
||||
Locale: "EN",
|
||||
ColorTheme: "SYSTEM",
|
||||
},
|
||||
}
|
||||
for _, setting := range userSettings {
|
||||
if setting.Key == storepb.UserSettingKey_GENERAL {
|
||||
userSetting.General = &v1pb.UserSettingGeneral{
|
||||
if setting.Key == storepb.UserSettingKey_USER_SETTING_GENERAL {
|
||||
userSetting.General = &v1pb.UserSetting_GeneralSetting{
|
||||
Locale: setting.GetGeneral().Locale,
|
||||
ColorTheme: setting.GetGeneral().ColorTheme,
|
||||
}
|
||||
|
@ -14,10 +14,11 @@ import (
|
||||
)
|
||||
|
||||
func (s *APIV1Service) GetWorkspaceProfile(ctx context.Context, _ *v1pb.GetWorkspaceProfileRequest) (*v1pb.GetWorkspaceProfileResponse, error) {
|
||||
profile := &v1pb.WorkspaceProfile{
|
||||
Mode: s.Profile.Mode,
|
||||
Version: s.Profile.Version,
|
||||
Plan: v1pb.PlanType_FREE,
|
||||
workspaceProfile := &v1pb.WorkspaceProfile{
|
||||
Mode: s.Profile.Mode,
|
||||
Version: s.Profile.Version,
|
||||
Plan: v1pb.PlanType_FREE,
|
||||
EnableSignup: s.Profile.Public,
|
||||
}
|
||||
|
||||
// Load subscription plan from license service.
|
||||
@ -25,66 +26,34 @@ func (s *APIV1Service) GetWorkspaceProfile(ctx context.Context, _ *v1pb.GetWorks
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to get subscription: %v", err)
|
||||
}
|
||||
profile.Plan = subscription.Plan
|
||||
workspaceProfile.Plan = subscription.Plan
|
||||
|
||||
workspaceSetting, err := s.GetWorkspaceSetting(ctx, &v1pb.GetWorkspaceSettingRequest{})
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to get workspace setting: %v", err)
|
||||
}
|
||||
if workspaceSetting != nil {
|
||||
setting := workspaceSetting.GetSetting()
|
||||
profile.EnableSignup = setting.GetEnableSignup()
|
||||
profile.CustomStyle = setting.GetCustomStyle()
|
||||
profile.FaviconProvider = setting.GetFaviconProvider()
|
||||
}
|
||||
owner, err := s.GetInstanceOwner(ctx)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to get instance owner: %v", err)
|
||||
}
|
||||
if owner != nil {
|
||||
profile.Owner = fmt.Sprintf("%s%d", UserNamePrefix, owner.Id)
|
||||
workspaceProfile.Owner = fmt.Sprintf("%s%d", UserNamePrefix, owner.Id)
|
||||
}
|
||||
|
||||
return &v1pb.GetWorkspaceProfileResponse{
|
||||
Profile: profile,
|
||||
Profile: workspaceProfile,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *APIV1Service) GetWorkspaceSetting(ctx context.Context, _ *v1pb.GetWorkspaceSettingRequest) (*v1pb.GetWorkspaceSettingResponse, error) {
|
||||
isAdmin := false
|
||||
userID, ok := ctx.Value(userIDContextKey).(int32)
|
||||
if ok {
|
||||
user, err := s.Store.GetUser(ctx, &store.FindUser{ID: &userID})
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to get user: %v", err)
|
||||
}
|
||||
if user.Role == store.RoleAdmin {
|
||||
isAdmin = true
|
||||
}
|
||||
}
|
||||
workspaceSettings, err := s.Store.ListWorkspaceSettings(ctx, &store.FindWorkspaceSetting{})
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to list workspace settings: %v", err)
|
||||
}
|
||||
workspaceSetting := &v1pb.WorkspaceSetting{
|
||||
EnableSignup: true,
|
||||
}
|
||||
workspaceSetting := &v1pb.WorkspaceSetting{}
|
||||
for _, v := range workspaceSettings {
|
||||
if v.Key == storepb.WorkspaceSettingKey_WORKSAPCE_SETTING_ENABLE_SIGNUP {
|
||||
workspaceSetting.EnableSignup = v.GetEnableSignup()
|
||||
} else if v.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_INSTANCE_URL {
|
||||
workspaceSetting.InstanceUrl = v.GetInstanceUrl()
|
||||
} else if v.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE {
|
||||
workspaceSetting.CustomStyle = v.GetCustomStyle()
|
||||
} else if v.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY {
|
||||
workspaceSetting.DefaultVisibility = v1pb.Visibility(v.GetDefaultVisibility())
|
||||
} else if v.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_FAVICON_PROVIDER {
|
||||
workspaceSetting.FaviconProvider = v.GetFaviconProvider()
|
||||
} else if isAdmin {
|
||||
// For some settings, only admin can get the value.
|
||||
if v.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY {
|
||||
workspaceSetting.LicenseKey = v.GetLicenseKey()
|
||||
}
|
||||
if v.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL {
|
||||
generalSetting := v.GetGeneral()
|
||||
workspaceSetting.CustomStyle = generalSetting.GetCustomStyle()
|
||||
} else if v.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED {
|
||||
shortcutRelatedSetting := v.GetShortcutRelated()
|
||||
workspaceSetting.DefaultVisibility = v1pb.Visibility(shortcutRelatedSetting.GetDefaultVisibility())
|
||||
}
|
||||
}
|
||||
return &v1pb.GetWorkspaceSettingResponse{
|
||||
@ -98,56 +67,50 @@ func (s *APIV1Service) UpdateWorkspaceSetting(ctx context.Context, request *v1pb
|
||||
}
|
||||
|
||||
for _, path := range request.UpdateMask.Paths {
|
||||
if path == "license_key" {
|
||||
if _, err := s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY,
|
||||
Value: &storepb.WorkspaceSetting_LicenseKey{
|
||||
LicenseKey: request.Setting.LicenseKey,
|
||||
},
|
||||
}); err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to update workspace setting: %v", err)
|
||||
if path == "custom_style" {
|
||||
generalSetting, err := s.Store.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to get workspace setting: %v", err)
|
||||
}
|
||||
} else if path == "enable_signup" {
|
||||
if _, err := s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSAPCE_SETTING_ENABLE_SIGNUP,
|
||||
Value: &storepb.WorkspaceSetting_EnableSignup{
|
||||
EnableSignup: request.Setting.EnableSignup,
|
||||
},
|
||||
}); err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to update workspace setting: %v", err)
|
||||
if generalSetting == nil {
|
||||
generalSetting = &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
Value: &storepb.WorkspaceSetting_General{
|
||||
General: &storepb.WorkspaceSetting_GeneralSetting{},
|
||||
},
|
||||
}
|
||||
}
|
||||
} else if path == "instance_url" {
|
||||
generalSetting.GetGeneral().CustomStyle = request.Setting.CustomStyle
|
||||
if _, err := s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_INSTANCE_URL,
|
||||
Value: &storepb.WorkspaceSetting_InstanceUrl{
|
||||
InstanceUrl: request.Setting.InstanceUrl,
|
||||
},
|
||||
}); err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to update workspace setting: %v", err)
|
||||
}
|
||||
} else if path == "custom_style" {
|
||||
if _, err := s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE,
|
||||
Value: &storepb.WorkspaceSetting_CustomStyle{
|
||||
CustomStyle: request.Setting.CustomStyle,
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
Value: &storepb.WorkspaceSetting_General{
|
||||
General: generalSetting.GetGeneral(),
|
||||
},
|
||||
}); err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to update workspace setting: %v", err)
|
||||
}
|
||||
} else if path == "default_visibility" {
|
||||
if _, err := s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY,
|
||||
Value: &storepb.WorkspaceSetting_DefaultVisibility{
|
||||
DefaultVisibility: storepb.Visibility(request.Setting.DefaultVisibility),
|
||||
},
|
||||
}); err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to update workspace setting: %v", err)
|
||||
shortcutRelatedSetting, err := s.Store.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to get workspace setting: %v", err)
|
||||
}
|
||||
} else if path == "favicon_provider" {
|
||||
if shortcutRelatedSetting == nil {
|
||||
shortcutRelatedSetting = &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED,
|
||||
Value: &storepb.WorkspaceSetting_ShortcutRelated{
|
||||
ShortcutRelated: &storepb.WorkspaceSetting_ShortcutRelatedSetting{},
|
||||
},
|
||||
}
|
||||
}
|
||||
shortcutRelatedSetting.GetShortcutRelated().DefaultVisibility = storepb.Visibility(request.Setting.DefaultVisibility)
|
||||
if _, err := s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_FAVICON_PROVIDER,
|
||||
Value: &storepb.WorkspaceSetting_FaviconProvider{
|
||||
FaviconProvider: request.Setting.FaviconProvider,
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED,
|
||||
Value: &storepb.WorkspaceSetting_ShortcutRelated{
|
||||
ShortcutRelated: shortcutRelatedSetting.GetShortcutRelated(),
|
||||
},
|
||||
}); err != nil {
|
||||
return nil, status.Errorf(codes.Internal, "failed to update workspace setting: %v", err)
|
||||
|
@ -118,13 +118,7 @@ func (s *FrontendService) registerRoutes(e *echo.Echo) {
|
||||
}
|
||||
|
||||
func (s *FrontendService) registerFileRoutes(ctx context.Context, e *echo.Echo) {
|
||||
instanceURLSetting, err := s.Store.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_INSTANCE_URL,
|
||||
})
|
||||
if err != nil || instanceURLSetting == nil {
|
||||
return
|
||||
}
|
||||
instanceURL := instanceURLSetting.GetInstanceUrl()
|
||||
instanceURL := s.Profile.InstanceURL
|
||||
if instanceURL == "" {
|
||||
return
|
||||
}
|
||||
|
@ -120,23 +120,25 @@ func (s *Server) GetEcho() *echo.Echo {
|
||||
}
|
||||
|
||||
func (s *Server) getSecretSessionName(ctx context.Context) (string, error) {
|
||||
secretSessionSetting, err := s.Store.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION,
|
||||
workspaceSettingGeneral, err := s.Store.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if secretSessionSetting == nil {
|
||||
if workspaceSettingGeneral == nil || workspaceSettingGeneral.GetGeneral() == nil {
|
||||
tempSecret := uuid.New().String()
|
||||
secretSessionSetting, err = s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION,
|
||||
Value: &storepb.WorkspaceSetting_SecretSession{
|
||||
SecretSession: tempSecret,
|
||||
workspaceSettingGeneral, err = s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
Value: &storepb.WorkspaceSetting_General{
|
||||
General: &storepb.WorkspaceSetting_GeneralSetting{
|
||||
SecretSession: tempSecret,
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
return secretSessionSetting.GetSecretSession(), nil
|
||||
return workspaceSettingGeneral.GetGeneral().SecretSession, nil
|
||||
}
|
||||
|
@ -38,8 +38,8 @@ func NewLicenseService(profile *profile.Profile, store *store.Store) *LicenseSer
|
||||
}
|
||||
|
||||
func (s *LicenseService) LoadSubscription(ctx context.Context) (*v1pb.Subscription, error) {
|
||||
workspaceSetting, err := s.Store.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY,
|
||||
workspaceSettingGeneral, err := s.Store.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to get workspace setting")
|
||||
@ -48,8 +48,8 @@ func (s *LicenseService) LoadSubscription(ctx context.Context) (*v1pb.Subscripti
|
||||
Plan: v1pb.PlanType_FREE,
|
||||
}
|
||||
licenseKey := ""
|
||||
if workspaceSetting != nil {
|
||||
licenseKey = workspaceSetting.GetLicenseKey()
|
||||
if workspaceSettingGeneral != nil {
|
||||
licenseKey = workspaceSettingGeneral.GetGeneral().LicenseKey
|
||||
}
|
||||
if licenseKey == "" {
|
||||
return subscription, nil
|
||||
@ -79,12 +79,25 @@ func (s *LicenseService) UpdateSubscription(ctx context.Context, licenseKey stri
|
||||
if result == nil {
|
||||
return nil, errors.New("invalid license key")
|
||||
}
|
||||
_, err = s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY,
|
||||
Value: &storepb.WorkspaceSetting_LicenseKey{
|
||||
LicenseKey: licenseKey,
|
||||
},
|
||||
workspaceSettingGeneral, err := s.Store.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to get workspace setting")
|
||||
}
|
||||
if workspaceSettingGeneral == nil || workspaceSettingGeneral.GetGeneral() == nil {
|
||||
workspaceSettingGeneral = &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
Value: &storepb.WorkspaceSetting_General{
|
||||
General: &storepb.WorkspaceSetting_GeneralSetting{
|
||||
LicenseKey: licenseKey,
|
||||
},
|
||||
},
|
||||
}
|
||||
} else {
|
||||
workspaceSettingGeneral.GetGeneral().LicenseKey = licenseKey
|
||||
}
|
||||
_, err = s.Store.UpsertWorkspaceSetting(ctx, workspaceSettingGeneral)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to upsert workspace setting")
|
||||
}
|
||||
|
@ -3,6 +3,14 @@ package postgres
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
)
|
||||
|
||||
var (
|
||||
protojsonUnmarshaler = protojson.UnmarshalOptions{
|
||||
DiscardUnknown: true,
|
||||
}
|
||||
)
|
||||
|
||||
func placeholder(n int) string {
|
||||
|
@ -23,13 +23,13 @@ func (d *DB) UpsertUserSetting(ctx context.Context, upsert *storepb.UserSetting)
|
||||
`
|
||||
|
||||
var valueString string
|
||||
if upsert.Key == storepb.UserSettingKey_ACCESS_TOKENS {
|
||||
if upsert.Key == storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS {
|
||||
valueBytes, err := protojson.Marshal(upsert.GetAccessTokens())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
valueString = string(valueBytes)
|
||||
} else if upsert.Key == storepb.UserSettingKey_GENERAL {
|
||||
} else if upsert.Key == storepb.UserSettingKey_USER_SETTING_GENERAL {
|
||||
valueBytes, err := protojson.Marshal(upsert.GetGeneral())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -82,16 +82,16 @@ func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting)
|
||||
return nil, err
|
||||
}
|
||||
userSetting.Key = storepb.UserSettingKey(storepb.UserSettingKey_value[keyString])
|
||||
if userSetting.Key == storepb.UserSettingKey_ACCESS_TOKENS {
|
||||
userSettingAccessTokens := &storepb.UserSettingAccessTokens{}
|
||||
if userSetting.Key == storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS {
|
||||
userSettingAccessTokens := &storepb.UserSetting_AccessTokensSetting{}
|
||||
if err := protojson.Unmarshal([]byte(valueString), userSettingAccessTokens); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
userSetting.Value = &storepb.UserSetting_AccessTokens{
|
||||
AccessTokens: userSettingAccessTokens,
|
||||
}
|
||||
} else if userSetting.Key == storepb.UserSettingKey_GENERAL {
|
||||
userSettingGeneral := &storepb.UserSettingGeneral{}
|
||||
} else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_GENERAL {
|
||||
userSettingGeneral := &storepb.UserSetting_GeneralSetting{}
|
||||
if err := protojson.Unmarshal([]byte(valueString), userSettingGeneral); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -3,11 +3,12 @@ package postgres
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"strconv"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
storepb "github.com/yourselfhosted/slash/proto/gen/store"
|
||||
"github.com/yourselfhosted/slash/store"
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
)
|
||||
|
||||
func (d *DB) UpsertWorkspaceSetting(ctx context.Context, upsert *storepb.WorkspaceSetting) (*storepb.WorkspaceSetting, error) {
|
||||
@ -21,18 +22,18 @@ func (d *DB) UpsertWorkspaceSetting(ctx context.Context, upsert *storepb.Workspa
|
||||
SET value = EXCLUDED.value
|
||||
`
|
||||
var valueString string
|
||||
if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY {
|
||||
valueString = upsert.GetLicenseKey()
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION {
|
||||
valueString = upsert.GetSecretSession()
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSAPCE_SETTING_ENABLE_SIGNUP {
|
||||
valueString = strconv.FormatBool(upsert.GetEnableSignup())
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE {
|
||||
valueString = upsert.GetCustomStyle()
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_INSTANCE_URL {
|
||||
valueString = upsert.GetInstanceUrl()
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY {
|
||||
valueString = upsert.GetDefaultVisibility().String()
|
||||
if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL {
|
||||
valueBytes, err := protojson.Marshal(upsert.GetGeneral())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
valueString = string(valueBytes)
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED {
|
||||
valueBytes, err := protojson.Marshal(upsert.GetShortcutRelated())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
valueString = string(valueBytes)
|
||||
} else {
|
||||
return nil, errors.New("invalid workspace setting key")
|
||||
}
|
||||
@ -76,22 +77,29 @@ func (d *DB) ListWorkspaceSettings(ctx context.Context, find *store.FindWorkspac
|
||||
return nil, err
|
||||
}
|
||||
workspaceSetting.Key = storepb.WorkspaceSettingKey(storepb.WorkspaceSettingKey_value[keyString])
|
||||
if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_LicenseKey{LicenseKey: valueString}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_SecretSession{SecretSession: valueString}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSAPCE_SETTING_ENABLE_SIGNUP {
|
||||
enableSignup, err := strconv.ParseBool(valueString)
|
||||
if err != nil {
|
||||
if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL {
|
||||
workspaceSettingGeneral := &storepb.WorkspaceSetting_GeneralSetting{}
|
||||
if err := protojsonUnmarshaler.Unmarshal([]byte(valueString), workspaceSettingGeneral); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_EnableSignup{EnableSignup: enableSignup}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_CustomStyle{CustomStyle: valueString}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_INSTANCE_URL {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_InstanceUrl{InstanceUrl: valueString}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_DefaultVisibility{DefaultVisibility: storepb.Visibility(storepb.Visibility_value[valueString])}
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_General{
|
||||
General: workspaceSettingGeneral,
|
||||
}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED {
|
||||
workspaceSettingShortcutRelated := &storepb.WorkspaceSetting_ShortcutRelatedSetting{}
|
||||
if err := protojsonUnmarshaler.Unmarshal([]byte(valueString), workspaceSettingShortcutRelated); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_ShortcutRelated{
|
||||
ShortcutRelated: workspaceSettingShortcutRelated,
|
||||
}
|
||||
} else if slices.Contains([]storepb.WorkspaceSettingKey{
|
||||
storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY,
|
||||
storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION,
|
||||
storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE,
|
||||
storepb.WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY,
|
||||
}, workspaceSetting.Key) {
|
||||
workspaceSetting.Raw = valueString
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
@ -104,3 +112,14 @@ func (d *DB) ListWorkspaceSettings(ctx context.Context, find *store.FindWorkspac
|
||||
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func (d *DB) DeleteWorkspaceSetting(ctx context.Context, key storepb.WorkspaceSettingKey) error {
|
||||
stmt := `
|
||||
DELETE FROM workspace_setting
|
||||
WHERE key = $1
|
||||
`
|
||||
if _, err := d.db.ExecContext(ctx, stmt, key.String()); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
9
store/db/sqlite/common.go
Normal file
9
store/db/sqlite/common.go
Normal file
@ -0,0 +1,9 @@
|
||||
package sqlite
|
||||
|
||||
import "google.golang.org/protobuf/encoding/protojson"
|
||||
|
||||
var (
|
||||
protojsonUnmarshaler = protojson.UnmarshalOptions{
|
||||
DiscardUnknown: true,
|
||||
}
|
||||
)
|
@ -22,13 +22,13 @@ func (d *DB) UpsertUserSetting(ctx context.Context, upsert *storepb.UserSetting)
|
||||
SET value = EXCLUDED.value
|
||||
`
|
||||
var valueString string
|
||||
if upsert.Key == storepb.UserSettingKey_ACCESS_TOKENS {
|
||||
if upsert.Key == storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS {
|
||||
valueBytes, err := protojson.Marshal(upsert.GetAccessTokens())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
valueString = string(valueBytes)
|
||||
} else if upsert.Key == storepb.UserSettingKey_GENERAL {
|
||||
} else if upsert.Key == storepb.UserSettingKey_USER_SETTING_GENERAL {
|
||||
valueBytes, err := protojson.Marshal(upsert.GetGeneral())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -81,16 +81,16 @@ func (d *DB) ListUserSettings(ctx context.Context, find *store.FindUserSetting)
|
||||
return nil, err
|
||||
}
|
||||
userSetting.Key = storepb.UserSettingKey(storepb.UserSettingKey_value[keyString])
|
||||
if userSetting.Key == storepb.UserSettingKey_ACCESS_TOKENS {
|
||||
userSettingAccessTokens := &storepb.UserSettingAccessTokens{}
|
||||
if userSetting.Key == storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS {
|
||||
userSettingAccessTokens := &storepb.UserSetting_AccessTokensSetting{}
|
||||
if err := protojson.Unmarshal([]byte(valueString), userSettingAccessTokens); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
userSetting.Value = &storepb.UserSetting_AccessTokens{
|
||||
AccessTokens: userSettingAccessTokens,
|
||||
}
|
||||
} else if userSetting.Key == storepb.UserSettingKey_GENERAL {
|
||||
userSettingGeneral := &storepb.UserSettingGeneral{}
|
||||
} else if userSetting.Key == storepb.UserSettingKey_USER_SETTING_GENERAL {
|
||||
userSettingGeneral := &storepb.UserSetting_GeneralSetting{}
|
||||
if err := protojson.Unmarshal([]byte(valueString), userSettingGeneral); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -3,11 +3,12 @@ package sqlite
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"strconv"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
storepb "github.com/yourselfhosted/slash/proto/gen/store"
|
||||
"github.com/yourselfhosted/slash/store"
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
)
|
||||
|
||||
func (d *DB) UpsertWorkspaceSetting(ctx context.Context, upsert *storepb.WorkspaceSetting) (*storepb.WorkspaceSetting, error) {
|
||||
@ -21,20 +22,18 @@ func (d *DB) UpsertWorkspaceSetting(ctx context.Context, upsert *storepb.Workspa
|
||||
SET value = EXCLUDED.value
|
||||
`
|
||||
var valueString string
|
||||
if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY {
|
||||
valueString = upsert.GetLicenseKey()
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION {
|
||||
valueString = upsert.GetSecretSession()
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSAPCE_SETTING_ENABLE_SIGNUP {
|
||||
valueString = strconv.FormatBool(upsert.GetEnableSignup())
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE {
|
||||
valueString = upsert.GetCustomStyle()
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_INSTANCE_URL {
|
||||
valueString = upsert.GetInstanceUrl()
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY {
|
||||
valueString = upsert.GetDefaultVisibility().String()
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_FAVICON_PROVIDER {
|
||||
valueString = upsert.GetFaviconProvider()
|
||||
if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL {
|
||||
valueBytes, err := protojson.Marshal(upsert.GetGeneral())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
valueString = string(valueBytes)
|
||||
} else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED {
|
||||
valueBytes, err := protojson.Marshal(upsert.GetShortcutRelated())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
valueString = string(valueBytes)
|
||||
} else {
|
||||
return nil, errors.New("invalid workspace setting key")
|
||||
}
|
||||
@ -78,24 +77,29 @@ func (d *DB) ListWorkspaceSettings(ctx context.Context, find *store.FindWorkspac
|
||||
return nil, err
|
||||
}
|
||||
workspaceSetting.Key = storepb.WorkspaceSettingKey(storepb.WorkspaceSettingKey_value[keyString])
|
||||
if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_LicenseKey{LicenseKey: valueString}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_SecretSession{SecretSession: valueString}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSAPCE_SETTING_ENABLE_SIGNUP {
|
||||
enableSignup, err := strconv.ParseBool(valueString)
|
||||
if err != nil {
|
||||
if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL {
|
||||
workspaceSettingGeneral := &storepb.WorkspaceSetting_GeneralSetting{}
|
||||
if err := protojsonUnmarshaler.Unmarshal([]byte(valueString), workspaceSettingGeneral); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_EnableSignup{EnableSignup: enableSignup}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_CustomStyle{CustomStyle: valueString}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_INSTANCE_URL {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_InstanceUrl{InstanceUrl: valueString}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_DefaultVisibility{DefaultVisibility: storepb.Visibility(storepb.Visibility_value[valueString])}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_FAVICON_PROVIDER {
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_FaviconProvider{FaviconProvider: valueString}
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_General{
|
||||
General: workspaceSettingGeneral,
|
||||
}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED {
|
||||
workspaceSettingShortcutRelated := &storepb.WorkspaceSetting_ShortcutRelatedSetting{}
|
||||
if err := protojsonUnmarshaler.Unmarshal([]byte(valueString), workspaceSettingShortcutRelated); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
workspaceSetting.Value = &storepb.WorkspaceSetting_ShortcutRelated{
|
||||
ShortcutRelated: workspaceSettingShortcutRelated,
|
||||
}
|
||||
} else if slices.Contains([]storepb.WorkspaceSettingKey{
|
||||
storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY,
|
||||
storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION,
|
||||
storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE,
|
||||
storepb.WorkspaceSettingKey_WORKSPACE_SETTING_DEFAULT_VISIBILITY,
|
||||
}, workspaceSetting.Key) {
|
||||
workspaceSetting.Raw = valueString
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
@ -108,3 +112,14 @@ func (d *DB) ListWorkspaceSettings(ctx context.Context, find *store.FindWorkspac
|
||||
|
||||
return list, nil
|
||||
}
|
||||
|
||||
func (d *DB) DeleteWorkspaceSetting(ctx context.Context, key storepb.WorkspaceSettingKey) error {
|
||||
stmt := `
|
||||
DELETE FROM workspace_setting
|
||||
WHERE key = ?
|
||||
`
|
||||
if _, err := d.db.ExecContext(ctx, stmt, key.String()); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -48,4 +48,5 @@ type Driver interface {
|
||||
// WorkspaceSetting model related methods.
|
||||
UpsertWorkspaceSetting(ctx context.Context, upsert *storepb.WorkspaceSetting) (*storepb.WorkspaceSetting, error)
|
||||
ListWorkspaceSettings(ctx context.Context, find *FindWorkspaceSetting) ([]*storepb.WorkspaceSetting, error)
|
||||
DeleteWorkspaceSetting(ctx context.Context, key storepb.WorkspaceSettingKey) error
|
||||
}
|
||||
|
57
store/migrator.go
Normal file
57
store/migrator.go
Normal file
@ -0,0 +1,57 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
storepb "github.com/yourselfhosted/slash/proto/gen/store"
|
||||
)
|
||||
|
||||
func (s *Store) MigrateWorkspaceSettings(ctx context.Context) error {
|
||||
workspaceSettings, err := s.driver.ListWorkspaceSettings(ctx, &FindWorkspaceSetting{})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
workspaceSettingGeneral, err := s.GetWorkspaceSetting(ctx, &FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if workspaceSettingGeneral == nil || workspaceSettingGeneral.GetGeneral() == nil {
|
||||
workspaceSettingGeneral = &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
Value: &storepb.WorkspaceSetting_General{
|
||||
General: &storepb.WorkspaceSetting_GeneralSetting{},
|
||||
},
|
||||
}
|
||||
}
|
||||
updateWorkspaceSetting := false
|
||||
for _, workspaceSetting := range workspaceSettings {
|
||||
if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY {
|
||||
workspaceSettingGeneral.GetGeneral().LicenseKey = workspaceSetting.Raw
|
||||
updateWorkspaceSetting = true
|
||||
if err := s.DeleteWorkspaceSetting(ctx, storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY); err != nil {
|
||||
return err
|
||||
}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE {
|
||||
workspaceSettingGeneral.GetGeneral().CustomStyle = workspaceSetting.Raw
|
||||
updateWorkspaceSetting = true
|
||||
if err := s.DeleteWorkspaceSetting(ctx, storepb.WorkspaceSettingKey_WORKSPACE_SETTING_CUSTOM_STYLE); err != nil {
|
||||
return err
|
||||
}
|
||||
} else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION {
|
||||
workspaceSettingGeneral.GetGeneral().SecretSession = workspaceSetting.Raw
|
||||
updateWorkspaceSetting = true
|
||||
if err := s.DeleteWorkspaceSetting(ctx, storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
if updateWorkspaceSetting {
|
||||
if _, err := s.UpsertWorkspaceSetting(ctx, workspaceSettingGeneral); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
@ -54,16 +54,16 @@ func (s *Store) GetUserSetting(ctx context.Context, find *FindUserSetting) (*sto
|
||||
}
|
||||
|
||||
// GetUserAccessTokens returns the access tokens of the user.
|
||||
func (s *Store) GetUserAccessTokens(ctx context.Context, userID int32) ([]*storepb.UserSettingAccessTokens_AccessToken, error) {
|
||||
func (s *Store) GetUserAccessTokens(ctx context.Context, userID int32) ([]*storepb.UserSetting_AccessTokensSetting_AccessToken, error) {
|
||||
userSetting, err := s.GetUserSetting(ctx, &FindUserSetting{
|
||||
UserID: &userID,
|
||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||
Key: storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if userSetting == nil {
|
||||
return []*storepb.UserSettingAccessTokens_AccessToken{}, nil
|
||||
return []*storepb.UserSetting_AccessTokensSetting_AccessToken{}, nil
|
||||
}
|
||||
|
||||
accessTokensUserSetting := userSetting.GetAccessTokens()
|
||||
|
@ -3,6 +3,8 @@ package store
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
storepb "github.com/yourselfhosted/slash/proto/gen/store"
|
||||
)
|
||||
|
||||
@ -50,3 +52,11 @@ func (s *Store) GetWorkspaceSetting(ctx context.Context, find *FindWorkspaceSett
|
||||
s.workspaceSettingCache.Store(workspaceSetting.Key, workspaceSetting)
|
||||
return workspaceSetting, nil
|
||||
}
|
||||
|
||||
func (s *Store) DeleteWorkspaceSetting(ctx context.Context, key storepb.WorkspaceSettingKey) error {
|
||||
if err := s.driver.DeleteWorkspaceSetting(ctx, key); err != nil {
|
||||
return errors.Wrap(err, "failed to delete workspace setting")
|
||||
}
|
||||
s.workspaceSettingCache.Delete(key)
|
||||
return nil
|
||||
}
|
||||
|
@ -24,10 +24,10 @@ func TestUserSettingStore(t *testing.T) {
|
||||
// Test for access tokens user setting.
|
||||
accessTokensUserSetting, err := ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||
UserId: user.ID,
|
||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||
Key: storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS,
|
||||
Value: &storepb.UserSetting_AccessTokens{
|
||||
AccessTokens: &storepb.UserSettingAccessTokens{
|
||||
AccessTokens: []*storepb.UserSettingAccessTokens_AccessToken{
|
||||
AccessTokens: &storepb.UserSetting_AccessTokensSetting{
|
||||
AccessTokens: []*storepb.UserSetting_AccessTokensSetting_AccessToken{
|
||||
{
|
||||
AccessToken: "test_access_token",
|
||||
},
|
||||
@ -37,7 +37,7 @@ func TestUserSettingStore(t *testing.T) {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, accessTokensUserSetting)
|
||||
require.Equal(t, storepb.UserSettingKey_ACCESS_TOKENS, accessTokensUserSetting.Key)
|
||||
require.Equal(t, storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS, accessTokensUserSetting.Key)
|
||||
require.Equal(t, user.ID, accessTokensUserSetting.UserId)
|
||||
require.Equal(t, 1, len(accessTokensUserSetting.GetAccessTokens().AccessTokens))
|
||||
userSettings, err = ts.ListUserSettings(ctx, &store.FindUserSetting{
|
||||
@ -48,7 +48,7 @@ func TestUserSettingStore(t *testing.T) {
|
||||
require.Equal(t, accessTokensUserSetting, userSettings[0])
|
||||
accessTokensUserSetting, err = ts.GetUserSetting(ctx, &store.FindUserSetting{
|
||||
UserID: &user.ID,
|
||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||
Key: storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, accessTokensUserSetting)
|
||||
@ -56,10 +56,10 @@ func TestUserSettingStore(t *testing.T) {
|
||||
require.Equal(t, "test_access_token", accessTokensUserSetting.GetAccessTokens().AccessTokens[0].AccessToken)
|
||||
accessTokensUserSetting, err = ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||
UserId: user.ID,
|
||||
Key: storepb.UserSettingKey_ACCESS_TOKENS,
|
||||
Key: storepb.UserSettingKey_USER_SETTING_ACCESS_TOKENS,
|
||||
Value: &storepb.UserSetting_AccessTokens{
|
||||
AccessTokens: &storepb.UserSettingAccessTokens{
|
||||
AccessTokens: []*storepb.UserSettingAccessTokens_AccessToken{
|
||||
AccessTokens: &storepb.UserSetting_AccessTokensSetting{
|
||||
AccessTokens: []*storepb.UserSetting_AccessTokensSetting_AccessToken{
|
||||
{
|
||||
AccessToken: "test_access_token",
|
||||
},
|
||||
@ -77,9 +77,9 @@ func TestUserSettingStore(t *testing.T) {
|
||||
// Test for user setting general.
|
||||
userSettingGeneral, err := ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||
UserId: user.ID,
|
||||
Key: storepb.UserSettingKey_GENERAL,
|
||||
Key: storepb.UserSettingKey_USER_SETTING_GENERAL,
|
||||
Value: &storepb.UserSetting_General{
|
||||
General: &storepb.UserSettingGeneral{
|
||||
General: &storepb.UserSetting_GeneralSetting{
|
||||
Locale: "ZH",
|
||||
ColorTheme: "SYSTEM",
|
||||
},
|
||||
@ -87,14 +87,14 @@ func TestUserSettingStore(t *testing.T) {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, userSettingGeneral)
|
||||
require.Equal(t, storepb.UserSettingKey_GENERAL, userSettingGeneral.Key)
|
||||
require.Equal(t, storepb.UserSettingKey_USER_SETTING_GENERAL, userSettingGeneral.Key)
|
||||
require.Equal(t, "ZH", userSettingGeneral.GetGeneral().Locale)
|
||||
require.Equal(t, "SYSTEM", userSettingGeneral.GetGeneral().ColorTheme)
|
||||
userSettingGeneral, err = ts.UpsertUserSetting(ctx, &storepb.UserSetting{
|
||||
UserId: user.ID,
|
||||
Key: storepb.UserSettingKey_GENERAL,
|
||||
Key: storepb.UserSettingKey_USER_SETTING_GENERAL,
|
||||
Value: &storepb.UserSetting_General{
|
||||
General: &storepb.UserSettingGeneral{
|
||||
General: &storepb.UserSetting_GeneralSetting{
|
||||
Locale: "EN",
|
||||
ColorTheme: "DARK",
|
||||
},
|
||||
|
@ -16,12 +16,16 @@ func TestWorkspaceSettingStore(t *testing.T) {
|
||||
ts := NewTestingStore(ctx, t)
|
||||
tempSecret := uuid.New().String()
|
||||
workspaceSetting, err := ts.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION,
|
||||
Value: &storepb.WorkspaceSetting_SecretSession{SecretSession: tempSecret},
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
Value: &storepb.WorkspaceSetting_General{
|
||||
General: &storepb.WorkspaceSetting_GeneralSetting{
|
||||
SecretSession: tempSecret,
|
||||
},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
foundWorkspaceSetting, err := ts.GetWorkspaceSetting(ctx, &store.FindWorkspaceSetting{
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION,
|
||||
Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_GENERAL,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, workspaceSetting, foundWorkspaceSetting)
|
||||
|
Loading…
x
Reference in New Issue
Block a user