From e12c83137dac260fd7711e8d8202decfcf2a2d6d Mon Sep 17 00:00:00 2001 From: Steven Date: Tue, 6 Aug 2024 21:48:10 +0800 Subject: [PATCH] chore: update workspace setting service --- proto/api/v1/workspace_service.proto | 35 ++ proto/gen/api/v1/README.md | 89 +++ proto/gen/api/v1/workspace_service.pb.go | 709 +++++++++++++++++++---- proto/gen/apidocs.swagger.yaml | 54 ++ server/route/api/v1/workspace_service.go | 89 +++ store/db/postgres/workspace_setting.go | 14 + store/db/sqlite/workspace_setting.go | 14 + 7 files changed, 877 insertions(+), 127 deletions(-) diff --git a/proto/api/v1/workspace_service.proto b/proto/api/v1/workspace_service.proto index ae21952..7cb246d 100644 --- a/proto/api/v1/workspace_service.proto +++ b/proto/api/v1/workspace_service.proto @@ -51,6 +51,41 @@ message WorkspaceSetting { string custom_style = 2; // The default visibility of shortcuts and collections. Visibility default_visibility = 3; + // The identity providers. + repeated IdentityProvider identity_providers = 4; +} + +message IdentityProvider { + string name = 1; + + enum Type { + TYPE_UNSPECIFIED = 0; + OAUTH2 = 1; + } + Type type = 2; + IdentityProviderConfig config = 3; +} + +message IdentityProviderConfig { + oneof config { + OAuth2Config oauth2 = 1; + } + + message FieldMapping { + string identifier = 1; + string email = 2; + string display_name = 3; + } + + message OAuth2Config { + string client_id = 1; + string client_secret = 2; + string auth_url = 3; + string token_url = 4; + string user_info_url = 5; + repeated string scopes = 6; + FieldMapping field_mapping = 7; + } } message GetWorkspaceProfileRequest {} diff --git a/proto/gen/api/v1/README.md b/proto/gen/api/v1/README.md index c6ec9bd..32d9bb0 100644 --- a/proto/gen/api/v1/README.md +++ b/proto/gen/api/v1/README.md @@ -109,11 +109,17 @@ - [GetWorkspaceProfileResponse](#slash-api-v1-GetWorkspaceProfileResponse) - [GetWorkspaceSettingRequest](#slash-api-v1-GetWorkspaceSettingRequest) - [GetWorkspaceSettingResponse](#slash-api-v1-GetWorkspaceSettingResponse) + - [IdentityProvider](#slash-api-v1-IdentityProvider) + - [IdentityProviderConfig](#slash-api-v1-IdentityProviderConfig) + - [IdentityProviderConfig.FieldMapping](#slash-api-v1-IdentityProviderConfig-FieldMapping) + - [IdentityProviderConfig.OAuth2Config](#slash-api-v1-IdentityProviderConfig-OAuth2Config) - [UpdateWorkspaceSettingRequest](#slash-api-v1-UpdateWorkspaceSettingRequest) - [UpdateWorkspaceSettingResponse](#slash-api-v1-UpdateWorkspaceSettingResponse) - [WorkspaceProfile](#slash-api-v1-WorkspaceProfile) - [WorkspaceSetting](#slash-api-v1-WorkspaceSetting) + - [IdentityProvider.Type](#slash-api-v1-IdentityProvider-Type) + - [WorkspaceService](#slash-api-v1-WorkspaceService) - [Scalar Value Types](#scalar-value-types) @@ -1457,6 +1463,76 @@ + + +### IdentityProvider + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| name | [string](#string) | | | +| type | [IdentityProvider.Type](#slash-api-v1-IdentityProvider-Type) | | | +| config | [IdentityProviderConfig](#slash-api-v1-IdentityProviderConfig) | | | + + + + + + + + +### IdentityProviderConfig + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| oauth2 | [IdentityProviderConfig.OAuth2Config](#slash-api-v1-IdentityProviderConfig-OAuth2Config) | | | + + + + + + + + +### IdentityProviderConfig.FieldMapping + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| identifier | [string](#string) | | | +| email | [string](#string) | | | +| display_name | [string](#string) | | | + + + + + + + + +### IdentityProviderConfig.OAuth2Config + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| client_id | [string](#string) | | | +| client_secret | [string](#string) | | | +| auth_url | [string](#string) | | | +| token_url | [string](#string) | | | +| user_info_url | [string](#string) | | | +| scopes | [string](#string) | repeated | | +| field_mapping | [IdentityProviderConfig.FieldMapping](#slash-api-v1-IdentityProviderConfig-FieldMapping) | | | + + + + + + ### UpdateWorkspaceSettingRequest @@ -1520,6 +1596,7 @@ | branding | [bytes](#bytes) | | The workspace custome branding. | | custom_style | [string](#string) | | The custom style. | | default_visibility | [Visibility](#slash-api-v1-Visibility) | | The default visibility of shortcuts and collections. | +| identity_providers | [IdentityProvider](#slash-api-v1-IdentityProvider) | repeated | The identity providers. | @@ -1527,6 +1604,18 @@ + + + +### IdentityProvider.Type + + +| Name | Number | Description | +| ---- | ------ | ----------- | +| TYPE_UNSPECIFIED | 0 | | +| OAUTH2 | 1 | | + + diff --git a/proto/gen/api/v1/workspace_service.pb.go b/proto/gen/api/v1/workspace_service.pb.go index 209121e..8852ebb 100644 --- a/proto/gen/api/v1/workspace_service.pb.go +++ b/proto/gen/api/v1/workspace_service.pb.go @@ -22,6 +22,52 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type IdentityProvider_Type int32 + +const ( + IdentityProvider_TYPE_UNSPECIFIED IdentityProvider_Type = 0 + IdentityProvider_OAUTH2 IdentityProvider_Type = 1 +) + +// Enum value maps for IdentityProvider_Type. +var ( + IdentityProvider_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "OAUTH2", + } + IdentityProvider_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "OAUTH2": 1, + } +) + +func (x IdentityProvider_Type) Enum() *IdentityProvider_Type { + p := new(IdentityProvider_Type) + *p = x + return p +} + +func (x IdentityProvider_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IdentityProvider_Type) Descriptor() protoreflect.EnumDescriptor { + return file_api_v1_workspace_service_proto_enumTypes[0].Descriptor() +} + +func (IdentityProvider_Type) Type() protoreflect.EnumType { + return &file_api_v1_workspace_service_proto_enumTypes[0] +} + +func (x IdentityProvider_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IdentityProvider_Type.Descriptor instead. +func (IdentityProvider_Type) EnumDescriptor() ([]byte, []int) { + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{2, 0} +} + type WorkspaceProfile struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -136,6 +182,8 @@ type WorkspaceSetting struct { CustomStyle string `protobuf:"bytes,2,opt,name=custom_style,json=customStyle,proto3" json:"custom_style,omitempty"` // The default visibility of shortcuts and collections. DefaultVisibility Visibility `protobuf:"varint,3,opt,name=default_visibility,json=defaultVisibility,proto3,enum=slash.api.v1.Visibility" json:"default_visibility,omitempty"` + // The identity providers. + IdentityProviders []*IdentityProvider `protobuf:"bytes,4,rep,name=identity_providers,json=identityProviders,proto3" json:"identity_providers,omitempty"` } func (x *WorkspaceSetting) Reset() { @@ -191,6 +239,143 @@ func (x *WorkspaceSetting) GetDefaultVisibility() Visibility { return Visibility_VISIBILITY_UNSPECIFIED } +func (x *WorkspaceSetting) GetIdentityProviders() []*IdentityProvider { + if x != nil { + return x.IdentityProviders + } + return nil +} + +type IdentityProvider struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Type IdentityProvider_Type `protobuf:"varint,2,opt,name=type,proto3,enum=slash.api.v1.IdentityProvider_Type" json:"type,omitempty"` + Config *IdentityProviderConfig `protobuf:"bytes,3,opt,name=config,proto3" json:"config,omitempty"` +} + +func (x *IdentityProvider) Reset() { + *x = IdentityProvider{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_workspace_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityProvider) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityProvider) ProtoMessage() {} + +func (x *IdentityProvider) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_workspace_service_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 IdentityProvider.ProtoReflect.Descriptor instead. +func (*IdentityProvider) Descriptor() ([]byte, []int) { + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{2} +} + +func (x *IdentityProvider) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *IdentityProvider) GetType() IdentityProvider_Type { + if x != nil { + return x.Type + } + return IdentityProvider_TYPE_UNSPECIFIED +} + +func (x *IdentityProvider) GetConfig() *IdentityProviderConfig { + if x != nil { + return x.Config + } + return nil +} + +type IdentityProviderConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Config: + // + // *IdentityProviderConfig_Oauth2 + Config isIdentityProviderConfig_Config `protobuf_oneof:"config"` +} + +func (x *IdentityProviderConfig) Reset() { + *x = IdentityProviderConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_workspace_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityProviderConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityProviderConfig) ProtoMessage() {} + +func (x *IdentityProviderConfig) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_workspace_service_proto_msgTypes[3] + 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 IdentityProviderConfig.ProtoReflect.Descriptor instead. +func (*IdentityProviderConfig) Descriptor() ([]byte, []int) { + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{3} +} + +func (m *IdentityProviderConfig) GetConfig() isIdentityProviderConfig_Config { + if m != nil { + return m.Config + } + return nil +} + +func (x *IdentityProviderConfig) GetOauth2() *IdentityProviderConfig_OAuth2Config { + if x, ok := x.GetConfig().(*IdentityProviderConfig_Oauth2); ok { + return x.Oauth2 + } + return nil +} + +type isIdentityProviderConfig_Config interface { + isIdentityProviderConfig_Config() +} + +type IdentityProviderConfig_Oauth2 struct { + Oauth2 *IdentityProviderConfig_OAuth2Config `protobuf:"bytes,1,opt,name=oauth2,proto3,oneof"` +} + +func (*IdentityProviderConfig_Oauth2) isIdentityProviderConfig_Config() {} + type GetWorkspaceProfileRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -200,7 +385,7 @@ type GetWorkspaceProfileRequest struct { func (x *GetWorkspaceProfileRequest) Reset() { *x = GetWorkspaceProfileRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_workspace_service_proto_msgTypes[2] + mi := &file_api_v1_workspace_service_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -213,7 +398,7 @@ func (x *GetWorkspaceProfileRequest) String() string { func (*GetWorkspaceProfileRequest) ProtoMessage() {} func (x *GetWorkspaceProfileRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_workspace_service_proto_msgTypes[2] + mi := &file_api_v1_workspace_service_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -226,7 +411,7 @@ func (x *GetWorkspaceProfileRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWorkspaceProfileRequest.ProtoReflect.Descriptor instead. func (*GetWorkspaceProfileRequest) Descriptor() ([]byte, []int) { - return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{2} + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{4} } type GetWorkspaceProfileResponse struct { @@ -241,7 +426,7 @@ type GetWorkspaceProfileResponse struct { func (x *GetWorkspaceProfileResponse) Reset() { *x = GetWorkspaceProfileResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_workspace_service_proto_msgTypes[3] + mi := &file_api_v1_workspace_service_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -254,7 +439,7 @@ func (x *GetWorkspaceProfileResponse) String() string { func (*GetWorkspaceProfileResponse) ProtoMessage() {} func (x *GetWorkspaceProfileResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_workspace_service_proto_msgTypes[3] + mi := &file_api_v1_workspace_service_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -267,7 +452,7 @@ func (x *GetWorkspaceProfileResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWorkspaceProfileResponse.ProtoReflect.Descriptor instead. func (*GetWorkspaceProfileResponse) Descriptor() ([]byte, []int) { - return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{3} + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{5} } func (x *GetWorkspaceProfileResponse) GetProfile() *WorkspaceProfile { @@ -286,7 +471,7 @@ type GetWorkspaceSettingRequest struct { func (x *GetWorkspaceSettingRequest) Reset() { *x = GetWorkspaceSettingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_workspace_service_proto_msgTypes[4] + mi := &file_api_v1_workspace_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -299,7 +484,7 @@ func (x *GetWorkspaceSettingRequest) String() string { func (*GetWorkspaceSettingRequest) ProtoMessage() {} func (x *GetWorkspaceSettingRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_workspace_service_proto_msgTypes[4] + mi := &file_api_v1_workspace_service_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -312,7 +497,7 @@ func (x *GetWorkspaceSettingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWorkspaceSettingRequest.ProtoReflect.Descriptor instead. func (*GetWorkspaceSettingRequest) Descriptor() ([]byte, []int) { - return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{4} + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{6} } type GetWorkspaceSettingResponse struct { @@ -327,7 +512,7 @@ type GetWorkspaceSettingResponse struct { func (x *GetWorkspaceSettingResponse) Reset() { *x = GetWorkspaceSettingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_workspace_service_proto_msgTypes[5] + mi := &file_api_v1_workspace_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -340,7 +525,7 @@ func (x *GetWorkspaceSettingResponse) String() string { func (*GetWorkspaceSettingResponse) ProtoMessage() {} func (x *GetWorkspaceSettingResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_workspace_service_proto_msgTypes[5] + mi := &file_api_v1_workspace_service_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -353,7 +538,7 @@ func (x *GetWorkspaceSettingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWorkspaceSettingResponse.ProtoReflect.Descriptor instead. func (*GetWorkspaceSettingResponse) Descriptor() ([]byte, []int) { - return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{5} + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{7} } func (x *GetWorkspaceSettingResponse) GetSetting() *WorkspaceSetting { @@ -377,7 +562,7 @@ type UpdateWorkspaceSettingRequest struct { func (x *UpdateWorkspaceSettingRequest) Reset() { *x = UpdateWorkspaceSettingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_workspace_service_proto_msgTypes[6] + mi := &file_api_v1_workspace_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -390,7 +575,7 @@ func (x *UpdateWorkspaceSettingRequest) String() string { func (*UpdateWorkspaceSettingRequest) ProtoMessage() {} func (x *UpdateWorkspaceSettingRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_workspace_service_proto_msgTypes[6] + mi := &file_api_v1_workspace_service_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -403,7 +588,7 @@ func (x *UpdateWorkspaceSettingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateWorkspaceSettingRequest.ProtoReflect.Descriptor instead. func (*UpdateWorkspaceSettingRequest) Descriptor() ([]byte, []int) { - return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{6} + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{8} } func (x *UpdateWorkspaceSettingRequest) GetSetting() *WorkspaceSetting { @@ -432,7 +617,7 @@ type UpdateWorkspaceSettingResponse struct { func (x *UpdateWorkspaceSettingResponse) Reset() { *x = UpdateWorkspaceSettingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_api_v1_workspace_service_proto_msgTypes[7] + mi := &file_api_v1_workspace_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -445,7 +630,7 @@ func (x *UpdateWorkspaceSettingResponse) String() string { func (*UpdateWorkspaceSettingResponse) ProtoMessage() {} func (x *UpdateWorkspaceSettingResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_v1_workspace_service_proto_msgTypes[7] + mi := &file_api_v1_workspace_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -458,7 +643,7 @@ func (x *UpdateWorkspaceSettingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateWorkspaceSettingResponse.ProtoReflect.Descriptor instead. func (*UpdateWorkspaceSettingResponse) Descriptor() ([]byte, []int) { - return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{7} + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{9} } func (x *UpdateWorkspaceSettingResponse) GetSetting() *WorkspaceSetting { @@ -468,6 +653,164 @@ func (x *UpdateWorkspaceSettingResponse) GetSetting() *WorkspaceSetting { return nil } +type IdentityProviderConfig_FieldMapping struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Identifier string `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"` + Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` +} + +func (x *IdentityProviderConfig_FieldMapping) Reset() { + *x = IdentityProviderConfig_FieldMapping{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_workspace_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityProviderConfig_FieldMapping) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityProviderConfig_FieldMapping) ProtoMessage() {} + +func (x *IdentityProviderConfig_FieldMapping) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_workspace_service_proto_msgTypes[10] + 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 IdentityProviderConfig_FieldMapping.ProtoReflect.Descriptor instead. +func (*IdentityProviderConfig_FieldMapping) Descriptor() ([]byte, []int) { + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *IdentityProviderConfig_FieldMapping) GetIdentifier() string { + if x != nil { + return x.Identifier + } + return "" +} + +func (x *IdentityProviderConfig_FieldMapping) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *IdentityProviderConfig_FieldMapping) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +type IdentityProviderConfig_OAuth2Config struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + ClientSecret string `protobuf:"bytes,2,opt,name=client_secret,json=clientSecret,proto3" json:"client_secret,omitempty"` + AuthUrl string `protobuf:"bytes,3,opt,name=auth_url,json=authUrl,proto3" json:"auth_url,omitempty"` + TokenUrl string `protobuf:"bytes,4,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` + UserInfoUrl string `protobuf:"bytes,5,opt,name=user_info_url,json=userInfoUrl,proto3" json:"user_info_url,omitempty"` + Scopes []string `protobuf:"bytes,6,rep,name=scopes,proto3" json:"scopes,omitempty"` + FieldMapping *IdentityProviderConfig_FieldMapping `protobuf:"bytes,7,opt,name=field_mapping,json=fieldMapping,proto3" json:"field_mapping,omitempty"` +} + +func (x *IdentityProviderConfig_OAuth2Config) Reset() { + *x = IdentityProviderConfig_OAuth2Config{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_workspace_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityProviderConfig_OAuth2Config) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityProviderConfig_OAuth2Config) ProtoMessage() {} + +func (x *IdentityProviderConfig_OAuth2Config) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_workspace_service_proto_msgTypes[11] + 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 IdentityProviderConfig_OAuth2Config.ProtoReflect.Descriptor instead. +func (*IdentityProviderConfig_OAuth2Config) Descriptor() ([]byte, []int) { + return file_api_v1_workspace_service_proto_rawDescGZIP(), []int{3, 1} +} + +func (x *IdentityProviderConfig_OAuth2Config) GetClientId() string { + if x != nil { + return x.ClientId + } + return "" +} + +func (x *IdentityProviderConfig_OAuth2Config) GetClientSecret() string { + if x != nil { + return x.ClientSecret + } + return "" +} + +func (x *IdentityProviderConfig_OAuth2Config) GetAuthUrl() string { + if x != nil { + return x.AuthUrl + } + return "" +} + +func (x *IdentityProviderConfig_OAuth2Config) GetTokenUrl() string { + if x != nil { + return x.TokenUrl + } + return "" +} + +func (x *IdentityProviderConfig_OAuth2Config) GetUserInfoUrl() string { + if x != nil { + return x.UserInfoUrl + } + return "" +} + +func (x *IdentityProviderConfig_OAuth2Config) GetScopes() []string { + if x != nil { + return x.Scopes + } + return nil +} + +func (x *IdentityProviderConfig_OAuth2Config) GetFieldMapping() *IdentityProviderConfig_FieldMapping { + if x != nil { + return x.FieldMapping + } + return nil +} + var File_api_v1_workspace_service_proto protoreflect.FileDescriptor var file_api_v1_workspace_service_proto_rawDesc = []byte{ @@ -497,7 +840,7 @@ var file_api_v1_workspace_service_proto_rawDesc = []byte{ 0x6d, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, - 0x62, 0x72, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x9a, 0x01, 0x0a, 0x10, 0x57, 0x6f, 0x72, + 0x62, 0x72, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xe9, 0x01, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x75, 0x73, @@ -507,80 +850,129 @@ var file_api_v1_workspace_service_proto_rawDesc = []byte{ 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x1c, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, - 0x69, 0x6c, 0x65, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, 0x1c, 0x0a, 0x1a, - 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x1b, 0x47, 0x65, - 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x6c, 0x61, - 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x73, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x22, 0x96, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, - 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x4d, 0x0a, 0x12, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x73, 0x22, 0xc7, 0x01, 0x0a, 0x10, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x73, 0x6c, + 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x22, 0x28, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x41, 0x55, 0x54, 0x48, 0x32, 0x10, 0x01, 0x22, 0xf7, + 0x03, 0x0a, 0x16, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, 0x06, 0x6f, 0x61, 0x75, + 0x74, 0x68, 0x32, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x6c, 0x61, 0x73, + 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, + 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x1a, 0x67, 0x0a, 0x0c, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x21, 0x0a, 0x0c, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x1a, + 0x9c, 0x02, 0x0a, 0x0c, 0x4f, 0x41, 0x75, 0x74, 0x68, 0x32, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, 0x68, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, + 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x55, 0x72, 0x6c, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x56, 0x0a, 0x0d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, + 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x52, 0x0c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x08, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x1c, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, - 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, - 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x5a, 0x0a, 0x1e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, - 0x0a, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, - 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, - 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0xea, 0x03, 0x0a, 0x10, 0x57, 0x6f, 0x72, - 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8d, 0x01, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, - 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x28, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 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, 0x1a, - 0x29, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x8d, 0x01, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0xb5, 0x01, - 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2b, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x22, + 0x1c, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x57, 0x0a, + 0x1b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, + 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x96, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x6c, 0x61, 0x73, + 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, + 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, + 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x22, + 0x5a, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x52, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0xea, 0x03, 0x0a, 0x10, + 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x28, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 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, 0x1a, 0x29, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x12, 0xb5, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x2b, 0x2e, 0x73, 0x6c, + 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x40, 0xda, 0x41, 0x13, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2c, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x24, 0x3a, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x19, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x73, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x42, 0xb3, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x6c, - 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x57, 0x6f, 0x72, 0x6b, - 0x73, 0x70, 0x61, 0x63, 0x65, 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, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0xda, 0x41, 0x13, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x24, 0x3a, 0x07, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x19, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x42, 0xb3, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, + 0x2e, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x57, + 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 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 ( @@ -595,39 +987,50 @@ func file_api_v1_workspace_service_proto_rawDescGZIP() []byte { return file_api_v1_workspace_service_proto_rawDescData } -var file_api_v1_workspace_service_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_api_v1_workspace_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_api_v1_workspace_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_api_v1_workspace_service_proto_goTypes = []any{ - (*WorkspaceProfile)(nil), // 0: slash.api.v1.WorkspaceProfile - (*WorkspaceSetting)(nil), // 1: slash.api.v1.WorkspaceSetting - (*GetWorkspaceProfileRequest)(nil), // 2: slash.api.v1.GetWorkspaceProfileRequest - (*GetWorkspaceProfileResponse)(nil), // 3: slash.api.v1.GetWorkspaceProfileResponse - (*GetWorkspaceSettingRequest)(nil), // 4: slash.api.v1.GetWorkspaceSettingRequest - (*GetWorkspaceSettingResponse)(nil), // 5: slash.api.v1.GetWorkspaceSettingResponse - (*UpdateWorkspaceSettingRequest)(nil), // 6: slash.api.v1.UpdateWorkspaceSettingRequest - (*UpdateWorkspaceSettingResponse)(nil), // 7: slash.api.v1.UpdateWorkspaceSettingResponse - (PlanType)(0), // 8: slash.api.v1.PlanType - (Visibility)(0), // 9: slash.api.v1.Visibility - (*fieldmaskpb.FieldMask)(nil), // 10: google.protobuf.FieldMask + (IdentityProvider_Type)(0), // 0: slash.api.v1.IdentityProvider.Type + (*WorkspaceProfile)(nil), // 1: slash.api.v1.WorkspaceProfile + (*WorkspaceSetting)(nil), // 2: slash.api.v1.WorkspaceSetting + (*IdentityProvider)(nil), // 3: slash.api.v1.IdentityProvider + (*IdentityProviderConfig)(nil), // 4: slash.api.v1.IdentityProviderConfig + (*GetWorkspaceProfileRequest)(nil), // 5: slash.api.v1.GetWorkspaceProfileRequest + (*GetWorkspaceProfileResponse)(nil), // 6: slash.api.v1.GetWorkspaceProfileResponse + (*GetWorkspaceSettingRequest)(nil), // 7: slash.api.v1.GetWorkspaceSettingRequest + (*GetWorkspaceSettingResponse)(nil), // 8: slash.api.v1.GetWorkspaceSettingResponse + (*UpdateWorkspaceSettingRequest)(nil), // 9: slash.api.v1.UpdateWorkspaceSettingRequest + (*UpdateWorkspaceSettingResponse)(nil), // 10: slash.api.v1.UpdateWorkspaceSettingResponse + (*IdentityProviderConfig_FieldMapping)(nil), // 11: slash.api.v1.IdentityProviderConfig.FieldMapping + (*IdentityProviderConfig_OAuth2Config)(nil), // 12: slash.api.v1.IdentityProviderConfig.OAuth2Config + (PlanType)(0), // 13: slash.api.v1.PlanType + (Visibility)(0), // 14: slash.api.v1.Visibility + (*fieldmaskpb.FieldMask)(nil), // 15: google.protobuf.FieldMask } var file_api_v1_workspace_service_proto_depIdxs = []int32{ - 8, // 0: slash.api.v1.WorkspaceProfile.plan:type_name -> slash.api.v1.PlanType - 9, // 1: slash.api.v1.WorkspaceSetting.default_visibility:type_name -> slash.api.v1.Visibility - 0, // 2: slash.api.v1.GetWorkspaceProfileResponse.profile:type_name -> slash.api.v1.WorkspaceProfile - 1, // 3: slash.api.v1.GetWorkspaceSettingResponse.setting:type_name -> slash.api.v1.WorkspaceSetting - 1, // 4: slash.api.v1.UpdateWorkspaceSettingRequest.setting:type_name -> slash.api.v1.WorkspaceSetting - 10, // 5: slash.api.v1.UpdateWorkspaceSettingRequest.update_mask:type_name -> google.protobuf.FieldMask - 1, // 6: slash.api.v1.UpdateWorkspaceSettingResponse.setting:type_name -> slash.api.v1.WorkspaceSetting - 2, // 7: slash.api.v1.WorkspaceService.GetWorkspaceProfile:input_type -> slash.api.v1.GetWorkspaceProfileRequest - 4, // 8: slash.api.v1.WorkspaceService.GetWorkspaceSetting:input_type -> slash.api.v1.GetWorkspaceSettingRequest - 6, // 9: slash.api.v1.WorkspaceService.UpdateWorkspaceSetting:input_type -> slash.api.v1.UpdateWorkspaceSettingRequest - 3, // 10: slash.api.v1.WorkspaceService.GetWorkspaceProfile:output_type -> slash.api.v1.GetWorkspaceProfileResponse - 5, // 11: slash.api.v1.WorkspaceService.GetWorkspaceSetting:output_type -> slash.api.v1.GetWorkspaceSettingResponse - 7, // 12: slash.api.v1.WorkspaceService.UpdateWorkspaceSetting:output_type -> slash.api.v1.UpdateWorkspaceSettingResponse - 10, // [10:13] is the sub-list for method output_type - 7, // [7:10] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 13, // 0: slash.api.v1.WorkspaceProfile.plan:type_name -> slash.api.v1.PlanType + 14, // 1: slash.api.v1.WorkspaceSetting.default_visibility:type_name -> slash.api.v1.Visibility + 3, // 2: slash.api.v1.WorkspaceSetting.identity_providers:type_name -> slash.api.v1.IdentityProvider + 0, // 3: slash.api.v1.IdentityProvider.type:type_name -> slash.api.v1.IdentityProvider.Type + 4, // 4: slash.api.v1.IdentityProvider.config:type_name -> slash.api.v1.IdentityProviderConfig + 12, // 5: slash.api.v1.IdentityProviderConfig.oauth2:type_name -> slash.api.v1.IdentityProviderConfig.OAuth2Config + 1, // 6: slash.api.v1.GetWorkspaceProfileResponse.profile:type_name -> slash.api.v1.WorkspaceProfile + 2, // 7: slash.api.v1.GetWorkspaceSettingResponse.setting:type_name -> slash.api.v1.WorkspaceSetting + 2, // 8: slash.api.v1.UpdateWorkspaceSettingRequest.setting:type_name -> slash.api.v1.WorkspaceSetting + 15, // 9: slash.api.v1.UpdateWorkspaceSettingRequest.update_mask:type_name -> google.protobuf.FieldMask + 2, // 10: slash.api.v1.UpdateWorkspaceSettingResponse.setting:type_name -> slash.api.v1.WorkspaceSetting + 11, // 11: slash.api.v1.IdentityProviderConfig.OAuth2Config.field_mapping:type_name -> slash.api.v1.IdentityProviderConfig.FieldMapping + 5, // 12: slash.api.v1.WorkspaceService.GetWorkspaceProfile:input_type -> slash.api.v1.GetWorkspaceProfileRequest + 7, // 13: slash.api.v1.WorkspaceService.GetWorkspaceSetting:input_type -> slash.api.v1.GetWorkspaceSettingRequest + 9, // 14: slash.api.v1.WorkspaceService.UpdateWorkspaceSetting:input_type -> slash.api.v1.UpdateWorkspaceSettingRequest + 6, // 15: slash.api.v1.WorkspaceService.GetWorkspaceProfile:output_type -> slash.api.v1.GetWorkspaceProfileResponse + 8, // 16: slash.api.v1.WorkspaceService.GetWorkspaceSetting:output_type -> slash.api.v1.GetWorkspaceSettingResponse + 10, // 17: slash.api.v1.WorkspaceService.UpdateWorkspaceSetting:output_type -> slash.api.v1.UpdateWorkspaceSettingResponse + 15, // [15:18] is the sub-list for method output_type + 12, // [12:15] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_api_v1_workspace_service_proto_init() } @@ -663,7 +1066,7 @@ func file_api_v1_workspace_service_proto_init() { } } file_api_v1_workspace_service_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*GetWorkspaceProfileRequest); i { + switch v := v.(*IdentityProvider); i { case 0: return &v.state case 1: @@ -675,7 +1078,7 @@ func file_api_v1_workspace_service_proto_init() { } } file_api_v1_workspace_service_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*GetWorkspaceProfileResponse); i { + switch v := v.(*IdentityProviderConfig); i { case 0: return &v.state case 1: @@ -687,7 +1090,7 @@ func file_api_v1_workspace_service_proto_init() { } } file_api_v1_workspace_service_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetWorkspaceSettingRequest); i { + switch v := v.(*GetWorkspaceProfileRequest); i { case 0: return &v.state case 1: @@ -699,7 +1102,7 @@ func file_api_v1_workspace_service_proto_init() { } } file_api_v1_workspace_service_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*GetWorkspaceSettingResponse); i { + switch v := v.(*GetWorkspaceProfileResponse); i { case 0: return &v.state case 1: @@ -711,7 +1114,7 @@ func file_api_v1_workspace_service_proto_init() { } } file_api_v1_workspace_service_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*UpdateWorkspaceSettingRequest); i { + switch v := v.(*GetWorkspaceSettingRequest); i { case 0: return &v.state case 1: @@ -723,6 +1126,30 @@ func file_api_v1_workspace_service_proto_init() { } } file_api_v1_workspace_service_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*GetWorkspaceSettingResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_workspace_service_proto_msgTypes[8].Exporter = func(v any, i int) any { + switch v := v.(*UpdateWorkspaceSettingRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_workspace_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UpdateWorkspaceSettingResponse); i { case 0: return &v.state @@ -734,19 +1161,47 @@ func file_api_v1_workspace_service_proto_init() { return nil } } + file_api_v1_workspace_service_proto_msgTypes[10].Exporter = func(v any, i int) any { + switch v := v.(*IdentityProviderConfig_FieldMapping); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_workspace_service_proto_msgTypes[11].Exporter = func(v any, i int) any { + switch v := v.(*IdentityProviderConfig_OAuth2Config); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_api_v1_workspace_service_proto_msgTypes[3].OneofWrappers = []any{ + (*IdentityProviderConfig_Oauth2)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_v1_workspace_service_proto_rawDesc, - NumEnums: 0, - NumMessages: 8, + NumEnums: 1, + NumMessages: 12, NumExtensions: 0, NumServices: 1, }, GoTypes: file_api_v1_workspace_service_proto_goTypes, DependencyIndexes: file_api_v1_workspace_service_proto_depIdxs, + EnumInfos: file_api_v1_workspace_service_proto_enumTypes, MessageInfos: file_api_v1_workspace_service_proto_msgTypes, }.Build() File_api_v1_workspace_service_proto = out.File diff --git a/proto/gen/apidocs.swagger.yaml b/proto/gen/apidocs.swagger.yaml index eb804bd..4282207 100644 --- a/proto/gen/apidocs.swagger.yaml +++ b/proto/gen/apidocs.swagger.yaml @@ -752,6 +752,54 @@ definitions: format: int32 visibility: $ref: '#/definitions/apiv1Visibility' + apiv1IdentityProvider: + type: object + properties: + name: + type: string + type: + $ref: '#/definitions/apiv1IdentityProviderType' + config: + $ref: '#/definitions/apiv1IdentityProviderConfig' + apiv1IdentityProviderConfig: + type: object + properties: + oauth2: + $ref: '#/definitions/apiv1IdentityProviderConfigOAuth2Config' + apiv1IdentityProviderConfigFieldMapping: + type: object + properties: + identifier: + type: string + email: + type: string + displayName: + type: string + apiv1IdentityProviderConfigOAuth2Config: + type: object + properties: + clientId: + type: string + clientSecret: + type: string + authUrl: + type: string + tokenUrl: + type: string + userInfoUrl: + type: string + scopes: + type: array + items: + type: string + fieldMapping: + $ref: '#/definitions/apiv1IdentityProviderConfigFieldMapping' + apiv1IdentityProviderType: + type: string + enum: + - TYPE_UNSPECIFIED + - OAUTH2 + default: TYPE_UNSPECIFIED apiv1OpenGraphMetadata: type: object properties: @@ -860,6 +908,12 @@ definitions: defaultVisibility: $ref: '#/definitions/apiv1Visibility' description: The default visibility of shortcuts and collections. + identityProviders: + type: array + items: + type: object + $ref: '#/definitions/apiv1IdentityProvider' + description: The identity providers. protobufAny: type: object properties: diff --git a/server/route/api/v1/workspace_service.go b/server/route/api/v1/workspace_service.go index ff7244d..7f4de55 100644 --- a/server/route/api/v1/workspace_service.go +++ b/server/route/api/v1/workspace_service.go @@ -66,6 +66,12 @@ func (s *APIV1Service) GetWorkspaceSetting(ctx context.Context, _ *v1pb.GetWorks } else if v.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SHORTCUT_RELATED { shortcutRelatedSetting := v.GetShortcutRelated() workspaceSetting.DefaultVisibility = v1pb.Visibility(shortcutRelatedSetting.GetDefaultVisibility()) + } else if v.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_IDENTITY_PROVIDER { + identityProviderSetting := v.GetIdentityProvider() + workspaceSetting.IdentityProviders = []*v1pb.IdentityProvider{} + for _, identityProvider := range identityProviderSetting.GetIdentityProviders() { + workspaceSetting.IdentityProviders = append(workspaceSetting.IdentityProviders, convertIdentityProviderFromStore(identityProvider)) + } } } return &v1pb.GetWorkspaceSettingResponse{ @@ -151,6 +157,19 @@ func (s *APIV1Service) UpdateWorkspaceSetting(ctx context.Context, request *v1pb }); err != nil { return nil, status.Errorf(codes.Internal, "failed to update workspace setting: %v", err) } + } else if path == "identity_providers" { + identityProviderSetting := &storepb.WorkspaceSetting_IdentityProviderSetting{} + for _, identityProvider := range request.Setting.IdentityProviders { + identityProviderSetting.IdentityProviders = append(identityProviderSetting.IdentityProviders, convertIdentityProviderToStore(identityProvider)) + } + if _, err := s.Store.UpsertWorkspaceSetting(ctx, &storepb.WorkspaceSetting{ + Key: storepb.WorkspaceSettingKey_WORKSPACE_SETTING_IDENTITY_PROVIDER, + Value: &storepb.WorkspaceSetting_IdentityProvider{ + IdentityProvider: identityProviderSetting, + }, + }); err != nil { + return nil, status.Errorf(codes.Internal, "failed to update workspace setting: %v", err) + } } else { return nil, status.Errorf(codes.InvalidArgument, "invalid path: %s", path) } @@ -186,3 +205,73 @@ func (s *APIV1Service) GetInstanceOwner(ctx context.Context) (*v1pb.User, error) ownerCache = convertUserFromStore(user) return ownerCache, nil } + +func convertIdentityProviderFromStore(identityProvider *storepb.IdentityProvider) *v1pb.IdentityProvider { + if identityProvider == nil { + return nil + } + return &v1pb.IdentityProvider{ + Name: identityProvider.Name, + Type: v1pb.IdentityProvider_Type(identityProvider.Type), + Config: convertIdentityProviderConfigFromStore(identityProvider.Config), + } +} + +func convertIdentityProviderConfigFromStore(identityProviderConfig *storepb.IdentityProviderConfig) *v1pb.IdentityProviderConfig { + oauth2Config := identityProviderConfig.GetOauth2() + if oauth2Config != nil { + return &v1pb.IdentityProviderConfig{ + Config: &v1pb.IdentityProviderConfig_Oauth2{ + Oauth2: &v1pb.IdentityProviderConfig_OAuth2Config{ + ClientId: oauth2Config.ClientId, + ClientSecret: oauth2Config.ClientSecret, + AuthUrl: oauth2Config.AuthUrl, + TokenUrl: oauth2Config.TokenUrl, + UserInfoUrl: oauth2Config.UserInfoUrl, + Scopes: oauth2Config.Scopes, + FieldMapping: &v1pb.IdentityProviderConfig_FieldMapping{ + Identifier: oauth2Config.FieldMapping.Identifier, + Email: oauth2Config.FieldMapping.Email, + DisplayName: oauth2Config.FieldMapping.DisplayName, + }, + }, + }, + } + } + return nil +} + +func convertIdentityProviderToStore(identityProvider *v1pb.IdentityProvider) *storepb.IdentityProvider { + if identityProvider == nil { + return nil + } + return &storepb.IdentityProvider{ + Name: identityProvider.Name, + Type: storepb.IdentityProvider_Type(identityProvider.Type), + Config: convertIdentityProviderConfigToStore(identityProvider.Config), + } +} + +func convertIdentityProviderConfigToStore(identityProviderConfig *v1pb.IdentityProviderConfig) *storepb.IdentityProviderConfig { + oauth2Config := identityProviderConfig.GetOauth2() + if oauth2Config != nil { + return &storepb.IdentityProviderConfig{ + Config: &storepb.IdentityProviderConfig_Oauth2{ + Oauth2: &storepb.IdentityProviderConfig_OAuth2Config{ + ClientId: oauth2Config.ClientId, + ClientSecret: oauth2Config.ClientSecret, + AuthUrl: oauth2Config.AuthUrl, + TokenUrl: oauth2Config.TokenUrl, + UserInfoUrl: oauth2Config.UserInfoUrl, + Scopes: oauth2Config.Scopes, + FieldMapping: &storepb.IdentityProviderConfig_FieldMapping{ + Identifier: oauth2Config.FieldMapping.Identifier, + Email: oauth2Config.FieldMapping.Email, + DisplayName: oauth2Config.FieldMapping.DisplayName, + }, + }, + }, + } + } + return nil +} diff --git a/store/db/postgres/workspace_setting.go b/store/db/postgres/workspace_setting.go index 6a52532..10f2e43 100644 --- a/store/db/postgres/workspace_setting.go +++ b/store/db/postgres/workspace_setting.go @@ -35,6 +35,12 @@ func (d *DB) UpsertWorkspaceSetting(ctx context.Context, upsert *storepb.Workspa return nil, err } valueString = string(valueBytes) + } else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_IDENTITY_PROVIDER { + valueBytes, err := protojson.Marshal(upsert.GetIdentityProvider()) + if err != nil { + return nil, err + } + valueString = string(valueBytes) } else { return nil, errors.New("invalid workspace setting key") } @@ -94,6 +100,14 @@ func (d *DB) ListWorkspaceSettings(ctx context.Context, find *store.FindWorkspac workspaceSetting.Value = &storepb.WorkspaceSetting_ShortcutRelated{ ShortcutRelated: workspaceSettingShortcutRelated, } + } else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_IDENTITY_PROVIDER { + workspaceSettingIdentityProvider := &storepb.WorkspaceSetting_IdentityProviderSetting{} + if err := protojsonUnmarshaler.Unmarshal([]byte(valueString), workspaceSettingIdentityProvider); err != nil { + return nil, err + } + workspaceSetting.Value = &storepb.WorkspaceSetting_IdentityProvider{ + IdentityProvider: workspaceSettingIdentityProvider, + } } else if slices.Contains([]storepb.WorkspaceSettingKey{ storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY, storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION, diff --git a/store/db/sqlite/workspace_setting.go b/store/db/sqlite/workspace_setting.go index 06d465d..60adba0 100644 --- a/store/db/sqlite/workspace_setting.go +++ b/store/db/sqlite/workspace_setting.go @@ -35,6 +35,12 @@ func (d *DB) UpsertWorkspaceSetting(ctx context.Context, upsert *storepb.Workspa return nil, err } valueString = string(valueBytes) + } else if upsert.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_IDENTITY_PROVIDER { + valueBytes, err := protojson.Marshal(upsert.GetIdentityProvider()) + if err != nil { + return nil, err + } + valueString = string(valueBytes) } else { return nil, errors.New("invalid workspace setting key") } @@ -94,6 +100,14 @@ func (d *DB) ListWorkspaceSettings(ctx context.Context, find *store.FindWorkspac workspaceSetting.Value = &storepb.WorkspaceSetting_ShortcutRelated{ ShortcutRelated: workspaceSettingShortcutRelated, } + } else if workspaceSetting.Key == storepb.WorkspaceSettingKey_WORKSPACE_SETTING_IDENTITY_PROVIDER { + workspaceSettingIdentityProvider := &storepb.WorkspaceSetting_IdentityProviderSetting{} + if err := protojsonUnmarshaler.Unmarshal([]byte(valueString), workspaceSettingIdentityProvider); err != nil { + return nil, err + } + workspaceSetting.Value = &storepb.WorkspaceSetting_IdentityProvider{ + IdentityProvider: workspaceSettingIdentityProvider, + } } else if slices.Contains([]storepb.WorkspaceSettingKey{ storepb.WorkspaceSettingKey_WORKSPACE_SETTING_LICENSE_KEY, storepb.WorkspaceSettingKey_WORKSPACE_SETTING_SECRET_SESSION,