Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/components/gitpod-protocol/src/admin-protocol.ts
2498 views
1
/**
2
* Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
* Licensed under the GNU Affero General Public License (AGPL).
4
* See License.AGPL.txt in the project root for license information.
5
*/
6
7
import { User, Workspace, NamedWorkspaceFeatureFlag, EmailDomainFilterEntry } from "./protocol";
8
import { BlockedRepository } from "./blocked-repositories-protocol";
9
import { FindPrebuildsParams } from "./gitpod-service";
10
import { Project, Team, PrebuildWithStatus, TeamMemberInfo, TeamMemberRole } from "./teams-projects-protocol";
11
import { WorkspaceInstance, WorkspaceInstancePhase } from "./workspace-instance";
12
import { RoleOrPermission } from "./permission";
13
import { BillingMode } from "./billing-mode";
14
import { CostCenterJSON, ListUsageRequest, ListUsageResponse } from "./usage";
15
16
export interface AdminServer {
17
adminGetUsers(req: AdminGetListRequest<User>): Promise<AdminGetListResult<User>>;
18
adminGetUser(id: string): Promise<User>;
19
adminBlockUser(req: AdminBlockUserRequest): Promise<User>;
20
adminDeleteUser(id: string): Promise<void>;
21
adminVerifyUser(id: string): Promise<User>;
22
adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise<User>;
23
adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise<User>;
24
25
adminCreateBlockedRepository(
26
urlRegexp: string,
27
blockUser: boolean,
28
blockFreeUsage: boolean,
29
): Promise<BlockedRepository>;
30
adminDeleteBlockedRepository(id: number): Promise<void>;
31
adminGetBlockedRepositories(
32
req: AdminGetListRequest<BlockedRepository>,
33
): Promise<AdminGetListResult<BlockedRepository>>;
34
35
adminGetTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
36
adminGetTeams(req: AdminGetListRequest<Team>): Promise<AdminGetListResult<Team>>;
37
adminGetTeamById(id: string): Promise<Team | undefined>;
38
adminSetTeamMemberRole(teamId: string, userId: string, role: TeamMemberRole): Promise<void>;
39
40
adminGetWorkspaces(req: AdminGetWorkspacesRequest): Promise<AdminGetListResult<WorkspaceAndInstance>>;
41
adminGetWorkspace(id: string): Promise<WorkspaceAndInstance>;
42
adminGetWorkspaceInstances(workspaceId: string): Promise<WorkspaceInstance[]>;
43
adminForceStopWorkspace(id: string): Promise<void>;
44
adminRestoreSoftDeletedWorkspace(id: string): Promise<void>;
45
46
adminGetProjectsBySearchTerm(req: AdminGetListRequest<Project>): Promise<AdminGetListResult<Project>>;
47
adminGetProjectById(id: string): Promise<Project | undefined>;
48
49
adminFindPrebuilds(params: FindPrebuildsParams): Promise<PrebuildWithStatus[]>;
50
51
adminGetBillingMode(attributionId: string): Promise<BillingMode>;
52
53
adminGetCostCenter(attributionId: string): Promise<CostCenterJSON | undefined>;
54
adminSetUsageLimit(attributionId: string, usageLimit: number): Promise<void>;
55
56
adminListUsage(req: ListUsageRequest): Promise<ListUsageResponse>;
57
adminAddUsageCreditNote(attributionId: string, credits: number, note: string): Promise<void>;
58
adminGetUsageBalance(attributionId: string): Promise<number>;
59
60
adminGetBlockedEmailDomains(): Promise<EmailDomainFilterEntry[]>;
61
adminSaveBlockedEmailDomain(entry: EmailDomainFilterEntry): Promise<void>;
62
}
63
64
export interface AdminGetListRequest<T> {
65
offset: number;
66
limit: number;
67
orderBy: keyof T;
68
orderDir: "asc" | "desc";
69
searchTerm?: string;
70
}
71
72
export interface AdminGetListResult<T> {
73
total: number;
74
rows: T[];
75
}
76
77
export interface AdminBlockUserRequest {
78
id: string;
79
blocked: boolean;
80
}
81
82
export interface AdminModifyRoleOrPermissionRequest {
83
id: string;
84
rpp: {
85
r: RoleOrPermission;
86
add: boolean;
87
}[];
88
}
89
90
export interface AdminModifyPermanentWorkspaceFeatureFlagRequest {
91
id: string;
92
changes: {
93
featureFlag: NamedWorkspaceFeatureFlag;
94
add: boolean;
95
}[];
96
}
97
98
export interface WorkspaceAndInstance
99
extends Omit<Workspace, "id" | "creationTime">,
100
Omit<WorkspaceInstance, "id" | "creationTime"> {
101
workspaceId: string;
102
workspaceCreationTime: string;
103
instanceId: string;
104
instanceCreationTime: string;
105
phase: WorkspaceInstancePhase;
106
}
107
108
export namespace WorkspaceAndInstance {
109
export function toWorkspace(wai: WorkspaceAndInstance): Workspace {
110
return {
111
id: wai.workspaceId,
112
creationTime: wai.workspaceCreationTime,
113
...wai,
114
};
115
}
116
117
export function toInstance(wai: WorkspaceAndInstance): WorkspaceInstance | undefined {
118
if (!wai.instanceId) {
119
return undefined;
120
}
121
return {
122
id: wai.instanceId,
123
creationTime: wai.instanceCreationTime,
124
...wai,
125
};
126
}
127
}
128
129
export type AdminGetWorkspacesRequest = AdminGetListRequest<WorkspaceAndInstance> & AdminGetWorkspacesQuery;
130
/** The fields are meant to be used either OR (not combined) */
131
export type AdminGetWorkspacesQuery = {
132
/** we use this field in case we have a UUIDv4 and don't know whether it's an (old) workspace or instance id */
133
instanceIdOrWorkspaceId?: string;
134
instanceId?: string;
135
workspaceId?: string;
136
ownerId?: string;
137
};
138
139