implements TeamDB {
searchTerm: `%${searchTerm}%`,
});
}
- queryBuilder = queryBuilder.andWhere("markedDeleted = 0").skip(offset).take(limit).orderBy(orderBy, orderDir);
+ queryBuilder = queryBuilder.andWhere("markedDeleted = 0").skip(offset);
+ if (limit) {
+ queryBuilder = queryBuilder.take(limit);
+ }
+ queryBuilder = queryBuilder.orderBy(orderBy, orderDir);
const [rows, total] = await queryBuilder.getManyAndCount();
return { total, rows };
diff --git a/components/gitpod-protocol/go/gitpod-service.go b/components/gitpod-protocol/go/gitpod-service.go
index 9f1711422fac3f..235cbb2dd7f6d7 100644
--- a/components/gitpod-protocol/go/gitpod-service.go
+++ b/components/gitpod-protocol/go/gitpod-service.go
@@ -1878,8 +1878,7 @@ type VSCodeConfig struct {
// Configuration is the Configuration message type
type Configuration struct {
- DaysBeforeGarbageCollection float64 `json:"daysBeforeGarbageCollection,omitempty"`
- GarbageCollectionStartDate float64 `json:"garbageCollectionStartDate,omitempty"`
+ IsDedicatedInstallation bool `json:"isDedicatedInstallation,omitempty"`
}
// EnvVar is the EnvVar message type
diff --git a/components/gitpod-protocol/src/gitpod-service.ts b/components/gitpod-protocol/src/gitpod-service.ts
index efbf5dd900ecbd..f08313b90a5055 100644
--- a/components/gitpod-protocol/src/gitpod-service.ts
+++ b/components/gitpod-protocol/src/gitpod-service.ts
@@ -489,11 +489,10 @@ export namespace GitpodServer {
* Whether this Gitpod instance is already configured with SSO.
*/
readonly isCompleted: boolean;
-
/**
- * Whether this Gitpod instance has at least one org.
+ * Total number of organizations.
*/
- readonly hasAnyOrg: boolean;
+ readonly organizationCountTotal: number;
}
}
diff --git a/components/gitpod-protocol/src/protocol.ts b/components/gitpod-protocol/src/protocol.ts
index 11ddc6faff13ca..59a3f23e1cecdb 100644
--- a/components/gitpod-protocol/src/protocol.ts
+++ b/components/gitpod-protocol/src/protocol.ts
@@ -1456,9 +1456,7 @@ export namespace AuthProviderEntry {
}
export interface Configuration {
- readonly daysBeforeGarbageCollection: number;
- readonly garbageCollectionStartDate: number;
- readonly isSingleOrgInstallation: boolean;
+ readonly isDedicatedInstallation: boolean;
}
export interface StripeConfig {
diff --git a/components/public-api/gitpod/v1/installation.proto b/components/public-api/gitpod/v1/installation.proto
index 3fe6ddf67fbc3f..f76065c5e440c7 100644
--- a/components/public-api/gitpod/v1/installation.proto
+++ b/components/public-api/gitpod/v1/installation.proto
@@ -31,6 +31,9 @@ service InstallationService {
// GetOnboardingState returns the onboarding state of the installation.
rpc GetOnboardingState(GetOnboardingStateRequest) returns (GetOnboardingStateResponse) {}
+
+ // GetInstallationConfiguration returns configuration of the installation.
+ rpc GetInstallationConfiguration(GetInstallationConfigurationRequest) returns (GetInstallationConfigurationResponse) {}
}
message GetOnboardingStateRequest {}
@@ -39,7 +42,11 @@ message GetOnboardingStateResponse {
}
message OnboardingState {
+ // Whether at least one organization has completed the onboarding
bool completed = 1;
+
+ // The total number of organizations
+ int32 organization_count_total = 2;
}
message GetInstallationWorkspaceDefaultImageRequest {}
@@ -144,3 +151,11 @@ message BlockedEmailDomain {
bool negative = 3;
}
+
+message GetInstallationConfigurationRequest {}
+message GetInstallationConfigurationResponse {
+ InstallationConfiguration configuration = 1;
+}
+message InstallationConfiguration {
+ bool is_dedicated_installation = 1;
+}
diff --git a/components/public-api/go/v1/installation.pb.go b/components/public-api/go/v1/installation.pb.go
index c12a5d60ffd9a1..47a39003af1c85 100644
--- a/components/public-api/go/v1/installation.pb.go
+++ b/components/public-api/go/v1/installation.pb.go
@@ -115,7 +115,10 @@ type OnboardingState struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
+ // Whether at least one organization has completed the onboarding
Completed bool `protobuf:"varint,1,opt,name=completed,proto3" json:"completed,omitempty"`
+ // The total number of organizations
+ OrganizationCountTotal int32 `protobuf:"varint,2,opt,name=organization_count_total,json=organizationCountTotal,proto3" json:"organization_count_total,omitempty"`
}
func (x *OnboardingState) Reset() {
@@ -157,6 +160,13 @@ func (x *OnboardingState) GetCompleted() bool {
return false
}
+func (x *OnboardingState) GetOrganizationCountTotal() int32 {
+ if x != nil {
+ return x.OrganizationCountTotal
+ }
+ return 0
+}
+
type GetInstallationWorkspaceDefaultImageRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -933,6 +943,138 @@ func (x *BlockedEmailDomain) GetNegative() bool {
return false
}
+type GetInstallationConfigurationRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *GetInstallationConfigurationRequest) Reset() {
+ *x = GetInstallationConfigurationRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_gitpod_v1_installation_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetInstallationConfigurationRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetInstallationConfigurationRequest) ProtoMessage() {}
+
+func (x *GetInstallationConfigurationRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_gitpod_v1_installation_proto_msgTypes[17]
+ 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 GetInstallationConfigurationRequest.ProtoReflect.Descriptor instead.
+func (*GetInstallationConfigurationRequest) Descriptor() ([]byte, []int) {
+ return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{17}
+}
+
+type GetInstallationConfigurationResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Configuration *InstallationConfiguration `protobuf:"bytes,1,opt,name=configuration,proto3" json:"configuration,omitempty"`
+}
+
+func (x *GetInstallationConfigurationResponse) Reset() {
+ *x = GetInstallationConfigurationResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_gitpod_v1_installation_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GetInstallationConfigurationResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetInstallationConfigurationResponse) ProtoMessage() {}
+
+func (x *GetInstallationConfigurationResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_gitpod_v1_installation_proto_msgTypes[18]
+ 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 GetInstallationConfigurationResponse.ProtoReflect.Descriptor instead.
+func (*GetInstallationConfigurationResponse) Descriptor() ([]byte, []int) {
+ return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *GetInstallationConfigurationResponse) GetConfiguration() *InstallationConfiguration {
+ if x != nil {
+ return x.Configuration
+ }
+ return nil
+}
+
+type InstallationConfiguration struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ IsDedicatedInstallation bool `protobuf:"varint,1,opt,name=is_dedicated_installation,json=isDedicatedInstallation,proto3" json:"is_dedicated_installation,omitempty"`
+}
+
+func (x *InstallationConfiguration) Reset() {
+ *x = InstallationConfiguration{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_gitpod_v1_installation_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *InstallationConfiguration) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InstallationConfiguration) ProtoMessage() {}
+
+func (x *InstallationConfiguration) ProtoReflect() protoreflect.Message {
+ mi := &file_gitpod_v1_installation_proto_msgTypes[19]
+ 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 InstallationConfiguration.ProtoReflect.Descriptor instead.
+func (*InstallationConfiguration) Descriptor() ([]byte, []int) {
+ return file_gitpod_v1_installation_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *InstallationConfiguration) GetIsDedicatedInstallation() bool {
+ if x != nil {
+ return x.IsDedicatedInstallation
+ }
+ return false
+}
+
var File_gitpod_v1_installation_proto protoreflect.FileDescriptor
var file_gitpod_v1_installation_proto_rawDesc = []byte{
@@ -952,176 +1094,203 @@ var file_gitpod_v1_installation_proto_rawDesc = []byte{
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31,
0x2e, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65,
0x52, 0x0f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74,
- 0x65, 0x22, 0x2f, 0x0a, 0x0f, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53,
+ 0x65, 0x22, 0x69, 0x0a, 0x0f, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53,
0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
- 0x65, 0x64, 0x22, 0x2d, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65,
- 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x22, 0x66, 0x0a, 0x2c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66,
- 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x36, 0x0a, 0x17, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x77, 0x6f, 0x72,
- 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x1e, 0x4c, 0x69,
- 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a,
- 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67,
- 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a,
- 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x6f,
- 0x72, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f,
- 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12,
- 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x65, 0x72, 0x6d,
- 0x22, 0xb1, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64,
- 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f,
- 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72,
- 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c,
- 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52,
- 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x69, 0x65, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42,
- 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x72,
- 0x65, 0x67, 0x65, 0x78, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x72, 0x6c,
- 0x52, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f,
- 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63,
- 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x66,
- 0x72, 0x65, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x65, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x22,
- 0x6e, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64,
- 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x12, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65,
- 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
- 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
- 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x11, 0x62, 0x6c,
- 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22,
- 0x54, 0x0a, 0x1e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64,
+ 0x65, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x2d, 0x0a, 0x2b,
+ 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57,
+ 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49,
+ 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x2c, 0x47,
+ 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f,
+ 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d,
+ 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x64,
+ 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x65,
+ 0x66, 0x61, 0x75, 0x6c, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d,
+ 0x61, 0x67, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63,
+ 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74,
+ 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x53,
+ 0x6f, 0x72, 0x74, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61,
+ 0x72, 0x63, 0x68, 0x5f, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a,
+ 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x65, 0x72, 0x6d, 0x22, 0xb1, 0x01, 0x0a, 0x1f, 0x4c,
+ 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d,
+ 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50,
+ 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a,
+ 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
+ 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69,
+ 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52,
+ 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
+ 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x88,
+ 0x01, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64,
0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x32, 0x0a, 0x15, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
- 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22, 0x21, 0x0a, 0x1f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42,
- 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74,
- 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61,
- 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x61,
- 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
- 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61,
- 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb3, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73,
- 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d,
- 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a,
- 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67,
- 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52,
- 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x15, 0x62,
- 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x64, 0x6f, 0x6d,
- 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74,
- 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d,
- 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
- 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x55,
- 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45,
- 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x67,
- 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x65, 0x67,
- 0x61, 0x74, 0x69, 0x76, 0x65, 0x22, 0x73, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42,
- 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x14, 0x62, 0x6c, 0x6f,
- 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69,
- 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64,
- 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c,
- 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x12, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45,
- 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x89, 0x02, 0x0a, 0x11, 0x42,
- 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
- 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64,
- 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x72, 0x6c, 0x52, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12,
- 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20,
- 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x3f,
- 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
- 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
- 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12,
- 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
- 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10,
- 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65,
- 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x65,
- 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x12, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65,
- 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02,
- 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06,
- 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f,
- 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65,
- 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65,
- 0x32, 0xdd, 0x06, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74,
- 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67,
- 0x65, 0x12, 0x36, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
- 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
- 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61,
- 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x70,
- 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65,
- 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63,
- 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12,
- 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74,
- 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
- 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74,
- 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
- 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74,
- 0x6f, 0x72, 0x79, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a,
- 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
- 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17,
- 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70,
- 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64,
- 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65,
- 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f,
- 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x72, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45,
- 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x67, 0x69,
- 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63,
- 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e,
- 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d,
- 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c,
+ 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x72, 0x6c, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x72, 0x6c, 0x52, 0x65, 0x67, 0x65, 0x78, 0x70,
+ 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12,
+ 0x28, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x5f, 0x75, 0x73,
+ 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
+ 0x46, 0x72, 0x65, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65, 0x22, 0x6e, 0x0a, 0x1f, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x12,
+ 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f,
+ 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f,
+ 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f,
+ 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x11, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52,
+ 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x1e, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x62,
+ 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
+ 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63,
+ 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x64, 0x22,
+ 0x21, 0x0a, 0x1f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64,
+ 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x5e, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65,
+ 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f,
+ 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0xb3, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b,
+ 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74,
+ 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x15, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64,
+ 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02,
+ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31,
+ 0x2e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d,
+ 0x61, 0x69, 0x6e, 0x52, 0x13, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69,
+ 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x55, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f,
+ 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64,
+ 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d,
+ 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x22,
+ 0x73, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64,
+ 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x14, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65,
+ 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6c,
0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
- 0x12, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44,
- 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67,
+ 0x52, 0x12, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f,
+ 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x89, 0x02, 0x0a, 0x11, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64,
+ 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x72,
+ 0x6c, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+ 0x75, 0x72, 0x6c, 0x52, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f,
+ 0x63, 0x6b, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x62,
+ 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
+ 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x63, 0x72, 0x65,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
+ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+ 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f,
+ 0x66, 0x72, 0x65, 0x65, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08,
+ 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x65, 0x65, 0x55, 0x73, 0x61, 0x67, 0x65,
+ 0x22, 0x58, 0x0a, 0x12, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c,
+ 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a,
+ 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08,
+ 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x22, 0x25, 0x0a, 0x23, 0x47, 0x65,
+ 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e,
+ 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x22, 0x72, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0d, 0x63, 0x6f, 0x6e,
+ 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x73,
+ 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
+ 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x57, 0x0a, 0x19, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x19, 0x69, 0x73, 0x5f, 0x64, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74,
+ 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x73, 0x44, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74,
+ 0x65, 0x64, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0xe1,
+ 0x07, 0x0a, 0x13, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x99, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x49, 0x6e,
+ 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12,
+ 0x36, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49,
+ 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64,
+ 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x66, 0x61,
+ 0x75, 0x6c, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65,
+ 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x29, 0x2e,
+ 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c,
+ 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f,
+ 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64,
+ 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72,
+ 0x79, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67,
0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42,
- 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69,
- 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x47,
- 0x65, 0x74, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74,
- 0x65, 0x12, 0x24, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
- 0x74, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64,
- 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e,
- 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x42, 0x51, 0x0a, 0x16, 0x69, 0x6f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x70, 0x75,
- 0x62, 0x6c, 0x69, 0x63, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x5a, 0x37, 0x67, 0x69, 0x74, 0x68,
- 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, 0x6f,
- 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
- 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f,
- 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x17, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73,
+ 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76,
+ 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52,
+ 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x72,
+ 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61,
+ 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x67, 0x69, 0x74, 0x70,
+ 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65,
+ 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31,
+ 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69,
+ 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x75, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f, 0x63,
+ 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2a,
+ 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d,
+ 0x61, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x67, 0x69, 0x74,
+ 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x6c, 0x6f,
+ 0x63, 0x6b, 0x65, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x12, 0x47, 0x65, 0x74,
+ 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
+ 0x24, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f,
+ 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76,
+ 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x53,
+ 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x81,
+ 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+ 0x2e, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49,
+ 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+ 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x2f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49,
+ 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69,
+ 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x42, 0x51, 0x0a, 0x16, 0x69, 0x6f, 0x2e, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2e,
+ 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x5a, 0x37, 0x67, 0x69,
+ 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2d,
+ 0x69, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e,
+ 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2d, 0x61, 0x70, 0x69, 0x2f,
+ 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1136,7 +1305,7 @@ func file_gitpod_v1_installation_proto_rawDescGZIP() []byte {
return file_gitpod_v1_installation_proto_rawDescData
}
-var file_gitpod_v1_installation_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
+var file_gitpod_v1_installation_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_gitpod_v1_installation_proto_goTypes = []interface{}{
(*GetOnboardingStateRequest)(nil), // 0: gitpod.v1.GetOnboardingStateRequest
(*GetOnboardingStateResponse)(nil), // 1: gitpod.v1.GetOnboardingStateResponse
@@ -1155,43 +1324,49 @@ var file_gitpod_v1_installation_proto_goTypes = []interface{}{
(*CreateBlockedEmailDomainResponse)(nil), // 14: gitpod.v1.CreateBlockedEmailDomainResponse
(*BlockedRepository)(nil), // 15: gitpod.v1.BlockedRepository
(*BlockedEmailDomain)(nil), // 16: gitpod.v1.BlockedEmailDomain
- (*PaginationRequest)(nil), // 17: gitpod.v1.PaginationRequest
- (*Sort)(nil), // 18: gitpod.v1.Sort
- (*PaginationResponse)(nil), // 19: gitpod.v1.PaginationResponse
- (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp
+ (*GetInstallationConfigurationRequest)(nil), // 17: gitpod.v1.GetInstallationConfigurationRequest
+ (*GetInstallationConfigurationResponse)(nil), // 18: gitpod.v1.GetInstallationConfigurationResponse
+ (*InstallationConfiguration)(nil), // 19: gitpod.v1.InstallationConfiguration
+ (*PaginationRequest)(nil), // 20: gitpod.v1.PaginationRequest
+ (*Sort)(nil), // 21: gitpod.v1.Sort
+ (*PaginationResponse)(nil), // 22: gitpod.v1.PaginationResponse
+ (*timestamppb.Timestamp)(nil), // 23: google.protobuf.Timestamp
}
var file_gitpod_v1_installation_proto_depIdxs = []int32{
2, // 0: gitpod.v1.GetOnboardingStateResponse.onboarding_state:type_name -> gitpod.v1.OnboardingState
- 17, // 1: gitpod.v1.ListBlockedRepositoriesRequest.pagination:type_name -> gitpod.v1.PaginationRequest
- 18, // 2: gitpod.v1.ListBlockedRepositoriesRequest.sort:type_name -> gitpod.v1.Sort
- 19, // 3: gitpod.v1.ListBlockedRepositoriesResponse.pagination:type_name -> gitpod.v1.PaginationResponse
+ 20, // 1: gitpod.v1.ListBlockedRepositoriesRequest.pagination:type_name -> gitpod.v1.PaginationRequest
+ 21, // 2: gitpod.v1.ListBlockedRepositoriesRequest.sort:type_name -> gitpod.v1.Sort
+ 22, // 3: gitpod.v1.ListBlockedRepositoriesResponse.pagination:type_name -> gitpod.v1.PaginationResponse
15, // 4: gitpod.v1.ListBlockedRepositoriesResponse.blocked_repositories:type_name -> gitpod.v1.BlockedRepository
15, // 5: gitpod.v1.CreateBlockedRepositoryResponse.blocked_repository:type_name -> gitpod.v1.BlockedRepository
- 17, // 6: gitpod.v1.ListBlockedEmailDomainsRequest.pagination:type_name -> gitpod.v1.PaginationRequest
- 19, // 7: gitpod.v1.ListBlockedEmailDomainsResponse.pagination:type_name -> gitpod.v1.PaginationResponse
+ 20, // 6: gitpod.v1.ListBlockedEmailDomainsRequest.pagination:type_name -> gitpod.v1.PaginationRequest
+ 22, // 7: gitpod.v1.ListBlockedEmailDomainsResponse.pagination:type_name -> gitpod.v1.PaginationResponse
16, // 8: gitpod.v1.ListBlockedEmailDomainsResponse.blocked_email_domains:type_name -> gitpod.v1.BlockedEmailDomain
16, // 9: gitpod.v1.CreateBlockedEmailDomainResponse.blocked_email_domain:type_name -> gitpod.v1.BlockedEmailDomain
- 20, // 10: gitpod.v1.BlockedRepository.creation_time:type_name -> google.protobuf.Timestamp
- 20, // 11: gitpod.v1.BlockedRepository.update_time:type_name -> google.protobuf.Timestamp
- 3, // 12: gitpod.v1.InstallationService.GetInstallationWorkspaceDefaultImage:input_type -> gitpod.v1.GetInstallationWorkspaceDefaultImageRequest
- 5, // 13: gitpod.v1.InstallationService.ListBlockedRepositories:input_type -> gitpod.v1.ListBlockedRepositoriesRequest
- 7, // 14: gitpod.v1.InstallationService.CreateBlockedRepository:input_type -> gitpod.v1.CreateBlockedRepositoryRequest
- 9, // 15: gitpod.v1.InstallationService.DeleteBlockedRepository:input_type -> gitpod.v1.DeleteBlockedRepositoryRequest
- 11, // 16: gitpod.v1.InstallationService.ListBlockedEmailDomains:input_type -> gitpod.v1.ListBlockedEmailDomainsRequest
- 13, // 17: gitpod.v1.InstallationService.CreateBlockedEmailDomain:input_type -> gitpod.v1.CreateBlockedEmailDomainRequest
- 0, // 18: gitpod.v1.InstallationService.GetOnboardingState:input_type -> gitpod.v1.GetOnboardingStateRequest
- 4, // 19: gitpod.v1.InstallationService.GetInstallationWorkspaceDefaultImage:output_type -> gitpod.v1.GetInstallationWorkspaceDefaultImageResponse
- 6, // 20: gitpod.v1.InstallationService.ListBlockedRepositories:output_type -> gitpod.v1.ListBlockedRepositoriesResponse
- 8, // 21: gitpod.v1.InstallationService.CreateBlockedRepository:output_type -> gitpod.v1.CreateBlockedRepositoryResponse
- 10, // 22: gitpod.v1.InstallationService.DeleteBlockedRepository:output_type -> gitpod.v1.DeleteBlockedRepositoryResponse
- 12, // 23: gitpod.v1.InstallationService.ListBlockedEmailDomains:output_type -> gitpod.v1.ListBlockedEmailDomainsResponse
- 14, // 24: gitpod.v1.InstallationService.CreateBlockedEmailDomain:output_type -> gitpod.v1.CreateBlockedEmailDomainResponse
- 1, // 25: gitpod.v1.InstallationService.GetOnboardingState:output_type -> gitpod.v1.GetOnboardingStateResponse
- 19, // [19:26] is the sub-list for method output_type
- 12, // [12:19] 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
+ 23, // 10: gitpod.v1.BlockedRepository.creation_time:type_name -> google.protobuf.Timestamp
+ 23, // 11: gitpod.v1.BlockedRepository.update_time:type_name -> google.protobuf.Timestamp
+ 19, // 12: gitpod.v1.GetInstallationConfigurationResponse.configuration:type_name -> gitpod.v1.InstallationConfiguration
+ 3, // 13: gitpod.v1.InstallationService.GetInstallationWorkspaceDefaultImage:input_type -> gitpod.v1.GetInstallationWorkspaceDefaultImageRequest
+ 5, // 14: gitpod.v1.InstallationService.ListBlockedRepositories:input_type -> gitpod.v1.ListBlockedRepositoriesRequest
+ 7, // 15: gitpod.v1.InstallationService.CreateBlockedRepository:input_type -> gitpod.v1.CreateBlockedRepositoryRequest
+ 9, // 16: gitpod.v1.InstallationService.DeleteBlockedRepository:input_type -> gitpod.v1.DeleteBlockedRepositoryRequest
+ 11, // 17: gitpod.v1.InstallationService.ListBlockedEmailDomains:input_type -> gitpod.v1.ListBlockedEmailDomainsRequest
+ 13, // 18: gitpod.v1.InstallationService.CreateBlockedEmailDomain:input_type -> gitpod.v1.CreateBlockedEmailDomainRequest
+ 0, // 19: gitpod.v1.InstallationService.GetOnboardingState:input_type -> gitpod.v1.GetOnboardingStateRequest
+ 17, // 20: gitpod.v1.InstallationService.GetInstallationConfiguration:input_type -> gitpod.v1.GetInstallationConfigurationRequest
+ 4, // 21: gitpod.v1.InstallationService.GetInstallationWorkspaceDefaultImage:output_type -> gitpod.v1.GetInstallationWorkspaceDefaultImageResponse
+ 6, // 22: gitpod.v1.InstallationService.ListBlockedRepositories:output_type -> gitpod.v1.ListBlockedRepositoriesResponse
+ 8, // 23: gitpod.v1.InstallationService.CreateBlockedRepository:output_type -> gitpod.v1.CreateBlockedRepositoryResponse
+ 10, // 24: gitpod.v1.InstallationService.DeleteBlockedRepository:output_type -> gitpod.v1.DeleteBlockedRepositoryResponse
+ 12, // 25: gitpod.v1.InstallationService.ListBlockedEmailDomains:output_type -> gitpod.v1.ListBlockedEmailDomainsResponse
+ 14, // 26: gitpod.v1.InstallationService.CreateBlockedEmailDomain:output_type -> gitpod.v1.CreateBlockedEmailDomainResponse
+ 1, // 27: gitpod.v1.InstallationService.GetOnboardingState:output_type -> gitpod.v1.GetOnboardingStateResponse
+ 18, // 28: gitpod.v1.InstallationService.GetInstallationConfiguration:output_type -> gitpod.v1.GetInstallationConfigurationResponse
+ 21, // [21:29] is the sub-list for method output_type
+ 13, // [13:21] is the sub-list for method input_type
+ 13, // [13:13] is the sub-list for extension type_name
+ 13, // [13:13] is the sub-list for extension extendee
+ 0, // [0:13] is the sub-list for field type_name
}
func init() { file_gitpod_v1_installation_proto_init() }
@@ -1406,6 +1581,42 @@ func file_gitpod_v1_installation_proto_init() {
return nil
}
}
+ file_gitpod_v1_installation_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetInstallationConfigurationRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_gitpod_v1_installation_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GetInstallationConfigurationResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_gitpod_v1_installation_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*InstallationConfiguration); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
}
type x struct{}
out := protoimpl.TypeBuilder{
@@ -1413,7 +1624,7 @@ func file_gitpod_v1_installation_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_gitpod_v1_installation_proto_rawDesc,
NumEnums: 0,
- NumMessages: 17,
+ NumMessages: 20,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/components/public-api/go/v1/installation_grpc.pb.go b/components/public-api/go/v1/installation_grpc.pb.go
index 12be3b12049081..0f5ffd0a374b94 100644
--- a/components/public-api/go/v1/installation_grpc.pb.go
+++ b/components/public-api/go/v1/installation_grpc.pb.go
@@ -41,6 +41,8 @@ type InstallationServiceClient interface {
CreateBlockedEmailDomain(ctx context.Context, in *CreateBlockedEmailDomainRequest, opts ...grpc.CallOption) (*CreateBlockedEmailDomainResponse, error)
// GetOnboardingState returns the onboarding state of the installation.
GetOnboardingState(ctx context.Context, in *GetOnboardingStateRequest, opts ...grpc.CallOption) (*GetOnboardingStateResponse, error)
+ // GetInstallationConfiguration returns configuration of the installation.
+ GetInstallationConfiguration(ctx context.Context, in *GetInstallationConfigurationRequest, opts ...grpc.CallOption) (*GetInstallationConfigurationResponse, error)
}
type installationServiceClient struct {
@@ -114,6 +116,15 @@ func (c *installationServiceClient) GetOnboardingState(ctx context.Context, in *
return out, nil
}
+func (c *installationServiceClient) GetInstallationConfiguration(ctx context.Context, in *GetInstallationConfigurationRequest, opts ...grpc.CallOption) (*GetInstallationConfigurationResponse, error) {
+ out := new(GetInstallationConfigurationResponse)
+ err := c.cc.Invoke(ctx, "/gitpod.v1.InstallationService/GetInstallationConfiguration", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
// InstallationServiceServer is the server API for InstallationService service.
// All implementations must embed UnimplementedInstallationServiceServer
// for forward compatibility
@@ -133,6 +144,8 @@ type InstallationServiceServer interface {
CreateBlockedEmailDomain(context.Context, *CreateBlockedEmailDomainRequest) (*CreateBlockedEmailDomainResponse, error)
// GetOnboardingState returns the onboarding state of the installation.
GetOnboardingState(context.Context, *GetOnboardingStateRequest) (*GetOnboardingStateResponse, error)
+ // GetInstallationConfiguration returns configuration of the installation.
+ GetInstallationConfiguration(context.Context, *GetInstallationConfigurationRequest) (*GetInstallationConfigurationResponse, error)
mustEmbedUnimplementedInstallationServiceServer()
}
@@ -161,6 +174,9 @@ func (UnimplementedInstallationServiceServer) CreateBlockedEmailDomain(context.C
func (UnimplementedInstallationServiceServer) GetOnboardingState(context.Context, *GetOnboardingStateRequest) (*GetOnboardingStateResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetOnboardingState not implemented")
}
+func (UnimplementedInstallationServiceServer) GetInstallationConfiguration(context.Context, *GetInstallationConfigurationRequest) (*GetInstallationConfigurationResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method GetInstallationConfiguration not implemented")
+}
func (UnimplementedInstallationServiceServer) mustEmbedUnimplementedInstallationServiceServer() {}
// UnsafeInstallationServiceServer may be embedded to opt out of forward compatibility for this service.
@@ -300,6 +316,24 @@ func _InstallationService_GetOnboardingState_Handler(srv interface{}, ctx contex
return interceptor(ctx, in, info, handler)
}
+func _InstallationService_GetInstallationConfiguration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GetInstallationConfigurationRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(InstallationServiceServer).GetInstallationConfiguration(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/gitpod.v1.InstallationService/GetInstallationConfiguration",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(InstallationServiceServer).GetInstallationConfiguration(ctx, req.(*GetInstallationConfigurationRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
// InstallationService_ServiceDesc is the grpc.ServiceDesc for InstallationService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
@@ -335,6 +369,10 @@ var InstallationService_ServiceDesc = grpc.ServiceDesc{
MethodName: "GetOnboardingState",
Handler: _InstallationService_GetOnboardingState_Handler,
},
+ {
+ MethodName: "GetInstallationConfiguration",
+ Handler: _InstallationService_GetInstallationConfiguration_Handler,
+ },
},
Streams: []grpc.StreamDesc{},
Metadata: "gitpod/v1/installation.proto",
diff --git a/components/public-api/go/v1/v1connect/installation.connect.go b/components/public-api/go/v1/v1connect/installation.connect.go
index 211540b94a6fd9..9cfe7648df4071 100644
--- a/components/public-api/go/v1/v1connect/installation.connect.go
+++ b/components/public-api/go/v1/v1connect/installation.connect.go
@@ -46,6 +46,8 @@ type InstallationServiceClient interface {
CreateBlockedEmailDomain(context.Context, *connect_go.Request[v1.CreateBlockedEmailDomainRequest]) (*connect_go.Response[v1.CreateBlockedEmailDomainResponse], error)
// GetOnboardingState returns the onboarding state of the installation.
GetOnboardingState(context.Context, *connect_go.Request[v1.GetOnboardingStateRequest]) (*connect_go.Response[v1.GetOnboardingStateResponse], error)
+ // GetInstallationConfiguration returns configuration of the installation.
+ GetInstallationConfiguration(context.Context, *connect_go.Request[v1.GetInstallationConfigurationRequest]) (*connect_go.Response[v1.GetInstallationConfigurationResponse], error)
}
// NewInstallationServiceClient constructs a client for the gitpod.v1.InstallationService service.
@@ -93,6 +95,11 @@ func NewInstallationServiceClient(httpClient connect_go.HTTPClient, baseURL stri
baseURL+"/gitpod.v1.InstallationService/GetOnboardingState",
opts...,
),
+ getInstallationConfiguration: connect_go.NewClient[v1.GetInstallationConfigurationRequest, v1.GetInstallationConfigurationResponse](
+ httpClient,
+ baseURL+"/gitpod.v1.InstallationService/GetInstallationConfiguration",
+ opts...,
+ ),
}
}
@@ -105,6 +112,7 @@ type installationServiceClient struct {
listBlockedEmailDomains *connect_go.Client[v1.ListBlockedEmailDomainsRequest, v1.ListBlockedEmailDomainsResponse]
createBlockedEmailDomain *connect_go.Client[v1.CreateBlockedEmailDomainRequest, v1.CreateBlockedEmailDomainResponse]
getOnboardingState *connect_go.Client[v1.GetOnboardingStateRequest, v1.GetOnboardingStateResponse]
+ getInstallationConfiguration *connect_go.Client[v1.GetInstallationConfigurationRequest, v1.GetInstallationConfigurationResponse]
}
// GetInstallationWorkspaceDefaultImage calls
@@ -143,6 +151,11 @@ func (c *installationServiceClient) GetOnboardingState(ctx context.Context, req
return c.getOnboardingState.CallUnary(ctx, req)
}
+// GetInstallationConfiguration calls gitpod.v1.InstallationService.GetInstallationConfiguration.
+func (c *installationServiceClient) GetInstallationConfiguration(ctx context.Context, req *connect_go.Request[v1.GetInstallationConfigurationRequest]) (*connect_go.Response[v1.GetInstallationConfigurationResponse], error) {
+ return c.getInstallationConfiguration.CallUnary(ctx, req)
+}
+
// InstallationServiceHandler is an implementation of the gitpod.v1.InstallationService service.
type InstallationServiceHandler interface {
// GetInstallationWorkspaceDefaultImage returns the default image for current
@@ -160,6 +173,8 @@ type InstallationServiceHandler interface {
CreateBlockedEmailDomain(context.Context, *connect_go.Request[v1.CreateBlockedEmailDomainRequest]) (*connect_go.Response[v1.CreateBlockedEmailDomainResponse], error)
// GetOnboardingState returns the onboarding state of the installation.
GetOnboardingState(context.Context, *connect_go.Request[v1.GetOnboardingStateRequest]) (*connect_go.Response[v1.GetOnboardingStateResponse], error)
+ // GetInstallationConfiguration returns configuration of the installation.
+ GetInstallationConfiguration(context.Context, *connect_go.Request[v1.GetInstallationConfigurationRequest]) (*connect_go.Response[v1.GetInstallationConfigurationResponse], error)
}
// NewInstallationServiceHandler builds an HTTP handler from the service implementation. It returns
@@ -204,6 +219,11 @@ func NewInstallationServiceHandler(svc InstallationServiceHandler, opts ...conne
svc.GetOnboardingState,
opts...,
))
+ mux.Handle("/gitpod.v1.InstallationService/GetInstallationConfiguration", connect_go.NewUnaryHandler(
+ "/gitpod.v1.InstallationService/GetInstallationConfiguration",
+ svc.GetInstallationConfiguration,
+ opts...,
+ ))
return "/gitpod.v1.InstallationService/", mux
}
@@ -237,3 +257,7 @@ func (UnimplementedInstallationServiceHandler) CreateBlockedEmailDomain(context.
func (UnimplementedInstallationServiceHandler) GetOnboardingState(context.Context, *connect_go.Request[v1.GetOnboardingStateRequest]) (*connect_go.Response[v1.GetOnboardingStateResponse], error) {
return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.v1.InstallationService.GetOnboardingState is not implemented"))
}
+
+func (UnimplementedInstallationServiceHandler) GetInstallationConfiguration(context.Context, *connect_go.Request[v1.GetInstallationConfigurationRequest]) (*connect_go.Response[v1.GetInstallationConfigurationResponse], error) {
+ return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("gitpod.v1.InstallationService.GetInstallationConfiguration is not implemented"))
+}
diff --git a/components/public-api/go/v1/v1connect/installation.proxy.connect.go b/components/public-api/go/v1/v1connect/installation.proxy.connect.go
index f97b62c1a7f2a1..cccf4ab5b201a8 100644
--- a/components/public-api/go/v1/v1connect/installation.proxy.connect.go
+++ b/components/public-api/go/v1/v1connect/installation.proxy.connect.go
@@ -88,3 +88,13 @@ func (s *ProxyInstallationServiceHandler) GetOnboardingState(ctx context.Context
return connect_go.NewResponse(resp), nil
}
+
+func (s *ProxyInstallationServiceHandler) GetInstallationConfiguration(ctx context.Context, req *connect_go.Request[v1.GetInstallationConfigurationRequest]) (*connect_go.Response[v1.GetInstallationConfigurationResponse], error) {
+ resp, err := s.Client.GetInstallationConfiguration(ctx, req.Msg)
+ if err != nil {
+ // TODO(milan): Convert to correct status code
+ return nil, err
+ }
+
+ return connect_go.NewResponse(resp), nil
+}
diff --git a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/Installation.java b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/Installation.java
index d0f341bcd1e38b..15657b9b63f4ab 100644
--- a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/Installation.java
+++ b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/Installation.java
@@ -959,10 +959,24 @@ public interface OnboardingStateOrBuilder extends
com.google.protobuf.MessageOrBuilder {
/**
+ *
+ * Whether at least one organization has completed the onboarding
+ *
+ *
* bool completed = 1 [json_name = "completed"];
* @return The completed.
*/
boolean getCompleted();
+
+ /**
+ *
+ * The total number of organizations
+ *
+ *
+ * int32 organization_count_total = 2 [json_name = "organizationCountTotal"];
+ * @return The organizationCountTotal.
+ */
+ int getOrganizationCountTotal();
}
/**
* Protobuf type {@code gitpod.v1.OnboardingState}
@@ -1004,6 +1018,10 @@ private OnboardingState() {
public static final int COMPLETED_FIELD_NUMBER = 1;
private boolean completed_ = false;
/**
+ *
+ * Whether at least one organization has completed the onboarding
+ *
+ *
* bool completed = 1 [json_name = "completed"];
* @return The completed.
*/
@@ -1012,6 +1030,21 @@ public boolean getCompleted() {
return completed_;
}
+ public static final int ORGANIZATION_COUNT_TOTAL_FIELD_NUMBER = 2;
+ private int organizationCountTotal_ = 0;
+ /**
+ *
+ * The total number of organizations
+ *
+ *
+ * int32 organization_count_total = 2 [json_name = "organizationCountTotal"];
+ * @return The organizationCountTotal.
+ */
+ @java.lang.Override
+ public int getOrganizationCountTotal() {
+ return organizationCountTotal_;
+ }
+
private byte memoizedIsInitialized = -1;
@java.lang.Override
public final boolean isInitialized() {
@@ -1029,6 +1062,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
if (completed_ != false) {
output.writeBool(1, completed_);
}
+ if (organizationCountTotal_ != 0) {
+ output.writeInt32(2, organizationCountTotal_);
+ }
getUnknownFields().writeTo(output);
}
@@ -1042,6 +1078,10 @@ public int getSerializedSize() {
size += com.google.protobuf.CodedOutputStream
.computeBoolSize(1, completed_);
}
+ if (organizationCountTotal_ != 0) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeInt32Size(2, organizationCountTotal_);
+ }
size += getUnknownFields().getSerializedSize();
memoizedSize = size;
return size;
@@ -1059,6 +1099,8 @@ public boolean equals(final java.lang.Object obj) {
if (getCompleted()
!= other.getCompleted()) return false;
+ if (getOrganizationCountTotal()
+ != other.getOrganizationCountTotal()) return false;
if (!getUnknownFields().equals(other.getUnknownFields())) return false;
return true;
}
@@ -1073,6 +1115,8 @@ public int hashCode() {
hash = (37 * hash) + COMPLETED_FIELD_NUMBER;
hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
getCompleted());
+ hash = (37 * hash) + ORGANIZATION_COUNT_TOTAL_FIELD_NUMBER;
+ hash = (53 * hash) + getOrganizationCountTotal();
hash = (29 * hash) + getUnknownFields().hashCode();
memoizedHashCode = hash;
return hash;
@@ -1205,6 +1249,7 @@ public Builder clear() {
super.clear();
bitField0_ = 0;
completed_ = false;
+ organizationCountTotal_ = 0;
return this;
}
@@ -1241,6 +1286,9 @@ private void buildPartial0(io.gitpod.publicapi.v1.Installation.OnboardingState r
if (((from_bitField0_ & 0x00000001) != 0)) {
result.completed_ = completed_;
}
+ if (((from_bitField0_ & 0x00000002) != 0)) {
+ result.organizationCountTotal_ = organizationCountTotal_;
+ }
}
@java.lang.Override
@@ -1258,6 +1306,9 @@ public Builder mergeFrom(io.gitpod.publicapi.v1.Installation.OnboardingState oth
if (other.getCompleted() != false) {
setCompleted(other.getCompleted());
}
+ if (other.getOrganizationCountTotal() != 0) {
+ setOrganizationCountTotal(other.getOrganizationCountTotal());
+ }
this.mergeUnknownFields(other.getUnknownFields());
onChanged();
return this;
@@ -1289,6 +1340,11 @@ public Builder mergeFrom(
bitField0_ |= 0x00000001;
break;
} // case 8
+ case 16: {
+ organizationCountTotal_ = input.readInt32();
+ bitField0_ |= 0x00000002;
+ break;
+ } // case 16
default: {
if (!super.parseUnknownField(input, extensionRegistry, tag)) {
done = true; // was an endgroup tag
@@ -1308,6 +1364,10 @@ public Builder mergeFrom(
private boolean completed_ ;
/**
+ *
+ * Whether at least one organization has completed the onboarding
+ *
+ *
* bool completed = 1 [json_name = "completed"];
* @return The completed.
*/
@@ -1316,6 +1376,10 @@ public boolean getCompleted() {
return completed_;
}
/**
+ *
+ * Whether at least one organization has completed the onboarding
+ *
+ *
* bool completed = 1 [json_name = "completed"];
* @param value The completed to set.
* @return This builder for chaining.
@@ -1328,6 +1392,10 @@ public Builder setCompleted(boolean value) {
return this;
}
/**
+ *
+ * Whether at least one organization has completed the onboarding
+ *
+ *
* bool completed = 1 [json_name = "completed"];
* @return This builder for chaining.
*/
@@ -1338,6 +1406,50 @@ public Builder clearCompleted() {
return this;
}
+ private int organizationCountTotal_ ;
+ /**
+ *
+ * The total number of organizations
+ *
+ *
+ * int32 organization_count_total = 2 [json_name = "organizationCountTotal"];
+ * @return The organizationCountTotal.
+ */
+ @java.lang.Override
+ public int getOrganizationCountTotal() {
+ return organizationCountTotal_;
+ }
+ /**
+ *
+ * The total number of organizations
+ *
+ *
+ * int32 organization_count_total = 2 [json_name = "organizationCountTotal"];
+ * @param value The organizationCountTotal to set.
+ * @return This builder for chaining.
+ */
+ public Builder setOrganizationCountTotal(int value) {
+
+ organizationCountTotal_ = value;
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+ /**
+ *
+ * The total number of organizations
+ *
+ *
+ * int32 organization_count_total = 2 [json_name = "organizationCountTotal"];
+ * @return This builder for chaining.
+ */
+ public Builder clearOrganizationCountTotal() {
+ bitField0_ = (bitField0_ & ~0x00000002);
+ organizationCountTotal_ = 0;
+ onChanged();
+ return this;
+ }
+
// @@protoc_insertion_point(builder_scope:gitpod.v1.OnboardingState)
}
@@ -11834,264 +11946,1650 @@ public io.gitpod.publicapi.v1.Installation.BlockedEmailDomain getDefaultInstance
}
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_GetOnboardingStateRequest_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_GetOnboardingStateRequest_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_GetOnboardingStateResponse_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_GetOnboardingStateResponse_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_OnboardingState_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_OnboardingState_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_ListBlockedRepositoriesRequest_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_ListBlockedRepositoriesRequest_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_ListBlockedRepositoriesResponse_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_ListBlockedRepositoriesResponse_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_CreateBlockedRepositoryRequest_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_CreateBlockedRepositoryRequest_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_CreateBlockedRepositoryResponse_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_CreateBlockedRepositoryResponse_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_CreateBlockedEmailDomainRequest_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_CreateBlockedEmailDomainRequest_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_CreateBlockedEmailDomainResponse_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_CreateBlockedEmailDomainResponse_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_BlockedRepository_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_BlockedRepository_fieldAccessorTable;
- private static final com.google.protobuf.Descriptors.Descriptor
- internal_static_gitpod_v1_BlockedEmailDomain_descriptor;
- private static final
- com.google.protobuf.GeneratedMessage.FieldAccessorTable
- internal_static_gitpod_v1_BlockedEmailDomain_fieldAccessorTable;
-
- public static com.google.protobuf.Descriptors.FileDescriptor
- getDescriptor() {
- return descriptor;
+ public interface GetInstallationConfigurationRequestOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:gitpod.v1.GetInstallationConfigurationRequest)
+ com.google.protobuf.MessageOrBuilder {
}
- private static com.google.protobuf.Descriptors.FileDescriptor
- descriptor;
- static {
- java.lang.String[] descriptorData = {
- "\n\034gitpod/v1/installation.proto\022\tgitpod.v" +
- "1\032\032gitpod/v1/pagination.proto\032\027gitpod/v1" +
- "/sorting.proto\032\037google/protobuf/timestam" +
- "p.proto\"\033\n\031GetOnboardingStateRequest\"c\n\032" +
- "GetOnboardingStateResponse\022E\n\020onboarding" +
- "_state\030\001 \001(\0132\032.gitpod.v1.OnboardingState" +
- "R\017onboardingState\"/\n\017OnboardingState\022\034\n\t" +
- "completed\030\001 \001(\010R\tcompleted\"-\n+GetInstall" +
- "ationWorkspaceDefaultImageRequest\"f\n,Get" +
- "InstallationWorkspaceDefaultImageRespons" +
- "e\0226\n\027default_workspace_image\030\001 \001(\tR\025defa" +
- "ultWorkspaceImage\"\244\001\n\036ListBlockedReposit" +
- "oriesRequest\022<\n\npagination\030\001 \001(\0132\034.gitpo" +
- "d.v1.PaginationRequestR\npagination\022#\n\004so" +
- "rt\030\002 \003(\0132\017.gitpod.v1.SortR\004sort\022\037\n\013searc" +
- "h_term\030\003 \001(\tR\nsearchTerm\"\261\001\n\037ListBlocked" +
- "RepositoriesResponse\022=\n\npagination\030\001 \001(\013" +
- "2\035.gitpod.v1.PaginationResponseR\npaginat" +
- "ion\022O\n\024blocked_repositories\030\002 \003(\0132\034.gitp" +
- "od.v1.BlockedRepositoryR\023blockedReposito" +
- "ries\"\210\001\n\036CreateBlockedRepositoryRequest\022" +
- "\035\n\nurl_regexp\030\001 \001(\tR\turlRegexp\022\035\n\nblock_" +
- "user\030\002 \001(\010R\tblockUser\022(\n\020block_free_usag" +
- "e\030\003 \001(\010R\016blockFreeUsage\"n\n\037CreateBlocked" +
- "RepositoryResponse\022K\n\022blocked_repository" +
- "\030\001 \001(\0132\034.gitpod.v1.BlockedRepositoryR\021bl" +
- "ockedRepository\"T\n\036DeleteBlockedReposito" +
- "ryRequest\0222\n\025blocked_repository_id\030\001 \001(\r" +
- "R\023blockedRepositoryId\"!\n\037DeleteBlockedRe" +
- "positoryResponse\"^\n\036ListBlockedEmailDoma" +
- "insRequest\022<\n\npagination\030\001 \001(\0132\034.gitpod." +
- "v1.PaginationRequestR\npagination\"\263\001\n\037Lis" +
- "tBlockedEmailDomainsResponse\022=\n\npaginati" +
- "on\030\001 \001(\0132\035.gitpod.v1.PaginationResponseR" +
- "\npagination\022Q\n\025blocked_email_domains\030\002 \003" +
- "(\0132\035.gitpod.v1.BlockedEmailDomainR\023block" +
- "edEmailDomains\"U\n\037CreateBlockedEmailDoma" +
- "inRequest\022\026\n\006domain\030\001 \001(\tR\006domain\022\032\n\010neg" +
- "ative\030\002 \001(\010R\010negative\"s\n CreateBlockedEm" +
- "ailDomainResponse\022O\n\024blocked_email_domai" +
- "n\030\001 \001(\0132\035.gitpod.v1.BlockedEmailDomainR\022" +
- "blockedEmailDomain\"\211\002\n\021BlockedRepository" +
- "\022\016\n\002id\030\001 \001(\rR\002id\022\035\n\nurl_regexp\030\002 \001(\tR\tur" +
- "lRegexp\022\035\n\nblock_user\030\003 \001(\010R\tblockUser\022?" +
- "\n\rcreation_time\030\004 \001(\0132\032.google.protobuf." +
- "TimestampR\014creationTime\022;\n\013update_time\030\005" +
- " \001(\0132\032.google.protobuf.TimestampR\nupdate" +
- "Time\022(\n\020block_free_usage\030\006 \001(\010R\016blockFre" +
- "eUsage\"X\n\022BlockedEmailDomain\022\016\n\002id\030\001 \001(\t" +
- "R\002id\022\026\n\006domain\030\002 \001(\tR\006domain\022\032\n\010negative" +
- "\030\003 \001(\010R\010negative2\335\006\n\023InstallationService" +
- "\022\231\001\n$GetInstallationWorkspaceDefaultImag" +
- "e\0226.gitpod.v1.GetInstallationWorkspaceDe" +
- "faultImageRequest\0327.gitpod.v1.GetInstall" +
- "ationWorkspaceDefaultImageResponse\"\000\022r\n\027" +
- "ListBlockedRepositories\022).gitpod.v1.List" +
- "BlockedRepositoriesRequest\032*.gitpod.v1.L" +
- "istBlockedRepositoriesResponse\"\000\022r\n\027Crea" +
- "teBlockedRepository\022).gitpod.v1.CreateBl" +
- "ockedRepositoryRequest\032*.gitpod.v1.Creat" +
- "eBlockedRepositoryResponse\"\000\022r\n\027DeleteBl" +
- "ockedRepository\022).gitpod.v1.DeleteBlocke" +
- "dRepositoryRequest\032*.gitpod.v1.DeleteBlo" +
- "ckedRepositoryResponse\"\000\022r\n\027ListBlockedE" +
- "mailDomains\022).gitpod.v1.ListBlockedEmail" +
- "DomainsRequest\032*.gitpod.v1.ListBlockedEm" +
- "ailDomainsResponse\"\000\022u\n\030CreateBlockedEma" +
- "ilDomain\022*.gitpod.v1.CreateBlockedEmailD" +
- "omainRequest\032+.gitpod.v1.CreateBlockedEm" +
- "ailDomainResponse\"\000\022c\n\022GetOnboardingStat" +
- "e\022$.gitpod.v1.GetOnboardingStateRequest\032" +
- "%.gitpod.v1.GetOnboardingStateResponse\"\000" +
- "BQ\n\026io.gitpod.publicapi.v1Z7github.com/g" +
- "itpod-io/gitpod/components/public-api/go" +
- "/v1b\006proto3"
- };
- descriptor = com.google.protobuf.Descriptors.FileDescriptor
- .internalBuildGeneratedFileFrom(descriptorData,
- new com.google.protobuf.Descriptors.FileDescriptor[] {
- io.gitpod.publicapi.v1.Pagination.getDescriptor(),
- io.gitpod.publicapi.v1.Sorting.getDescriptor(),
- com.google.protobuf.TimestampProto.getDescriptor(),
- });
- internal_static_gitpod_v1_GetOnboardingStateRequest_descriptor =
- getDescriptor().getMessageTypes().get(0);
- internal_static_gitpod_v1_GetOnboardingStateRequest_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_GetOnboardingStateRequest_descriptor,
- new java.lang.String[] { });
- internal_static_gitpod_v1_GetOnboardingStateResponse_descriptor =
- getDescriptor().getMessageTypes().get(1);
- internal_static_gitpod_v1_GetOnboardingStateResponse_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_GetOnboardingStateResponse_descriptor,
- new java.lang.String[] { "OnboardingState", });
- internal_static_gitpod_v1_OnboardingState_descriptor =
- getDescriptor().getMessageTypes().get(2);
- internal_static_gitpod_v1_OnboardingState_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_OnboardingState_descriptor,
- new java.lang.String[] { "Completed", });
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_descriptor =
- getDescriptor().getMessageTypes().get(3);
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_descriptor,
- new java.lang.String[] { });
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_descriptor =
- getDescriptor().getMessageTypes().get(4);
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_descriptor,
- new java.lang.String[] { "DefaultWorkspaceImage", });
- internal_static_gitpod_v1_ListBlockedRepositoriesRequest_descriptor =
- getDescriptor().getMessageTypes().get(5);
- internal_static_gitpod_v1_ListBlockedRepositoriesRequest_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_ListBlockedRepositoriesRequest_descriptor,
- new java.lang.String[] { "Pagination", "Sort", "SearchTerm", });
- internal_static_gitpod_v1_ListBlockedRepositoriesResponse_descriptor =
- getDescriptor().getMessageTypes().get(6);
- internal_static_gitpod_v1_ListBlockedRepositoriesResponse_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_ListBlockedRepositoriesResponse_descriptor,
- new java.lang.String[] { "Pagination", "BlockedRepositories", });
- internal_static_gitpod_v1_CreateBlockedRepositoryRequest_descriptor =
- getDescriptor().getMessageTypes().get(7);
- internal_static_gitpod_v1_CreateBlockedRepositoryRequest_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_CreateBlockedRepositoryRequest_descriptor,
- new java.lang.String[] { "UrlRegexp", "BlockUser", "BlockFreeUsage", });
- internal_static_gitpod_v1_CreateBlockedRepositoryResponse_descriptor =
- getDescriptor().getMessageTypes().get(8);
- internal_static_gitpod_v1_CreateBlockedRepositoryResponse_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_CreateBlockedRepositoryResponse_descriptor,
- new java.lang.String[] { "BlockedRepository", });
- internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_descriptor =
- getDescriptor().getMessageTypes().get(9);
- internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_descriptor,
- new java.lang.String[] { "BlockedRepositoryId", });
- internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_descriptor =
- getDescriptor().getMessageTypes().get(10);
- internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_descriptor,
- new java.lang.String[] { });
- internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_descriptor =
- getDescriptor().getMessageTypes().get(11);
- internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_descriptor,
- new java.lang.String[] { "Pagination", });
- internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_descriptor =
- getDescriptor().getMessageTypes().get(12);
- internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_fieldAccessorTable = new
- com.google.protobuf.GeneratedMessage.FieldAccessorTable(
- internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_descriptor,
- new java.lang.String[] { "Pagination", "BlockedEmailDomains", });
- internal_static_gitpod_v1_CreateBlockedEmailDomainRequest_descriptor =
- getDescriptor().getMessageTypes().get(13);
- internal_static_gitpod_v1_CreateBlockedEmailDomainRequest_fieldAccessorTable = new
+ /**
+ * Protobuf type {@code gitpod.v1.GetInstallationConfigurationRequest}
+ */
+ public static final class GetInstallationConfigurationRequest extends
+ com.google.protobuf.GeneratedMessage implements
+ // @@protoc_insertion_point(message_implements:gitpod.v1.GetInstallationConfigurationRequest)
+ GetInstallationConfigurationRequestOrBuilder {
+ private static final long serialVersionUID = 0L;
+ static {
+ com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
+ com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
+ /* major= */ 4,
+ /* minor= */ 27,
+ /* patch= */ 2,
+ /* suffix= */ "",
+ GetInstallationConfigurationRequest.class.getName());
+ }
+ // Use GetInstallationConfigurationRequest.newBuilder() to construct.
+ private GetInstallationConfigurationRequest(com.google.protobuf.GeneratedMessage.Builder> builder) {
+ super(builder);
+ }
+ private GetInstallationConfigurationRequest() {
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationRequest_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationRequest_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest.class, io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest.Builder.class);
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest)) {
+ return super.equals(obj);
+ }
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest other = (io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest) obj;
+
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code gitpod.v1.GetInstallationConfigurationRequest}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessage.Builder implements
+ // @@protoc_insertion_point(builder_implements:gitpod.v1.GetInstallationConfigurationRequest)
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequestOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationRequest_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationRequest_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest.class, io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest.Builder.class);
+ }
+
+ // Construct using io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationRequest_descriptor;
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest getDefaultInstanceForType() {
+ return io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest build() {
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest buildPartial() {
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest result = new io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest(this);
+ onBuilt();
+ return result;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest) {
+ return mergeFrom((io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest other) {
+ if (other == io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest.getDefaultInstance()) return this;
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+
+ // @@protoc_insertion_point(builder_scope:gitpod.v1.GetInstallationConfigurationRequest)
+ }
+
+ // @@protoc_insertion_point(class_scope:gitpod.v1.GetInstallationConfigurationRequest)
+ private static final io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest();
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public GetInstallationConfigurationRequest parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ public interface GetInstallationConfigurationResponseOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:gitpod.v1.GetInstallationConfigurationResponse)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ * @return Whether the configuration field is set.
+ */
+ boolean hasConfiguration();
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ * @return The configuration.
+ */
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration getConfiguration();
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ */
+ io.gitpod.publicapi.v1.Installation.InstallationConfigurationOrBuilder getConfigurationOrBuilder();
+ }
+ /**
+ * Protobuf type {@code gitpod.v1.GetInstallationConfigurationResponse}
+ */
+ public static final class GetInstallationConfigurationResponse extends
+ com.google.protobuf.GeneratedMessage implements
+ // @@protoc_insertion_point(message_implements:gitpod.v1.GetInstallationConfigurationResponse)
+ GetInstallationConfigurationResponseOrBuilder {
+ private static final long serialVersionUID = 0L;
+ static {
+ com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
+ com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
+ /* major= */ 4,
+ /* minor= */ 27,
+ /* patch= */ 2,
+ /* suffix= */ "",
+ GetInstallationConfigurationResponse.class.getName());
+ }
+ // Use GetInstallationConfigurationResponse.newBuilder() to construct.
+ private GetInstallationConfigurationResponse(com.google.protobuf.GeneratedMessage.Builder> builder) {
+ super(builder);
+ }
+ private GetInstallationConfigurationResponse() {
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationResponse_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationResponse_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse.class, io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse.Builder.class);
+ }
+
+ private int bitField0_;
+ public static final int CONFIGURATION_FIELD_NUMBER = 1;
+ private io.gitpod.publicapi.v1.Installation.InstallationConfiguration configuration_;
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ * @return Whether the configuration field is set.
+ */
+ @java.lang.Override
+ public boolean hasConfiguration() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ * @return The configuration.
+ */
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.InstallationConfiguration getConfiguration() {
+ return configuration_ == null ? io.gitpod.publicapi.v1.Installation.InstallationConfiguration.getDefaultInstance() : configuration_;
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ */
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.InstallationConfigurationOrBuilder getConfigurationOrBuilder() {
+ return configuration_ == null ? io.gitpod.publicapi.v1.Installation.InstallationConfiguration.getDefaultInstance() : configuration_;
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (((bitField0_ & 0x00000001) != 0)) {
+ output.writeMessage(1, getConfiguration());
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (((bitField0_ & 0x00000001) != 0)) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(1, getConfiguration());
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse)) {
+ return super.equals(obj);
+ }
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse other = (io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse) obj;
+
+ if (hasConfiguration() != other.hasConfiguration()) return false;
+ if (hasConfiguration()) {
+ if (!getConfiguration()
+ .equals(other.getConfiguration())) return false;
+ }
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (hasConfiguration()) {
+ hash = (37 * hash) + CONFIGURATION_FIELD_NUMBER;
+ hash = (53 * hash) + getConfiguration().hashCode();
+ }
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input);
+ }
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code gitpod.v1.GetInstallationConfigurationResponse}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessage.Builder implements
+ // @@protoc_insertion_point(builder_implements:gitpod.v1.GetInstallationConfigurationResponse)
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponseOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationResponse_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationResponse_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse.class, io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse.Builder.class);
+ }
+
+ // Construct using io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse.newBuilder()
+ private Builder() {
+ maybeForceBuilderInitialization();
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ super(parent);
+ maybeForceBuilderInitialization();
+ }
+ private void maybeForceBuilderInitialization() {
+ if (com.google.protobuf.GeneratedMessage
+ .alwaysUseFieldBuilders) {
+ getConfigurationFieldBuilder();
+ }
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ bitField0_ = 0;
+ configuration_ = null;
+ if (configurationBuilder_ != null) {
+ configurationBuilder_.dispose();
+ configurationBuilder_ = null;
+ }
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_GetInstallationConfigurationResponse_descriptor;
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse getDefaultInstanceForType() {
+ return io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse build() {
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse buildPartial() {
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse result = new io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse(this);
+ if (bitField0_ != 0) { buildPartial0(result); }
+ onBuilt();
+ return result;
+ }
+
+ private void buildPartial0(io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse result) {
+ int from_bitField0_ = bitField0_;
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000001) != 0)) {
+ result.configuration_ = configurationBuilder_ == null
+ ? configuration_
+ : configurationBuilder_.build();
+ to_bitField0_ |= 0x00000001;
+ }
+ result.bitField0_ |= to_bitField0_;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse) {
+ return mergeFrom((io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse other) {
+ if (other == io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse.getDefaultInstance()) return this;
+ if (other.hasConfiguration()) {
+ mergeConfiguration(other.getConfiguration());
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10: {
+ input.readMessage(
+ getConfigurationFieldBuilder().getBuilder(),
+ extensionRegistry);
+ bitField0_ |= 0x00000001;
+ break;
+ } // case 10
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+ private int bitField0_;
+
+ private io.gitpod.publicapi.v1.Installation.InstallationConfiguration configuration_;
+ private com.google.protobuf.SingleFieldBuilder<
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration, io.gitpod.publicapi.v1.Installation.InstallationConfiguration.Builder, io.gitpod.publicapi.v1.Installation.InstallationConfigurationOrBuilder> configurationBuilder_;
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ * @return Whether the configuration field is set.
+ */
+ public boolean hasConfiguration() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ * @return The configuration.
+ */
+ public io.gitpod.publicapi.v1.Installation.InstallationConfiguration getConfiguration() {
+ if (configurationBuilder_ == null) {
+ return configuration_ == null ? io.gitpod.publicapi.v1.Installation.InstallationConfiguration.getDefaultInstance() : configuration_;
+ } else {
+ return configurationBuilder_.getMessage();
+ }
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ */
+ public Builder setConfiguration(io.gitpod.publicapi.v1.Installation.InstallationConfiguration value) {
+ if (configurationBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ configuration_ = value;
+ } else {
+ configurationBuilder_.setMessage(value);
+ }
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ */
+ public Builder setConfiguration(
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration.Builder builderForValue) {
+ if (configurationBuilder_ == null) {
+ configuration_ = builderForValue.build();
+ } else {
+ configurationBuilder_.setMessage(builderForValue.build());
+ }
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ */
+ public Builder mergeConfiguration(io.gitpod.publicapi.v1.Installation.InstallationConfiguration value) {
+ if (configurationBuilder_ == null) {
+ if (((bitField0_ & 0x00000001) != 0) &&
+ configuration_ != null &&
+ configuration_ != io.gitpod.publicapi.v1.Installation.InstallationConfiguration.getDefaultInstance()) {
+ getConfigurationBuilder().mergeFrom(value);
+ } else {
+ configuration_ = value;
+ }
+ } else {
+ configurationBuilder_.mergeFrom(value);
+ }
+ if (configuration_ != null) {
+ bitField0_ |= 0x00000001;
+ onChanged();
+ }
+ return this;
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ */
+ public Builder clearConfiguration() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ configuration_ = null;
+ if (configurationBuilder_ != null) {
+ configurationBuilder_.dispose();
+ configurationBuilder_ = null;
+ }
+ onChanged();
+ return this;
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ */
+ public io.gitpod.publicapi.v1.Installation.InstallationConfiguration.Builder getConfigurationBuilder() {
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return getConfigurationFieldBuilder().getBuilder();
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ */
+ public io.gitpod.publicapi.v1.Installation.InstallationConfigurationOrBuilder getConfigurationOrBuilder() {
+ if (configurationBuilder_ != null) {
+ return configurationBuilder_.getMessageOrBuilder();
+ } else {
+ return configuration_ == null ?
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration.getDefaultInstance() : configuration_;
+ }
+ }
+ /**
+ * .gitpod.v1.InstallationConfiguration configuration = 1 [json_name = "configuration"];
+ */
+ private com.google.protobuf.SingleFieldBuilder<
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration, io.gitpod.publicapi.v1.Installation.InstallationConfiguration.Builder, io.gitpod.publicapi.v1.Installation.InstallationConfigurationOrBuilder>
+ getConfigurationFieldBuilder() {
+ if (configurationBuilder_ == null) {
+ configurationBuilder_ = new com.google.protobuf.SingleFieldBuilder<
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration, io.gitpod.publicapi.v1.Installation.InstallationConfiguration.Builder, io.gitpod.publicapi.v1.Installation.InstallationConfigurationOrBuilder>(
+ getConfiguration(),
+ getParentForChildren(),
+ isClean());
+ configuration_ = null;
+ }
+ return configurationBuilder_;
+ }
+
+ // @@protoc_insertion_point(builder_scope:gitpod.v1.GetInstallationConfigurationResponse)
+ }
+
+ // @@protoc_insertion_point(class_scope:gitpod.v1.GetInstallationConfigurationResponse)
+ private static final io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse();
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public GetInstallationConfigurationResponse parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ public interface InstallationConfigurationOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:gitpod.v1.InstallationConfiguration)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * bool is_dedicated_installation = 1 [json_name = "isDedicatedInstallation"];
+ * @return The isDedicatedInstallation.
+ */
+ boolean getIsDedicatedInstallation();
+ }
+ /**
+ * Protobuf type {@code gitpod.v1.InstallationConfiguration}
+ */
+ public static final class InstallationConfiguration extends
+ com.google.protobuf.GeneratedMessage implements
+ // @@protoc_insertion_point(message_implements:gitpod.v1.InstallationConfiguration)
+ InstallationConfigurationOrBuilder {
+ private static final long serialVersionUID = 0L;
+ static {
+ com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
+ com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
+ /* major= */ 4,
+ /* minor= */ 27,
+ /* patch= */ 2,
+ /* suffix= */ "",
+ InstallationConfiguration.class.getName());
+ }
+ // Use InstallationConfiguration.newBuilder() to construct.
+ private InstallationConfiguration(com.google.protobuf.GeneratedMessage.Builder> builder) {
+ super(builder);
+ }
+ private InstallationConfiguration() {
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_InstallationConfiguration_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_InstallationConfiguration_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration.class, io.gitpod.publicapi.v1.Installation.InstallationConfiguration.Builder.class);
+ }
+
+ public static final int IS_DEDICATED_INSTALLATION_FIELD_NUMBER = 1;
+ private boolean isDedicatedInstallation_ = false;
+ /**
+ * bool is_dedicated_installation = 1 [json_name = "isDedicatedInstallation"];
+ * @return The isDedicatedInstallation.
+ */
+ @java.lang.Override
+ public boolean getIsDedicatedInstallation() {
+ return isDedicatedInstallation_;
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (isDedicatedInstallation_ != false) {
+ output.writeBool(1, isDedicatedInstallation_);
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (isDedicatedInstallation_ != false) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeBoolSize(1, isDedicatedInstallation_);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof io.gitpod.publicapi.v1.Installation.InstallationConfiguration)) {
+ return super.equals(obj);
+ }
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration other = (io.gitpod.publicapi.v1.Installation.InstallationConfiguration) obj;
+
+ if (getIsDedicatedInstallation()
+ != other.getIsDedicatedInstallation()) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ hash = (37 * hash) + IS_DEDICATED_INSTALLATION_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+ getIsDedicatedInstallation());
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input);
+ }
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input);
+ }
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessage
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(io.gitpod.publicapi.v1.Installation.InstallationConfiguration prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code gitpod.v1.InstallationConfiguration}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessage.Builder implements
+ // @@protoc_insertion_point(builder_implements:gitpod.v1.InstallationConfiguration)
+ io.gitpod.publicapi.v1.Installation.InstallationConfigurationOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_InstallationConfiguration_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_InstallationConfiguration_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration.class, io.gitpod.publicapi.v1.Installation.InstallationConfiguration.Builder.class);
+ }
+
+ // Construct using io.gitpod.publicapi.v1.Installation.InstallationConfiguration.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessage.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ bitField0_ = 0;
+ isDedicatedInstallation_ = false;
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return io.gitpod.publicapi.v1.Installation.internal_static_gitpod_v1_InstallationConfiguration_descriptor;
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.InstallationConfiguration getDefaultInstanceForType() {
+ return io.gitpod.publicapi.v1.Installation.InstallationConfiguration.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.InstallationConfiguration build() {
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.InstallationConfiguration buildPartial() {
+ io.gitpod.publicapi.v1.Installation.InstallationConfiguration result = new io.gitpod.publicapi.v1.Installation.InstallationConfiguration(this);
+ if (bitField0_ != 0) { buildPartial0(result); }
+ onBuilt();
+ return result;
+ }
+
+ private void buildPartial0(io.gitpod.publicapi.v1.Installation.InstallationConfiguration result) {
+ int from_bitField0_ = bitField0_;
+ if (((from_bitField0_ & 0x00000001) != 0)) {
+ result.isDedicatedInstallation_ = isDedicatedInstallation_;
+ }
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof io.gitpod.publicapi.v1.Installation.InstallationConfiguration) {
+ return mergeFrom((io.gitpod.publicapi.v1.Installation.InstallationConfiguration)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(io.gitpod.publicapi.v1.Installation.InstallationConfiguration other) {
+ if (other == io.gitpod.publicapi.v1.Installation.InstallationConfiguration.getDefaultInstance()) return this;
+ if (other.getIsDedicatedInstallation() != false) {
+ setIsDedicatedInstallation(other.getIsDedicatedInstallation());
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 8: {
+ isDedicatedInstallation_ = input.readBool();
+ bitField0_ |= 0x00000001;
+ break;
+ } // case 8
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+ private int bitField0_;
+
+ private boolean isDedicatedInstallation_ ;
+ /**
+ * bool is_dedicated_installation = 1 [json_name = "isDedicatedInstallation"];
+ * @return The isDedicatedInstallation.
+ */
+ @java.lang.Override
+ public boolean getIsDedicatedInstallation() {
+ return isDedicatedInstallation_;
+ }
+ /**
+ * bool is_dedicated_installation = 1 [json_name = "isDedicatedInstallation"];
+ * @param value The isDedicatedInstallation to set.
+ * @return This builder for chaining.
+ */
+ public Builder setIsDedicatedInstallation(boolean value) {
+
+ isDedicatedInstallation_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+ /**
+ * bool is_dedicated_installation = 1 [json_name = "isDedicatedInstallation"];
+ * @return This builder for chaining.
+ */
+ public Builder clearIsDedicatedInstallation() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ isDedicatedInstallation_ = false;
+ onChanged();
+ return this;
+ }
+
+ // @@protoc_insertion_point(builder_scope:gitpod.v1.InstallationConfiguration)
+ }
+
+ // @@protoc_insertion_point(class_scope:gitpod.v1.InstallationConfiguration)
+ private static final io.gitpod.publicapi.v1.Installation.InstallationConfiguration DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new io.gitpod.publicapi.v1.Installation.InstallationConfiguration();
+ }
+
+ public static io.gitpod.publicapi.v1.Installation.InstallationConfiguration getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public InstallationConfiguration parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public io.gitpod.publicapi.v1.Installation.InstallationConfiguration getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_GetOnboardingStateRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_GetOnboardingStateRequest_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_GetOnboardingStateResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_GetOnboardingStateResponse_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_OnboardingState_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_OnboardingState_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_ListBlockedRepositoriesRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_ListBlockedRepositoriesRequest_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_ListBlockedRepositoriesResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_ListBlockedRepositoriesResponse_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_CreateBlockedRepositoryRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_CreateBlockedRepositoryRequest_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_CreateBlockedRepositoryResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_CreateBlockedRepositoryResponse_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_CreateBlockedEmailDomainRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_CreateBlockedEmailDomainRequest_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_CreateBlockedEmailDomainResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_CreateBlockedEmailDomainResponse_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_BlockedRepository_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_BlockedRepository_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_BlockedEmailDomain_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_BlockedEmailDomain_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_GetInstallationConfigurationRequest_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_GetInstallationConfigurationRequest_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_GetInstallationConfigurationResponse_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_GetInstallationConfigurationResponse_fieldAccessorTable;
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_gitpod_v1_InstallationConfiguration_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable
+ internal_static_gitpod_v1_InstallationConfiguration_fieldAccessorTable;
+
+ public static com.google.protobuf.Descriptors.FileDescriptor
+ getDescriptor() {
+ return descriptor;
+ }
+ private static com.google.protobuf.Descriptors.FileDescriptor
+ descriptor;
+ static {
+ java.lang.String[] descriptorData = {
+ "\n\034gitpod/v1/installation.proto\022\tgitpod.v" +
+ "1\032\032gitpod/v1/pagination.proto\032\027gitpod/v1" +
+ "/sorting.proto\032\037google/protobuf/timestam" +
+ "p.proto\"\033\n\031GetOnboardingStateRequest\"c\n\032" +
+ "GetOnboardingStateResponse\022E\n\020onboarding" +
+ "_state\030\001 \001(\0132\032.gitpod.v1.OnboardingState" +
+ "R\017onboardingState\"i\n\017OnboardingState\022\034\n\t" +
+ "completed\030\001 \001(\010R\tcompleted\0228\n\030organizati" +
+ "on_count_total\030\002 \001(\005R\026organizationCountT" +
+ "otal\"-\n+GetInstallationWorkspaceDefaultI" +
+ "mageRequest\"f\n,GetInstallationWorkspaceD" +
+ "efaultImageResponse\0226\n\027default_workspace" +
+ "_image\030\001 \001(\tR\025defaultWorkspaceImage\"\244\001\n\036" +
+ "ListBlockedRepositoriesRequest\022<\n\npagina" +
+ "tion\030\001 \001(\0132\034.gitpod.v1.PaginationRequest" +
+ "R\npagination\022#\n\004sort\030\002 \003(\0132\017.gitpod.v1.S" +
+ "ortR\004sort\022\037\n\013search_term\030\003 \001(\tR\nsearchTe" +
+ "rm\"\261\001\n\037ListBlockedRepositoriesResponse\022=" +
+ "\n\npagination\030\001 \001(\0132\035.gitpod.v1.Paginatio" +
+ "nResponseR\npagination\022O\n\024blocked_reposit" +
+ "ories\030\002 \003(\0132\034.gitpod.v1.BlockedRepositor" +
+ "yR\023blockedRepositories\"\210\001\n\036CreateBlocked" +
+ "RepositoryRequest\022\035\n\nurl_regexp\030\001 \001(\tR\tu" +
+ "rlRegexp\022\035\n\nblock_user\030\002 \001(\010R\tblockUser\022" +
+ "(\n\020block_free_usage\030\003 \001(\010R\016blockFreeUsag" +
+ "e\"n\n\037CreateBlockedRepositoryResponse\022K\n\022" +
+ "blocked_repository\030\001 \001(\0132\034.gitpod.v1.Blo" +
+ "ckedRepositoryR\021blockedRepository\"T\n\036Del" +
+ "eteBlockedRepositoryRequest\0222\n\025blocked_r" +
+ "epository_id\030\001 \001(\rR\023blockedRepositoryId\"" +
+ "!\n\037DeleteBlockedRepositoryResponse\"^\n\036Li" +
+ "stBlockedEmailDomainsRequest\022<\n\npaginati" +
+ "on\030\001 \001(\0132\034.gitpod.v1.PaginationRequestR\n" +
+ "pagination\"\263\001\n\037ListBlockedEmailDomainsRe" +
+ "sponse\022=\n\npagination\030\001 \001(\0132\035.gitpod.v1.P" +
+ "aginationResponseR\npagination\022Q\n\025blocked" +
+ "_email_domains\030\002 \003(\0132\035.gitpod.v1.Blocked" +
+ "EmailDomainR\023blockedEmailDomains\"U\n\037Crea" +
+ "teBlockedEmailDomainRequest\022\026\n\006domain\030\001 " +
+ "\001(\tR\006domain\022\032\n\010negative\030\002 \001(\010R\010negative\"" +
+ "s\n CreateBlockedEmailDomainResponse\022O\n\024b" +
+ "locked_email_domain\030\001 \001(\0132\035.gitpod.v1.Bl" +
+ "ockedEmailDomainR\022blockedEmailDomain\"\211\002\n" +
+ "\021BlockedRepository\022\016\n\002id\030\001 \001(\rR\002id\022\035\n\nur" +
+ "l_regexp\030\002 \001(\tR\turlRegexp\022\035\n\nblock_user\030" +
+ "\003 \001(\010R\tblockUser\022?\n\rcreation_time\030\004 \001(\0132" +
+ "\032.google.protobuf.TimestampR\014creationTim" +
+ "e\022;\n\013update_time\030\005 \001(\0132\032.google.protobuf" +
+ ".TimestampR\nupdateTime\022(\n\020block_free_usa" +
+ "ge\030\006 \001(\010R\016blockFreeUsage\"X\n\022BlockedEmail" +
+ "Domain\022\016\n\002id\030\001 \001(\tR\002id\022\026\n\006domain\030\002 \001(\tR\006" +
+ "domain\022\032\n\010negative\030\003 \001(\010R\010negative\"%\n#Ge" +
+ "tInstallationConfigurationRequest\"r\n$Get" +
+ "InstallationConfigurationResponse\022J\n\rcon" +
+ "figuration\030\001 \001(\0132$.gitpod.v1.Installatio" +
+ "nConfigurationR\rconfiguration\"W\n\031Install" +
+ "ationConfiguration\022:\n\031is_dedicated_insta" +
+ "llation\030\001 \001(\010R\027isDedicatedInstallation2\341" +
+ "\007\n\023InstallationService\022\231\001\n$GetInstallati" +
+ "onWorkspaceDefaultImage\0226.gitpod.v1.GetI" +
+ "nstallationWorkspaceDefaultImageRequest\032" +
+ "7.gitpod.v1.GetInstallationWorkspaceDefa" +
+ "ultImageResponse\"\000\022r\n\027ListBlockedReposit" +
+ "ories\022).gitpod.v1.ListBlockedRepositorie" +
+ "sRequest\032*.gitpod.v1.ListBlockedReposito" +
+ "riesResponse\"\000\022r\n\027CreateBlockedRepositor" +
+ "y\022).gitpod.v1.CreateBlockedRepositoryReq" +
+ "uest\032*.gitpod.v1.CreateBlockedRepository" +
+ "Response\"\000\022r\n\027DeleteBlockedRepository\022)." +
+ "gitpod.v1.DeleteBlockedRepositoryRequest" +
+ "\032*.gitpod.v1.DeleteBlockedRepositoryResp" +
+ "onse\"\000\022r\n\027ListBlockedEmailDomains\022).gitp" +
+ "od.v1.ListBlockedEmailDomainsRequest\032*.g" +
+ "itpod.v1.ListBlockedEmailDomainsResponse" +
+ "\"\000\022u\n\030CreateBlockedEmailDomain\022*.gitpod." +
+ "v1.CreateBlockedEmailDomainRequest\032+.git" +
+ "pod.v1.CreateBlockedEmailDomainResponse\"" +
+ "\000\022c\n\022GetOnboardingState\022$.gitpod.v1.GetO" +
+ "nboardingStateRequest\032%.gitpod.v1.GetOnb" +
+ "oardingStateResponse\"\000\022\201\001\n\034GetInstallati" +
+ "onConfiguration\022..gitpod.v1.GetInstallat" +
+ "ionConfigurationRequest\032/.gitpod.v1.GetI" +
+ "nstallationConfigurationResponse\"\000BQ\n\026io" +
+ ".gitpod.publicapi.v1Z7github.com/gitpod-" +
+ "io/gitpod/components/public-api/go/v1b\006p" +
+ "roto3"
+ };
+ descriptor = com.google.protobuf.Descriptors.FileDescriptor
+ .internalBuildGeneratedFileFrom(descriptorData,
+ new com.google.protobuf.Descriptors.FileDescriptor[] {
+ io.gitpod.publicapi.v1.Pagination.getDescriptor(),
+ io.gitpod.publicapi.v1.Sorting.getDescriptor(),
+ com.google.protobuf.TimestampProto.getDescriptor(),
+ });
+ internal_static_gitpod_v1_GetOnboardingStateRequest_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_gitpod_v1_GetOnboardingStateRequest_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_GetOnboardingStateRequest_descriptor,
+ new java.lang.String[] { });
+ internal_static_gitpod_v1_GetOnboardingStateResponse_descriptor =
+ getDescriptor().getMessageTypes().get(1);
+ internal_static_gitpod_v1_GetOnboardingStateResponse_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_GetOnboardingStateResponse_descriptor,
+ new java.lang.String[] { "OnboardingState", });
+ internal_static_gitpod_v1_OnboardingState_descriptor =
+ getDescriptor().getMessageTypes().get(2);
+ internal_static_gitpod_v1_OnboardingState_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_OnboardingState_descriptor,
+ new java.lang.String[] { "Completed", "OrganizationCountTotal", });
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_descriptor =
+ getDescriptor().getMessageTypes().get(3);
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageRequest_descriptor,
+ new java.lang.String[] { });
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_descriptor =
+ getDescriptor().getMessageTypes().get(4);
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_GetInstallationWorkspaceDefaultImageResponse_descriptor,
+ new java.lang.String[] { "DefaultWorkspaceImage", });
+ internal_static_gitpod_v1_ListBlockedRepositoriesRequest_descriptor =
+ getDescriptor().getMessageTypes().get(5);
+ internal_static_gitpod_v1_ListBlockedRepositoriesRequest_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_ListBlockedRepositoriesRequest_descriptor,
+ new java.lang.String[] { "Pagination", "Sort", "SearchTerm", });
+ internal_static_gitpod_v1_ListBlockedRepositoriesResponse_descriptor =
+ getDescriptor().getMessageTypes().get(6);
+ internal_static_gitpod_v1_ListBlockedRepositoriesResponse_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_ListBlockedRepositoriesResponse_descriptor,
+ new java.lang.String[] { "Pagination", "BlockedRepositories", });
+ internal_static_gitpod_v1_CreateBlockedRepositoryRequest_descriptor =
+ getDescriptor().getMessageTypes().get(7);
+ internal_static_gitpod_v1_CreateBlockedRepositoryRequest_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_CreateBlockedRepositoryRequest_descriptor,
+ new java.lang.String[] { "UrlRegexp", "BlockUser", "BlockFreeUsage", });
+ internal_static_gitpod_v1_CreateBlockedRepositoryResponse_descriptor =
+ getDescriptor().getMessageTypes().get(8);
+ internal_static_gitpod_v1_CreateBlockedRepositoryResponse_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_CreateBlockedRepositoryResponse_descriptor,
+ new java.lang.String[] { "BlockedRepository", });
+ internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_descriptor =
+ getDescriptor().getMessageTypes().get(9);
+ internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_DeleteBlockedRepositoryRequest_descriptor,
+ new java.lang.String[] { "BlockedRepositoryId", });
+ internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_descriptor =
+ getDescriptor().getMessageTypes().get(10);
+ internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_DeleteBlockedRepositoryResponse_descriptor,
+ new java.lang.String[] { });
+ internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_descriptor =
+ getDescriptor().getMessageTypes().get(11);
+ internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_ListBlockedEmailDomainsRequest_descriptor,
+ new java.lang.String[] { "Pagination", });
+ internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_descriptor =
+ getDescriptor().getMessageTypes().get(12);
+ internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_ListBlockedEmailDomainsResponse_descriptor,
+ new java.lang.String[] { "Pagination", "BlockedEmailDomains", });
+ internal_static_gitpod_v1_CreateBlockedEmailDomainRequest_descriptor =
+ getDescriptor().getMessageTypes().get(13);
+ internal_static_gitpod_v1_CreateBlockedEmailDomainRequest_fieldAccessorTable = new
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_gitpod_v1_CreateBlockedEmailDomainRequest_descriptor,
new java.lang.String[] { "Domain", "Negative", });
@@ -12113,6 +13611,24 @@ public io.gitpod.publicapi.v1.Installation.BlockedEmailDomain getDefaultInstance
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
internal_static_gitpod_v1_BlockedEmailDomain_descriptor,
new java.lang.String[] { "Id", "Domain", "Negative", });
+ internal_static_gitpod_v1_GetInstallationConfigurationRequest_descriptor =
+ getDescriptor().getMessageTypes().get(17);
+ internal_static_gitpod_v1_GetInstallationConfigurationRequest_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_GetInstallationConfigurationRequest_descriptor,
+ new java.lang.String[] { });
+ internal_static_gitpod_v1_GetInstallationConfigurationResponse_descriptor =
+ getDescriptor().getMessageTypes().get(18);
+ internal_static_gitpod_v1_GetInstallationConfigurationResponse_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_GetInstallationConfigurationResponse_descriptor,
+ new java.lang.String[] { "Configuration", });
+ internal_static_gitpod_v1_InstallationConfiguration_descriptor =
+ getDescriptor().getMessageTypes().get(19);
+ internal_static_gitpod_v1_InstallationConfiguration_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+ internal_static_gitpod_v1_InstallationConfiguration_descriptor,
+ new java.lang.String[] { "IsDedicatedInstallation", });
descriptor.resolveAllFeaturesImmutable();
io.gitpod.publicapi.v1.Pagination.getDescriptor();
io.gitpod.publicapi.v1.Sorting.getDescriptor();
diff --git a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/InstallationServiceClient.kt b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/InstallationServiceClient.kt
index 811e95ab99849e..0b639e5353e1ea 100644
--- a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/InstallationServiceClient.kt
+++ b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/InstallationServiceClient.kt
@@ -137,4 +137,22 @@ public class InstallationServiceClient(
),
)
+
+ /**
+ * GetInstallationConfiguration returns configuration of the installation.
+ */
+ override suspend
+ fun getInstallationConfiguration(request: Installation.GetInstallationConfigurationRequest,
+ headers: Headers): ResponseMessage =
+ client.unary(
+ request,
+ headers,
+ MethodSpec(
+ "gitpod.v1.InstallationService/GetInstallationConfiguration",
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationRequest::class,
+ io.gitpod.publicapi.v1.Installation.GetInstallationConfigurationResponse::class,
+ StreamType.UNARY,
+ ),
+ )
+
}
diff --git a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/InstallationServiceClientInterface.kt b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/InstallationServiceClientInterface.kt
index 3b8c5544e40c89..40c0e53b6fdf13 100644
--- a/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/InstallationServiceClientInterface.kt
+++ b/components/public-api/java/src/main/java/io/gitpod/publicapi/v1/InstallationServiceClientInterface.kt
@@ -56,4 +56,12 @@ public interface InstallationServiceClientInterface {
*/
public suspend fun getOnboardingState(request: Installation.GetOnboardingStateRequest,
headers: Headers = emptyMap()): ResponseMessage
+
+ /**
+ * GetInstallationConfiguration returns configuration of the installation.
+ */
+ public suspend
+ fun getInstallationConfiguration(request: Installation.GetInstallationConfigurationRequest,
+ headers: Headers = emptyMap()):
+ ResponseMessage
}
diff --git a/components/public-api/typescript-common/src/public-api-converter.spec.ts b/components/public-api/typescript-common/src/public-api-converter.spec.ts
index 05b0937216ef6d..6c885a81f275ac 100644
--- a/components/public-api/typescript-common/src/public-api-converter.spec.ts
+++ b/components/public-api/typescript-common/src/public-api-converter.spec.ts
@@ -277,10 +277,11 @@ describe("PublicAPIConverter", () => {
it("should convert", () => {
const result = converter.toOnboardingState({
isCompleted: true,
- hasAnyOrg: true,
+ organizationCountTotal: 1,
});
expect(result).to.deep.equal({
completed: true,
+ organizationCountTotal: 1,
});
});
});
diff --git a/components/public-api/typescript-common/src/public-api-converter.ts b/components/public-api/typescript-common/src/public-api-converter.ts
index 416127462680ec..b7f4c5a24e424e 100644
--- a/components/public-api/typescript-common/src/public-api-converter.ts
+++ b/components/public-api/typescript-common/src/public-api-converter.ts
@@ -39,6 +39,7 @@ import {
WorkspaceContext,
WorkspaceInfo,
WorkspaceSession as WorkspaceSessionProtocol,
+ Configuration as GitpodServerInstallationConfiguration,
} from "@gitpod/gitpod-protocol/lib/protocol";
import { AuditLog as AuditLogProtocol } from "@gitpod/gitpod-protocol/lib/audit-log";
import {
@@ -104,6 +105,7 @@ import {
import {
BlockedEmailDomain,
BlockedRepository,
+ InstallationConfiguration,
OnboardingState,
} from "@gitpod/public-api/lib/gitpod/v1/installation_pb";
import {
@@ -1665,6 +1667,13 @@ export class PublicAPIConverter {
toOnboardingState(state: GitpodServer.OnboardingState): OnboardingState {
return new OnboardingState({
completed: state.isCompleted,
+ organizationCountTotal: state.organizationCountTotal,
+ });
+ }
+
+ toInstallationConfiguration(config: GitpodServerInstallationConfiguration): InstallationConfiguration {
+ return new InstallationConfiguration({
+ isDedicatedInstallation: config.isDedicatedInstallation,
});
}
diff --git a/components/public-api/typescript-common/src/user-utils.ts b/components/public-api/typescript-common/src/user-utils.ts
index 5027e6442c6aa7..2bbb4aa76960df 100644
--- a/components/public-api/typescript-common/src/user-utils.ts
+++ b/components/public-api/typescript-common/src/user-utils.ts
@@ -73,3 +73,24 @@ export function getName(user: User | UserProtocol): string | undefined {
export function isOrganizationOwned(user: User | UserProtocol) {
return !!user.organizationId;
}
+
+/**
+ * gitpod.io: Only installation-level users are allowed to create orgs (installation-level users on gitpod.io, and admin user on Dedicated)
+ * Dedicated: Only if multiOrg is enabled, installation-level users can create orgs
+ * @param user
+ * @param isDedicated
+ * @param isMultiOrgEnabled
+ * @returns
+ */
+export function isAllowedToCreateOrganization(
+ user: User | UserProtocol,
+ isDedicated: boolean,
+ isMultiOrgEnabled?: boolean,
+): boolean {
+ if (!isDedicated) {
+ // gitpod.io case
+ return !isOrganizationOwned(user);
+ }
+
+ return !isOrganizationOwned(user) && !!isMultiOrgEnabled;
+}
diff --git a/components/public-api/typescript/src/gitpod/v1/installation_connect.ts b/components/public-api/typescript/src/gitpod/v1/installation_connect.ts
index 50d4ce2450111a..257e5c26d2a39a 100644
--- a/components/public-api/typescript/src/gitpod/v1/installation_connect.ts
+++ b/components/public-api/typescript/src/gitpod/v1/installation_connect.ts
@@ -9,7 +9,7 @@
/* eslint-disable */
// @ts-nocheck
-import { CreateBlockedEmailDomainRequest, CreateBlockedEmailDomainResponse, CreateBlockedRepositoryRequest, CreateBlockedRepositoryResponse, DeleteBlockedRepositoryRequest, DeleteBlockedRepositoryResponse, GetInstallationWorkspaceDefaultImageRequest, GetInstallationWorkspaceDefaultImageResponse, GetOnboardingStateRequest, GetOnboardingStateResponse, ListBlockedEmailDomainsRequest, ListBlockedEmailDomainsResponse, ListBlockedRepositoriesRequest, ListBlockedRepositoriesResponse } from "./installation_pb.js";
+import { CreateBlockedEmailDomainRequest, CreateBlockedEmailDomainResponse, CreateBlockedRepositoryRequest, CreateBlockedRepositoryResponse, DeleteBlockedRepositoryRequest, DeleteBlockedRepositoryResponse, GetInstallationConfigurationRequest, GetInstallationConfigurationResponse, GetInstallationWorkspaceDefaultImageRequest, GetInstallationWorkspaceDefaultImageResponse, GetOnboardingStateRequest, GetOnboardingStateResponse, ListBlockedEmailDomainsRequest, ListBlockedEmailDomainsResponse, ListBlockedRepositoriesRequest, ListBlockedRepositoriesResponse } from "./installation_pb.js";
import { MethodKind } from "@bufbuild/protobuf";
/**
@@ -96,5 +96,16 @@ export const InstallationService = {
O: GetOnboardingStateResponse,
kind: MethodKind.Unary,
},
+ /**
+ * GetInstallationConfiguration returns configuration of the installation.
+ *
+ * @generated from rpc gitpod.v1.InstallationService.GetInstallationConfiguration
+ */
+ getInstallationConfiguration: {
+ name: "GetInstallationConfiguration",
+ I: GetInstallationConfigurationRequest,
+ O: GetInstallationConfigurationResponse,
+ kind: MethodKind.Unary,
+ },
}
} as const;
diff --git a/components/public-api/typescript/src/gitpod/v1/installation_pb.ts b/components/public-api/typescript/src/gitpod/v1/installation_pb.ts
index 1b8776f4421423..cfb2477dcbb037 100644
--- a/components/public-api/typescript/src/gitpod/v1/installation_pb.ts
+++ b/components/public-api/typescript/src/gitpod/v1/installation_pb.ts
@@ -87,10 +87,19 @@ export class GetOnboardingStateResponse extends Message {
/**
+ * Whether at least one organization has completed the onboarding
+ *
* @generated from field: bool completed = 1;
*/
completed = false;
+ /**
+ * The total number of organizations
+ *
+ * @generated from field: int32 organization_count_total = 2;
+ */
+ organizationCountTotal = 0;
+
constructor(data?: PartialMessage) {
super();
proto3.util.initPartial(data, this);
@@ -100,6 +109,7 @@ export class OnboardingState extends Message {
static readonly typeName = "gitpod.v1.OnboardingState";
static readonly fields: FieldList = proto3.util.newFieldList(() => [
{ no: 1, name: "completed", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
+ { no: 2, name: "organization_count_total", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
]);
static fromBinary(bytes: Uint8Array, options?: Partial): OnboardingState {
@@ -751,3 +761,108 @@ export class BlockedEmailDomain extends Message {
return proto3.util.equals(BlockedEmailDomain, a, b);
}
}
+
+/**
+ * @generated from message gitpod.v1.GetInstallationConfigurationRequest
+ */
+export class GetInstallationConfigurationRequest extends Message {
+ constructor(data?: PartialMessage) {
+ super();
+ proto3.util.initPartial(data, this);
+ }
+
+ static readonly runtime: typeof proto3 = proto3;
+ static readonly typeName = "gitpod.v1.GetInstallationConfigurationRequest";
+ static readonly fields: FieldList = proto3.util.newFieldList(() => [
+ ]);
+
+ static fromBinary(bytes: Uint8Array, options?: Partial): GetInstallationConfigurationRequest {
+ return new GetInstallationConfigurationRequest().fromBinary(bytes, options);
+ }
+
+ static fromJson(jsonValue: JsonValue, options?: Partial): GetInstallationConfigurationRequest {
+ return new GetInstallationConfigurationRequest().fromJson(jsonValue, options);
+ }
+
+ static fromJsonString(jsonString: string, options?: Partial): GetInstallationConfigurationRequest {
+ return new GetInstallationConfigurationRequest().fromJsonString(jsonString, options);
+ }
+
+ static equals(a: GetInstallationConfigurationRequest | PlainMessage | undefined, b: GetInstallationConfigurationRequest | PlainMessage | undefined): boolean {
+ return proto3.util.equals(GetInstallationConfigurationRequest, a, b);
+ }
+}
+
+/**
+ * @generated from message gitpod.v1.GetInstallationConfigurationResponse
+ */
+export class GetInstallationConfigurationResponse extends Message {
+ /**
+ * @generated from field: gitpod.v1.InstallationConfiguration configuration = 1;
+ */
+ configuration?: InstallationConfiguration;
+
+ constructor(data?: PartialMessage) {
+ super();
+ proto3.util.initPartial(data, this);
+ }
+
+ static readonly runtime: typeof proto3 = proto3;
+ static readonly typeName = "gitpod.v1.GetInstallationConfigurationResponse";
+ static readonly fields: FieldList = proto3.util.newFieldList(() => [
+ { no: 1, name: "configuration", kind: "message", T: InstallationConfiguration },
+ ]);
+
+ static fromBinary(bytes: Uint8Array, options?: Partial): GetInstallationConfigurationResponse {
+ return new GetInstallationConfigurationResponse().fromBinary(bytes, options);
+ }
+
+ static fromJson(jsonValue: JsonValue, options?: Partial): GetInstallationConfigurationResponse {
+ return new GetInstallationConfigurationResponse().fromJson(jsonValue, options);
+ }
+
+ static fromJsonString(jsonString: string, options?: Partial): GetInstallationConfigurationResponse {
+ return new GetInstallationConfigurationResponse().fromJsonString(jsonString, options);
+ }
+
+ static equals(a: GetInstallationConfigurationResponse | PlainMessage | undefined, b: GetInstallationConfigurationResponse | PlainMessage | undefined): boolean {
+ return proto3.util.equals(GetInstallationConfigurationResponse, a, b);
+ }
+}
+
+/**
+ * @generated from message gitpod.v1.InstallationConfiguration
+ */
+export class InstallationConfiguration extends Message {
+ /**
+ * @generated from field: bool is_dedicated_installation = 1;
+ */
+ isDedicatedInstallation = false;
+
+ constructor(data?: PartialMessage) {
+ super();
+ proto3.util.initPartial(data, this);
+ }
+
+ static readonly runtime: typeof proto3 = proto3;
+ static readonly typeName = "gitpod.v1.InstallationConfiguration";
+ static readonly fields: FieldList = proto3.util.newFieldList(() => [
+ { no: 1, name: "is_dedicated_installation", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
+ ]);
+
+ static fromBinary(bytes: Uint8Array, options?: Partial): InstallationConfiguration {
+ return new InstallationConfiguration().fromBinary(bytes, options);
+ }
+
+ static fromJson(jsonValue: JsonValue, options?: Partial): InstallationConfiguration {
+ return new InstallationConfiguration().fromJson(jsonValue, options);
+ }
+
+ static fromJsonString(jsonString: string, options?: Partial): InstallationConfiguration {
+ return new InstallationConfiguration().fromJsonString(jsonString, options);
+ }
+
+ static equals(a: InstallationConfiguration | PlainMessage | undefined, b: InstallationConfiguration | PlainMessage | undefined): boolean {
+ return proto3.util.equals(InstallationConfiguration, a, b);
+ }
+}
diff --git a/components/server/src/api/installation-service-api.ts b/components/server/src/api/installation-service-api.ts
index 1e9adb7c6618f4..00010fbadb7bae 100644
--- a/components/server/src/api/installation-service-api.ts
+++ b/components/server/src/api/installation-service-api.ts
@@ -14,6 +14,8 @@ import {
CreateBlockedRepositoryResponse,
DeleteBlockedRepositoryRequest,
DeleteBlockedRepositoryResponse,
+ GetInstallationConfigurationRequest,
+ GetInstallationConfigurationResponse,
GetInstallationWorkspaceDefaultImageRequest,
GetInstallationWorkspaceDefaultImageResponse,
GetOnboardingStateRequest,
@@ -149,4 +151,14 @@ export class InstallationServiceAPI implements ServiceImpl {
+ const config = await this.installationService.getInstallationConfiguration();
+ return new GetInstallationConfigurationResponse({
+ configuration: this.apiConverter.toInstallationConfiguration(config),
+ });
+ }
}
diff --git a/components/server/src/auth/installation-service.ts b/components/server/src/auth/installation-service.ts
index e787672fe3b387..db529d0a7ad7a3 100644
--- a/components/server/src/auth/installation-service.ts
+++ b/components/server/src/auth/installation-service.ts
@@ -4,7 +4,13 @@
* See License.AGPL.txt in the project root for license information.
*/
-import { AdminGetListRequest, AdminGetListResult, EmailDomainFilterEntry, GitpodServer } from "@gitpod/gitpod-protocol";
+import {
+ AdminGetListRequest,
+ AdminGetListResult,
+ Configuration,
+ EmailDomainFilterEntry,
+ GitpodServer,
+} from "@gitpod/gitpod-protocol";
import { inject, injectable } from "inversify";
import { EmailDomainFilterDB, TeamDB } from "@gitpod/gitpod-db/lib";
import { BlockedRepository } from "@gitpod/gitpod-protocol/lib/blocked-repositories-protocol";
@@ -73,12 +79,11 @@ export class InstallationService {
// Find useful details about the state of the Gitpod installation.
const { rows } = await this.teamDB.findTeams(
0 /* offset */,
- 1 /* limit */,
+ undefined /* limit */,
"creationTime" /* order by */,
"ASC",
"" /* empty search term returns any */,
);
- const hasAnyOrg = rows.length > 0;
let isCompleted = false;
for (const row of rows) {
isCompleted = await this.teamDB.hasActiveSSO(row.id);
@@ -88,7 +93,7 @@ export class InstallationService {
}
return {
isCompleted,
- hasAnyOrg,
+ organizationCountTotal: rows.length,
};
}
@@ -121,6 +126,13 @@ export class InstallationService {
}));
return classes;
}
+
+ async getInstallationConfiguration(): Promise {
+ // everybody can read this configuration
+ return {
+ isDedicatedInstallation: this.config.isDedicatedInstallation,
+ };
+ }
}
export async function isWorkspaceClassDiscoveryEnabled(user: { id: string }): Promise {
diff --git a/components/server/src/auth/verification-service.ts b/components/server/src/auth/verification-service.ts
index 71617ba00d5007..e23c6d974f0326 100644
--- a/components/server/src/auth/verification-service.ts
+++ b/components/server/src/auth/verification-service.ts
@@ -110,7 +110,7 @@ export class VerificationService {
) {
if (this.config.twilioConfig) {
this.verifyService = new TwilioVerificationEndpoint(this.config);
- } else if (this.config.devBranch && !this.config.isSingleOrgInstallation) {
+ } else if (this.config.devBranch && !this.config.isDedicatedInstallation) {
// preview environments get the mock verification endpoint
this.verifyService = new MockVerificationEndpoint();
}
diff --git a/components/server/src/config.ts b/components/server/src/config.ts
index c949a156ffba8d..0e1b8d06a78d9d 100644
--- a/components/server/src/config.ts
+++ b/components/server/src/config.ts
@@ -157,8 +157,6 @@ export interface ConfigSerialized {
passlist: string[];
};
- showSetupModal: boolean;
-
admin: {
credentialsPath: string;
};
@@ -274,7 +272,8 @@ export interface ConfigSerialized {
address: string;
};
- isSingleOrgInstallation: boolean;
+ /** true if this is a Dedicated */
+ isDedicatedInstallation: boolean;
}
export interface CookieConfig {
diff --git a/components/server/src/iam/iam-session-app.spec.ts b/components/server/src/iam/iam-session-app.spec.ts
index 32c6d7f8ea169e..14e4b55ba36a6b 100644
--- a/components/server/src/iam/iam-session-app.spec.ts
+++ b/components/server/src/iam/iam-session-app.spec.ts
@@ -19,7 +19,7 @@ import request from "supertest";
import * as chai from "chai";
import { OIDCCreateSessionPayload } from "./iam-oidc-create-session-payload";
-import { TeamMemberInfo, TeamMemberRole, User } from "@gitpod/gitpod-protocol";
+import { TeamMemberInfo, User } from "@gitpod/gitpod-protocol";
import { OrganizationService } from "../orgs/organization-service";
import { UserService } from "../user/user-service";
import { TeamDB, UserDB } from "@gitpod/gitpod-db/lib";
@@ -40,9 +40,6 @@ class TestIamSessionApp {
};
protected userServiceMock: Partial = {
- createUser: (params) => {
- return { id: "id-new-user" } as any;
- },
updateUser: (userId, update) => {
return {} as any;
},
@@ -67,8 +64,10 @@ class TestIamSessionApp {
listMembers: async (teamId: string): Promise => {
return [];
},
- async addOrUpdateMember(userId: string, teamId: string, memberId: string, role: TeamMemberRole): Promise {
- this.memberships.add(memberId);
+ async createOrgOwnedUser(params): Promise {
+ const user = { id: "id-new-user" } as any as User;
+ this.memberships.add(user.id);
+ return user;
},
};
diff --git a/components/server/src/iam/iam-session-app.ts b/components/server/src/iam/iam-session-app.ts
index c4908ce7778fb8..27f7ef3444edb7 100644
--- a/components/server/src/iam/iam-session-app.ts
+++ b/components/server/src/iam/iam-session-app.ts
@@ -16,7 +16,6 @@ import { reportJWTCookieIssued } from "../prometheus-metrics";
import { ApplicationError } from "@gitpod/gitpod-protocol/lib/messaging/error";
import { OrganizationService } from "../orgs/organization-service";
import { UserService } from "../user/user-service";
-import { UserDB } from "@gitpod/gitpod-db/lib";
import { SYSTEM_USER, SYSTEM_USER_ID } from "../authorization/authorizer";
import { runWithSubjectId, runWithRequestContext } from "../util/request-context";
@@ -29,7 +28,6 @@ export class IamSessionApp {
@inject(UserService) private readonly userService: UserService,
@inject(OrganizationService) private readonly orgService: OrganizationService,
@inject(SessionHandler) private readonly session: SessionHandler,
- @inject(UserDB) private readonly userDb: UserDB,
) {}
public getMiddlewares() {
@@ -167,30 +165,15 @@ export class IamSessionApp {
private async createNewOIDCUser(payload: OIDCCreateSessionPayload): Promise {
const { claims, organizationId } = payload;
- return this.userDb.transaction(async (_, ctx) => {
- // Until we support SKIM (or any other means to sync accounts) we create new users here as a side-effect of the login
- const user = await this.userService.createUser(
- {
- organizationId,
- identity: { ...this.mapOIDCProfileToIdentity(payload), lastSigninTime: new Date().toISOString() },
- userUpdate: (user) => {
- user.fullName = claims.name;
- user.name = claims.name;
- user.avatarUrl = claims.picture;
- },
- },
- ctx,
- );
-
- await this.orgService.addOrUpdateMember(
- SYSTEM_USER_ID,
- organizationId,
- user.id,
- "member",
- { flexibleRole: true },
- ctx,
- );
- return user;
+ // Until we support SKIM (or any other means to sync accounts) we create new users here as a side-effect of the login
+ return this.orgService.createOrgOwnedUser({
+ organizationId,
+ identity: { ...this.mapOIDCProfileToIdentity(payload), lastSigninTime: new Date().toISOString() },
+ userUpdate: (user) => {
+ user.fullName = claims.name;
+ user.name = claims.name;
+ user.avatarUrl = claims.picture;
+ },
});
}
}
diff --git a/components/server/src/orgs/organization-service.spec.db.ts b/components/server/src/orgs/organization-service.spec.db.ts
index bf225fc04f3084..73f6b8509472ca 100644
--- a/components/server/src/orgs/organization-service.spec.db.ts
+++ b/components/server/src/orgs/organization-service.spec.db.ts
@@ -4,7 +4,7 @@
* See License.AGPL.txt in the project root for license information.
*/
-import { BUILTIN_INSTLLATION_ADMIN_USER_ID, TypeORM } from "@gitpod/gitpod-db/lib";
+import { BUILTIN_INSTLLATION_ADMIN_USER_ID, TypeORM, UserDB } from "@gitpod/gitpod-db/lib";
import { Organization, OrganizationSettings, TeamMemberRole, User } from "@gitpod/gitpod-protocol";
import { Experiments } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
import { ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
@@ -473,4 +473,54 @@ describe("OrganizationService", async () => {
);
await assertUpdateSettings("should enable workspace sharing", { workspaceSharingDisabled: false }, {});
});
+
+ it("org-owned users can't create new organizations", async () => {
+ const userDB = container.get(UserDB);
+ const os = container.get(OrganizationService);
+
+ // create the owner (installation-level)
+ const owner = await userDB.newUser();
+
+ // create an org
+ const orgService = container.get(OrganizationService);
+ const myOrg = await orgService.createOrganization(owner.id, "my-org");
+
+ // create org-owned user
+ const member = await createOrgOwnedUser(os, myOrg.id);
+
+ await expectError(ErrorCodes.PERMISSION_DENIED, () => os.createOrganization(member.id, "member's crew"));
+ });
+
+ it("org-owned users can't join another org", async () => {
+ const userDB = container.get(UserDB);
+ const os = container.get(OrganizationService);
+
+ // create the owner (installation-level)
+ const owner = await userDB.newUser();
+
+ // create the orgs
+ const orgService = container.get(OrganizationService);
+ const myOrg = await orgService.createOrganization(owner.id, "my-org");
+ const anotherOrg = await orgService.createOrganization(owner.id, "another-org");
+
+ // create org-owned user
+ const member = await createOrgOwnedUser(os, myOrg.id);
+
+ const failingInvite = await orgService.getOrCreateInvite(owner.id, anotherOrg.id);
+ await expectError(ErrorCodes.PERMISSION_DENIED, () => os.joinOrganization(member.id, failingInvite.id));
+ });
});
+
+async function createOrgOwnedUser(os: OrganizationService, organizationId: string) {
+ // create org-owned member
+ return os.createOrgOwnedUser({
+ organizationId,
+ identity: {
+ authId: "123",
+ authProviderId: "https://accounts.google.com",
+ authName: "member",
+ lastSigninTime: new Date().toISOString(),
+ },
+ userUpdate: (user) => {},
+ });
+}
diff --git a/components/server/src/orgs/organization-service.spec.ts b/components/server/src/orgs/organization-service.spec.ts
index 92879cfe436dbf..cec702b6a28413 100644
--- a/components/server/src/orgs/organization-service.spec.ts
+++ b/components/server/src/orgs/organization-service.spec.ts
@@ -19,6 +19,7 @@ import { Config } from "../config";
import { IDEService } from "../ide-service";
import { StripeService } from "../billing/stripe-service";
import { UsageService } from "./usage-service";
+import { UserAuthentication } from "../user/user-authentication";
const expect = chai.expect;
@@ -77,6 +78,7 @@ describe("OrganizationService", async () => {
} as any as InstallationService);
container.bind(StripeService).toConstantValue({} as any as StripeService);
container.bind(UsageService).toConstantValue({} as any as UsageService);
+ container.bind(UserAuthentication).toConstantValue({} as any as UserAuthentication);
os = container.get(OrganizationService);
});
diff --git a/components/server/src/orgs/organization-service.ts b/components/server/src/orgs/organization-service.ts
index a163262c0dbad5..c4f8a9b15caeaf 100644
--- a/components/server/src/orgs/organization-service.ts
+++ b/components/server/src/orgs/organization-service.ts
@@ -13,6 +13,7 @@ import {
TeamMembershipInvite,
WorkspaceTimeoutDuration,
OrgMemberRole,
+ User,
} from "@gitpod/gitpod-protocol";
import { IAnalyticsWriter } from "@gitpod/gitpod-protocol/lib/analytics";
import { ApplicationError, ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
@@ -33,6 +34,7 @@ import { StripeService } from "../billing/stripe-service";
import { AttributionId } from "@gitpod/gitpod-protocol/lib/attribution";
import { UsageService } from "./usage-service";
import { CostCenter_BillingStrategy } from "@gitpod/gitpod-protocol/lib/usage";
+import { CreateUserParams, UserAuthentication } from "../user/user-authentication";
@injectable()
export class OrganizationService {
@@ -49,6 +51,7 @@ export class OrganizationService {
@inject(UsageService) private readonly usageService: UsageService,
@inject(DefaultWorkspaceImageValidator)
private readonly validateDefaultWorkspaceImage: DefaultWorkspaceImageValidator,
+ @inject(UserAuthentication) private readonly userAuthentication: UserAuthentication,
) {}
async listOrganizations(
@@ -145,6 +148,19 @@ export class OrganizationService {
}
async createOrganization(userId: string, name: string): Promise {
+ // TODO(gpl): Should we use the authorization layer to make this decision?
+ const user = await this.userDB.findUserById(userId);
+ if (!user) {
+ throw new ApplicationError(ErrorCodes.NOT_AUTHENTICATED, `User not authenticated. Please login.`);
+ }
+ const mayCreateOrganization = await this.userAuthentication.mayCreateOrganization(user);
+ if (!mayCreateOrganization) {
+ throw new ApplicationError(
+ ErrorCodes.PERMISSION_DENIED,
+ "Organizational accounts are not allowed to create new organizations",
+ );
+ }
+
let result: Organization;
try {
result = await this.teamDB.transaction(async (db) => {
@@ -254,6 +270,19 @@ export class OrganizationService {
}
public async joinOrganization(userId: string, inviteId: string): Promise {
+ const user = await this.userDB.findUserById(userId);
+ if (!user) {
+ throw new ApplicationError(ErrorCodes.INTERNAL_SERVER_ERROR, `User ${userId} not found`);
+ }
+
+ const mayJoinOrganization = await this.userAuthentication.mayJoinOrganization(user);
+ if (!mayJoinOrganization) {
+ throw new ApplicationError(
+ ErrorCodes.PERMISSION_DENIED,
+ "Organizational accounts are not allowed to join other organizations",
+ );
+ }
+
// Invites can be used by anyone, as long as they know the invite ID, hence needs no resource guard
const invite = await this.teamDB.findTeamMembershipInviteById(inviteId);
if (!invite || invite.invalidationTime !== "") {
@@ -262,10 +291,6 @@ export class OrganizationService {
if (await this.teamDB.hasActiveSSO(invite.teamId)) {
throw new ApplicationError(ErrorCodes.NOT_FOUND, "Invites are disabled for SSO-enabled organizations.");
}
- const user = await this.userDB.findUserById(userId);
- if (!user) {
- throw new ApplicationError(ErrorCodes.INTERNAL_SERVER_ERROR, `User ${userId} not found`);
- }
// set skipRoleUpdate=true to avoid member/owner click join link again cause role change
await runWithSubjectId(SYSTEM_USER, () =>
@@ -300,6 +325,26 @@ export class OrganizationService {
return invite.teamId;
}
+ /**
+ * Convenience method, analogue to UserService.createUser()
+``
+ */
+ public async createOrgOwnedUser(params: CreateUserParams & { organizationId: string }): Promise {
+ return this.userDB.transaction(async (_, ctx) => {
+ const user = await this.userService.createUser(params, ctx);
+
+ await this.addOrUpdateMember(
+ SYSTEM_USER_ID,
+ params.organizationId,
+ user.id,
+ "member",
+ { flexibleRole: true },
+ ctx,
+ );
+ return user;
+ });
+ }
+
/**
* Add or update member to an organization, if there's no `owner` in the organization, target role will be owner
*
diff --git a/components/server/src/user/env-var-service.spec.db.ts b/components/server/src/user/env-var-service.spec.db.ts
index 8c43dbc763bc87..01ca2aa69843be 100644
--- a/components/server/src/user/env-var-service.spec.db.ts
+++ b/components/server/src/user/env-var-service.spec.db.ts
@@ -19,7 +19,7 @@ import { Experiments } from "@gitpod/gitpod-protocol/lib/experiments/configcat-s
import * as chai from "chai";
import { Container } from "inversify";
import "mocha";
-import { createTestContainer, withTestCtx } from "../test/service-testing-container-module";
+import { createTestContainer } from "../test/service-testing-container-module";
import { resetDB } from "@gitpod/gitpod-db/lib/test/reset-db";
import { OrganizationService } from "../orgs/organization-service";
import { UserService } from "./user-service";
@@ -27,7 +27,6 @@ import { expectError } from "../test/expect-utils";
import { ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
import { EnvVarService } from "./env-var-service";
import { ProjectsService } from "../projects/projects-service";
-import { SYSTEM_USER } from "../authorization/authorizer";
const expect = chai.expect;
@@ -98,9 +97,8 @@ describe("EnvVarService", async () => {
const orgService = container.get(OrganizationService);
org = await orgService.createOrganization(BUILTIN_INSTLLATION_ADMIN_USER_ID, "myOrg");
- const invite = await orgService.getOrCreateInvite(BUILTIN_INSTLLATION_ADMIN_USER_ID, org.id);
- member = await userService.createUser({
+ member = await orgService.createOrgOwnedUser({
organizationId: org.id,
identity: {
authId: "foo",
@@ -109,7 +107,6 @@ describe("EnvVarService", async () => {
primaryEmail: "yolo@yolo.com",
},
});
- await withTestCtx(SYSTEM_USER, () => orgService.joinOrganization(member.id, invite.id));
stranger = await userService.createUser({
identity: {
authId: "foo2",
diff --git a/components/server/src/user/gitpod-token-service.spec.db.ts b/components/server/src/user/gitpod-token-service.spec.db.ts
index bf942095b0e274..171140bd619cee 100644
--- a/components/server/src/user/gitpod-token-service.spec.db.ts
+++ b/components/server/src/user/gitpod-token-service.spec.db.ts
@@ -10,14 +10,13 @@ import { Experiments } from "@gitpod/gitpod-protocol/lib/experiments/configcat-s
import * as chai from "chai";
import { Container } from "inversify";
import "mocha";
-import { createTestContainer, withTestCtx } from "../test/service-testing-container-module";
+import { createTestContainer } from "../test/service-testing-container-module";
import { resetDB } from "@gitpod/gitpod-db/lib/test/reset-db";
import { OrganizationService } from "../orgs/organization-service";
import { UserService } from "./user-service";
import { expectError } from "../test/expect-utils";
import { ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
import { GitpodTokenService } from "./gitpod-token-service";
-import { SYSTEM_USER } from "../authorization/authorizer";
const expect = chai.expect;
@@ -35,10 +34,9 @@ describe("GitpodTokenService", async () => {
const orgService = container.get(OrganizationService);
org = await orgService.createOrganization(BUILTIN_INSTLLATION_ADMIN_USER_ID, "myOrg");
- const invite = await orgService.getOrCreateInvite(BUILTIN_INSTLLATION_ADMIN_USER_ID, org.id);
const userService = container.get(UserService);
- member = await userService.createUser({
+ member = await orgService.createOrgOwnedUser({
organizationId: org.id,
identity: {
authId: "foo",
@@ -47,7 +45,6 @@ describe("GitpodTokenService", async () => {
primaryEmail: "yolo@yolo.com",
},
});
- await withTestCtx(SYSTEM_USER, () => orgService.joinOrganization(member.id, invite.id));
stranger = await userService.createUser({
identity: {
authId: "foo2",
diff --git a/components/server/src/user/sshkey-service.spec.db.ts b/components/server/src/user/sshkey-service.spec.db.ts
index babd8427ffe7c1..3adf16644d893a 100644
--- a/components/server/src/user/sshkey-service.spec.db.ts
+++ b/components/server/src/user/sshkey-service.spec.db.ts
@@ -10,14 +10,13 @@ import { Experiments } from "@gitpod/gitpod-protocol/lib/experiments/configcat-s
import * as chai from "chai";
import { Container } from "inversify";
import "mocha";
-import { createTestContainer, withTestCtx } from "../test/service-testing-container-module";
+import { createTestContainer } from "../test/service-testing-container-module";
import { resetDB } from "@gitpod/gitpod-db/lib/test/reset-db";
import { SSHKeyService } from "./sshkey-service";
import { OrganizationService } from "../orgs/organization-service";
import { UserService } from "./user-service";
import { expectError } from "../test/expect-utils";
import { ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
-import { SYSTEM_USER } from "../authorization/authorizer";
const expect = chai.expect;
@@ -46,10 +45,9 @@ describe("SSHKeyService", async () => {
const orgService = container.get(OrganizationService);
org = await orgService.createOrganization(BUILTIN_INSTLLATION_ADMIN_USER_ID, "myOrg");
- const invite = await orgService.getOrCreateInvite(BUILTIN_INSTLLATION_ADMIN_USER_ID, org.id);
const userService = container.get(UserService);
- member = await userService.createUser({
+ member = await orgService.createOrgOwnedUser({
organizationId: org.id,
identity: {
authId: "foo",
@@ -58,7 +56,6 @@ describe("SSHKeyService", async () => {
primaryEmail: "yolo@yolo.com",
},
});
- await withTestCtx(SYSTEM_USER, () => orgService.joinOrganization(member.id, invite.id));
stranger = await userService.createUser({
identity: {
authId: "foo2",
diff --git a/components/server/src/user/token-service.spec.db.ts b/components/server/src/user/token-service.spec.db.ts
index 8b0f1bdb403c5c..50d1af5382dabc 100644
--- a/components/server/src/user/token-service.spec.db.ts
+++ b/components/server/src/user/token-service.spec.db.ts
@@ -8,12 +8,10 @@ import { Experiments } from "@gitpod/gitpod-protocol/lib/experiments/configcat-s
import * as chai from "chai";
import "mocha";
import { Container } from "inversify";
-import { createTestContainer, withTestCtx } from "../test/service-testing-container-module";
+import { createTestContainer } from "../test/service-testing-container-module";
import { BUILTIN_INSTLLATION_ADMIN_USER_ID, TypeORM, UserDB } from "@gitpod/gitpod-db/lib";
import { resetDB } from "@gitpod/gitpod-db/lib/test/reset-db";
import { OrganizationService } from "../orgs/organization-service";
-import { SYSTEM_USER } from "../authorization/authorizer";
-import { UserService } from "./user-service";
import { Organization, Token, User } from "@gitpod/gitpod-protocol";
import { TokenService } from "./token-service";
import { TokenProvider } from "./token-provider";
@@ -33,11 +31,9 @@ describe("TokenService", async () => {
let container: Container;
let tokenService: TokenService;
- let userService: UserService;
let userDB: UserDB;
let orgService: OrganizationService;
let org: Organization;
- let owner: User;
let user: User;
let token: Token;
@@ -127,23 +123,10 @@ describe("TokenService", async () => {
tokenService = container.get(TokenService);
userDB = container.get(UserDB);
- userService = container.get(UserService);
orgService = container.get(OrganizationService);
org = await orgService.createOrganization(BUILTIN_INSTLLATION_ADMIN_USER_ID, "myOrg");
- const invite = await orgService.getOrCreateInvite(BUILTIN_INSTLLATION_ADMIN_USER_ID, org.id);
- // first not builtin user join an org will be an owner
- owner = await userService.createUser({
- organizationId: org.id,
- identity: {
- authId: "foo",
- authName: "bar",
- authProviderId: "github",
- primaryEmail: "yolo@yolo.com",
- },
- });
- await withTestCtx(SYSTEM_USER, () => orgService.joinOrganization(owner.id, invite.id));
- user = await userService.createUser({
+ user = await orgService.createOrgOwnedUser({
organizationId: org.id,
identity: {
authId: githubUserAuthId,
@@ -159,7 +142,6 @@ describe("TokenService", async () => {
primaryEmail: "yolo@yolo.com",
});
await userDB.storeUser(user);
- await withTestCtx(SYSTEM_USER, () => orgService.joinOrganization(user.id, invite.id));
// test data
token = {
diff --git a/components/server/src/user/user-authentication.ts b/components/server/src/user/user-authentication.ts
index 40250e7bffde40..ddb2f3051fb631 100644
--- a/components/server/src/user/user-authentication.ts
+++ b/components/server/src/user/user-authentication.ts
@@ -16,6 +16,8 @@ import { EmailAddressAlreadyTakenException, SelectAccountException } from "../au
import { SelectAccountPayload } from "@gitpod/gitpod-protocol/lib/auth";
import { UserService } from "./user-service";
import { Authorizer } from "../authorization/authorizer";
+import { getExperimentsClientForBackend } from "@gitpod/gitpod-protocol/lib/experiments/configcat-server";
+import { isOrganizationOwned, isAllowedToCreateOrganization } from "@gitpod/public-api-common/lib/user-utils";
export interface CreateUserParams {
organizationId?: string;
@@ -193,12 +195,26 @@ export class UserAuthentication {
}
/**
- * Only installation-level users are allowed to create/join other orgs then the one they belong to
+ * Only installation-level users are allowed to join other orgs then the one they belong to
* @param user
* @returns
*/
- async mayCreateOrJoinOrganization(user: User): Promise {
- return !user.organizationId;
+ async mayJoinOrganization(user: User): Promise {
+ return !isOrganizationOwned(user);
+ }
+
+ /**
+ * gitpod.io: Only installation-level users are allowed to create orgs
+ * Dedicated: Only if multiOrg is enabled, installation-level users (=admin-user) can create orgs
+ * @param user
+ * @returns
+ */
+ async mayCreateOrganization(user: User): Promise {
+ const isDedicated = this.config.isDedicatedInstallation;
+ const isMultiOrgEnabled = await getExperimentsClientForBackend().getValueAsync("enable_multi_org", false, {
+ gitpodHost: this.config.hostUrl.url.host,
+ });
+ return isAllowedToCreateOrganization(user, isDedicated, isMultiOrgEnabled);
}
async isBlocked(params: CheckIsBlockedParams): Promise {
diff --git a/components/server/src/user/user-service.spec.db.ts b/components/server/src/user/user-service.spec.db.ts
index 5a0a06adba5927..9e1ee7e3b5ffc8 100644
--- a/components/server/src/user/user-service.spec.db.ts
+++ b/components/server/src/user/user-service.spec.db.ts
@@ -8,11 +8,11 @@ import { Experiments } from "@gitpod/gitpod-protocol/lib/experiments/configcat-s
import * as chai from "chai";
import "mocha";
import { Container } from "inversify";
-import { createTestContainer, withTestCtx } from "../test/service-testing-container-module";
+import { createTestContainer } from "../test/service-testing-container-module";
import { BUILTIN_INSTLLATION_ADMIN_USER_ID, TypeORM } from "@gitpod/gitpod-db/lib";
import { resetDB } from "@gitpod/gitpod-db/lib/test/reset-db";
import { OrganizationService } from "../orgs/organization-service";
-import { Authorizer, SYSTEM_USER } from "../authorization/authorizer";
+import { Authorizer } from "../authorization/authorizer";
import { UserService } from "./user-service";
import { Organization, User } from "@gitpod/gitpod-protocol";
import { ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
@@ -38,9 +38,8 @@ describe("UserService", async () => {
auth = container.get(Authorizer);
orgService = container.get(OrganizationService);
org = await orgService.createOrganization(BUILTIN_INSTLLATION_ADMIN_USER_ID, "myOrg");
- const invite = await orgService.getOrCreateInvite(BUILTIN_INSTLLATION_ADMIN_USER_ID, org.id);
// first not builtin user join an org will be an owner
- owner = await userService.createUser({
+ owner = await orgService.createOrgOwnedUser({
organizationId: org.id,
identity: {
authId: "foo",
@@ -49,9 +48,8 @@ describe("UserService", async () => {
primaryEmail: "yolo@yolo.com",
},
});
- await withTestCtx(SYSTEM_USER, () => orgService.joinOrganization(owner.id, invite.id));
- user = await userService.createUser({
+ user = await orgService.createOrgOwnedUser({
organizationId: org.id,
identity: {
authId: "foo",
@@ -60,9 +58,8 @@ describe("UserService", async () => {
primaryEmail: "yolo@yolo.com",
},
});
- await withTestCtx(SYSTEM_USER, () => orgService.joinOrganization(user.id, invite.id));
- user2 = await userService.createUser({
+ user2 = await orgService.createOrgOwnedUser({
organizationId: org.id,
identity: {
authId: "foo",
@@ -71,7 +68,6 @@ describe("UserService", async () => {
primaryEmail: "yolo@yolo.com",
},
});
- await withTestCtx(SYSTEM_USER, () => orgService.joinOrganization(user2.id, invite.id));
nonOrgUser = await userService.createUser({
identity: {
diff --git a/components/server/src/workspace/gitpod-server-impl.ts b/components/server/src/workspace/gitpod-server-impl.ts
index 6fe9441300f087..6762eafb411d02 100644
--- a/components/server/src/workspace/gitpod-server-impl.ts
+++ b/components/server/src/workspace/gitpod-server-impl.ts
@@ -517,9 +517,7 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
public async getConfiguration(ctx: TraceContext): Promise {
return {
- garbageCollectionStartDate: this.config.workspaceGarbageCollection.startDate,
- daysBeforeGarbageCollection: this.config.workspaceGarbageCollection.minAgeDays,
- isSingleOrgInstallation: this.config.isSingleOrgInstallation,
+ isDedicatedInstallation: this.config.isDedicatedInstallation,
};
}
@@ -1435,15 +1433,6 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
// Note: this operation is per-user only, hence needs no resource guard
const user = await this.checkAndBlockUser("createTeam");
-
- const mayCreateOrganization = await this.userAuthentication.mayCreateOrJoinOrganization(user);
- if (!mayCreateOrganization) {
- throw new ApplicationError(
- ErrorCodes.PERMISSION_DENIED,
- "Organizational accounts are not allowed to create new organizations",
- );
- }
-
const org = await this.organizationService.createOrganization(user.id, name);
// create a cost center
await this.usageService.getCostCenter(user.id, org.id);
@@ -1457,14 +1446,6 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
const user = await this.checkAndBlockUser("joinTeam");
- const mayCreateOrganization = await this.userAuthentication.mayCreateOrJoinOrganization(user);
- if (!mayCreateOrganization) {
- throw new ApplicationError(
- ErrorCodes.PERMISSION_DENIED,
- "Organizational accounts are not allowed to join other organizations",
- );
- }
-
const orgId = await this.organizationService.joinOrganization(user.id, inviteId);
const org = await this.getTeam(ctx, orgId);
if (org !== undefined) {
diff --git a/dev/preview/workflow/preview/deploy-gitpod.sh b/dev/preview/workflow/preview/deploy-gitpod.sh
index 7f18fac19aeed2..64a8c2a753ecac 100755
--- a/dev/preview/workflow/preview/deploy-gitpod.sh
+++ b/dev/preview/workflow/preview/deploy-gitpod.sh
@@ -273,7 +273,7 @@ fi
#
if [[ "${GITPOD_WITH_DEDICATED_EMU}" == "true" ]]
then
- yq w -i "${INSTALLER_CONFIG_PATH}" experimental.webapp.server.isSingleOrgInstallation "true"
+ yq w -i "${INSTALLER_CONFIG_PATH}" experimental.webapp.server.isDedicatedInstallation "true"
fi
#
diff --git a/install/installer/pkg/components/server/configmap.go b/install/installer/pkg/components/server/configmap.go
index 76baabfe29fd1f..b23d2187286dff 100644
--- a/install/installer/pkg/components/server/configmap.go
+++ b/install/installer/pkg/components/server/configmap.go
@@ -172,18 +172,10 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
return nil
})
- showSetupModal := true // old default to make self-hosted continue to work!
- _ = ctx.WithExperimental(func(cfg *experimental.Config) error {
- if cfg.WebApp != nil && cfg.WebApp.Server != nil && cfg.WebApp.Server.ShowSetupModal != nil {
- showSetupModal = *cfg.WebApp.Server.ShowSetupModal
- }
- return nil
- })
-
- var isSingleOrgInstallation bool
+ var isDedicatedInstallation bool
_ = ctx.WithExperimental(func(cfg *experimental.Config) error {
if cfg.WebApp != nil && cfg.WebApp.Server != nil {
- isSingleOrgInstallation = cfg.WebApp.Server.IsSingleOrgInstallation
+ isDedicatedInstallation = cfg.WebApp.Server.IsDedicatedInstallation || cfg.WebApp.Server.IsSingleOrgInstallation
}
return nil
})
@@ -296,10 +288,9 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
Admin: AdminConfig{
CredentialsPath: adminCredentialsPath,
},
- ShowSetupModal: showSetupModal,
Auth: authCfg,
Redis: redisConfig,
- IsSingleOrgInstallation: isSingleOrgInstallation,
+ IsDedicatedInstallation: isDedicatedInstallation,
}
fc, err := common.ToJSONString(scfg)
diff --git a/install/installer/pkg/components/server/types.go b/install/installer/pkg/components/server/types.go
index caad6d8af0bf9d..9b953c31e9de62 100644
--- a/install/installer/pkg/components/server/types.go
+++ b/install/installer/pkg/components/server/types.go
@@ -39,9 +39,8 @@ type ConfigSerialized struct {
EnablePayment bool `json:"enablePayment"`
LinkedInSecretsFile string `json:"linkedInSecretsFile"`
PATSigningKeyFile string `json:"patSigningKeyFile"`
- ShowSetupModal bool `json:"showSetupModal"`
Auth auth.Config `json:"auth"`
- IsSingleOrgInstallation bool `json:"isSingleOrgInstallation"`
+ IsDedicatedInstallation bool `json:"isDedicatedInstallation"`
WorkspaceHeartbeat WorkspaceHeartbeat `json:"workspaceHeartbeat"`
WorkspaceDefaults WorkspaceDefaults `json:"workspaceDefaults"`
diff --git a/install/installer/pkg/config/v1/experimental/experimental.go b/install/installer/pkg/config/v1/experimental/experimental.go
index 1826651b5934d1..79b468d17141c3 100644
--- a/install/installer/pkg/config/v1/experimental/experimental.go
+++ b/install/installer/pkg/config/v1/experimental/experimental.go
@@ -269,8 +269,9 @@ type ServerConfig struct {
DisableWorkspaceGarbageCollection bool `json:"disableWorkspaceGarbageCollection"`
DisableCompleteSnapshotJob bool `json:"disableCompleteSnapshotJob"`
InactivityPeriodForReposInDays *int `json:"inactivityPeriodForReposInDays"`
- ShowSetupModal *bool `json:"showSetupModal"`
- IsSingleOrgInstallation bool `json:"isSingleOrgInstallation"`
+ // deprecated: use IsDedicatedInstallation instead
+ IsSingleOrgInstallation bool `json:"isSingleOrgInstallation"`
+ IsDedicatedInstallation bool `json:"isDedicatedInstallation"`
// @deprecated use containerRegistry.privateBaseImageAllowList instead
DefaultBaseImageRegistryWhiteList []string `json:"defaultBaseImageRegistryWhitelist"`