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