/** * Copyright (c) 2020 Gitpod GmbH. All rights reserved. * Licensed under the GNU Affero General Public License (AGPL). * See License-AGPL.txt in the project root for license information. */ import { User, Workspace, NamedWorkspaceFeatureFlag } from "./protocol"; import { Without } from "./util/without"; import { WorkspaceInstance, WorkspaceInstancePhase } from "./workspace-instance"; import { RoleOrPermission } from "./permission"; import { AccountStatement } from "./accounting-protocol"; export interface AdminServer { adminGetUsers(req: AdminGetListRequest): Promise>; adminGetUser(id: string): Promise; adminBlockUser(req: AdminBlockUserRequest): Promise; adminDeleteUser(id: string): Promise; adminModifyRoleOrPermission(req: AdminModifyRoleOrPermissionRequest): Promise; adminModifyPermanentWorkspaceFeatureFlag(req: AdminModifyPermanentWorkspaceFeatureFlagRequest): Promise; adminGetWorkspaces(req: AdminGetWorkspacesRequest): Promise>; adminGetWorkspace(id: string): Promise; adminForceStopWorkspace(id: string): Promise; adminSetLicense(key: string): Promise; adminGetAccountStatement(userId: string): Promise; adminSetProfessionalOpenSource(userId: string, shouldGetProfOSS: boolean): Promise; adminIsStudent(userId: string): Promise; adminAddStudentEmailDomain(userId: string, domain: string): Promise; } export interface AdminGetListRequest { offset: number limit: number orderBy: keyof T orderDir: "asc" | "desc" searchTerm?: string; } export interface AdminGetListResult { total: number rows: T[] } export interface AdminBlockUserRequest { id: string blocked: boolean } export interface AdminModifyRoleOrPermissionRequest { id: string; rpp: { r: RoleOrPermission add: boolean }[] } export interface AdminModifyPermanentWorkspaceFeatureFlagRequest { id: string; changes: { featureFlag: NamedWorkspaceFeatureFlag add: boolean }[] } export interface WorkspaceAndInstance extends Without, Without { workspaceId: string; workspaceCreationTime: string; instanceId: string; instanceCreationTime: string; phase: WorkspaceInstancePhase; } export namespace WorkspaceAndInstance { export function toWorkspace(wai: WorkspaceAndInstance): Workspace { return { id: wai.workspaceId, creationTime: wai.workspaceCreationTime, ... wai }; } export function toInstance(wai: WorkspaceAndInstance): WorkspaceInstance | undefined { if (!wai.instanceId) { return undefined; } return { id: wai.instanceId, creationTime: wai.instanceCreationTime, ... wai }; } } export interface AdminGetWorkspacesRequest extends AdminGetListRequest { ownerId?: string }