Skip to content

Commit ca8094d

Browse files
author
Simon Emms
committed
[server]: move the admin telemetry settings out of EE
This also moves the `guardAdminAccess` method out of EE. Whilst this may seem controversial, it is likely that we're going to be opening up more admin-only dashboard functionality for self-hosted installation management.
1 parent d6767c7 commit ca8094d

File tree

2 files changed

+23
-32
lines changed

2 files changed

+23
-32
lines changed

components/server/ee/src/workspace/gitpod-server-impl.ts

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import { injectable, inject } from "inversify";
88
import { GitpodServerImpl, traceAPIParams, traceWI, censor } from "../../../src/workspace/gitpod-server-impl";
99
import { TraceContext } from "@gitpod/gitpod-protocol/lib/util/tracing";
10-
import { GitpodServer, GitpodClient, AdminGetListRequest, User, AdminGetListResult, Permission, AdminBlockUserRequest, AdminModifyRoleOrPermissionRequest, RoleOrPermission, AdminModifyPermanentWorkspaceFeatureFlagRequest, UserFeatureSettings, AdminGetWorkspacesRequest, WorkspaceAndInstance, GetWorkspaceTimeoutResult, WorkspaceTimeoutDuration, WorkspaceTimeoutValues, SetWorkspaceTimeoutResult, WorkspaceContext, CreateWorkspaceMode, WorkspaceCreationResult, PrebuiltWorkspaceContext, CommitContext, PrebuiltWorkspace, PermissionName, WorkspaceInstance, EduEmailDomain, ProviderRepository, Queue, PrebuildWithStatus, CreateProjectParams, Project, StartPrebuildResult, ClientHeaderFields, Workspace } from "@gitpod/gitpod-protocol";
10+
import { GitpodServer, GitpodClient, AdminGetListRequest, User, AdminGetListResult, Permission, AdminBlockUserRequest, AdminModifyRoleOrPermissionRequest, RoleOrPermission, AdminModifyPermanentWorkspaceFeatureFlagRequest, UserFeatureSettings, AdminGetWorkspacesRequest, WorkspaceAndInstance, GetWorkspaceTimeoutResult, WorkspaceTimeoutDuration, WorkspaceTimeoutValues, SetWorkspaceTimeoutResult, WorkspaceContext, CreateWorkspaceMode, WorkspaceCreationResult, PrebuiltWorkspaceContext, CommitContext, PrebuiltWorkspace, WorkspaceInstance, EduEmailDomain, ProviderRepository, Queue, PrebuildWithStatus, CreateProjectParams, Project, StartPrebuildResult, ClientHeaderFields, Workspace } from "@gitpod/gitpod-protocol";
1111
import { ResponseError } from "vscode-jsonrpc";
1212
import { TakeSnapshotRequest, AdmissionLevel, ControlAdmissionRequest, StopWorkspacePolicy, DescribeWorkspaceRequest, SetTimeoutRequest } from "@gitpod/ws-manager/lib";
1313
import { ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
@@ -563,24 +563,6 @@ export class GitpodServerEEImpl extends GitpodServerImpl {
563563
return result;
564564
}
565565

566-
async adminSettingsGetTelemetry(ctx: TraceContext): Promise<boolean> {
567-
traceAPIParams(ctx, {});
568-
569-
await this.guardAdminAccess("adminSettingsGetTelemetry", {}, Permission.ADMIN_API);
570-
571-
const settings = await this.installationAdminDb.getTelemetryData();
572-
573-
return settings.settings.sendTelemetry;
574-
}
575-
576-
async adminSettingsSetTelemetry(ctx: TraceContext, send: boolean): Promise<void> {
577-
traceAPIParams(ctx, {});
578-
579-
await this.guardAdminAccess("adminSettingsGetTelemetry", {}, Permission.ADMIN_API);
580-
581-
await this.installationAdminDb.setSendTelemetry(send);
582-
}
583-
584566
async adminForceStopWorkspace(ctx: TraceContext, workspaceId: string): Promise<void> {
585567
traceAPIParams(ctx, { workspaceId });
586568

@@ -620,15 +602,6 @@ export class GitpodServerEEImpl extends GitpodServerImpl {
620602
});
621603
}
622604

623-
protected async guardAdminAccess(method: string, params: any, requiredPermission: PermissionName) {
624-
const user = this.checkAndBlockUser(method);
625-
if (!this.authorizationService.hasPermission(user, requiredPermission)) {
626-
log.warn({ userId: this.user?.id }, "unauthorised admin access", { authorised: false, method, params });
627-
throw new ResponseError(ErrorCodes.PERMISSION_DENIED, "not allowed");
628-
}
629-
log.info({ userId: this.user?.id }, "admin access", { authorised: true, method, params });
630-
}
631-
632605
protected async findPrebuiltWorkspace(parentCtx: TraceContext, user: User, context: WorkspaceContext, mode: CreateWorkspaceMode): Promise<WorkspaceCreationResult | PrebuiltWorkspaceContext | undefined> {
633606
const ctx = TraceContext.childContext("findPrebuiltWorkspace", parentCtx);
634607

components/server/src/workspace/gitpod-server-impl.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import { DownloadUrlRequest, DownloadUrlResponse, UploadUrlRequest, UploadUrlResponse } from '@gitpod/content-service/lib/blobs_pb';
88
import { AppInstallationDB, UserDB, UserMessageViewsDB, WorkspaceDB, DBWithTracing, TracedWorkspaceDB, DBGitpodToken, DBUser, UserStorageResourcesDB, TeamDB, InstallationAdminDB } from '@gitpod/gitpod-db/lib';
9-
import { AuthProviderEntry, AuthProviderInfo, CommitContext, Configuration, CreateWorkspaceMode, DisposableCollection, GetWorkspaceTimeoutResult, GitpodClient as GitpodApiClient, GitpodServer, GitpodToken, GitpodTokenType, InstallPluginsParams, PermissionName, PortVisibility, PrebuiltWorkspace, PrebuiltWorkspaceContext, PreparePluginUploadParams, ResolvedPlugins, ResolvePluginsParams, SetWorkspaceTimeoutResult, StartPrebuildContext, StartWorkspaceResult, Terms, Token, UninstallPluginParams, User, UserEnvVar, UserEnvVarValue, UserInfo, WhitelistedRepository, Workspace, WorkspaceContext, WorkspaceCreationResult, WorkspaceImageBuild, WorkspaceInfo, WorkspaceInstance, WorkspaceInstancePort, WorkspaceInstanceUser, WorkspaceTimeoutDuration, GuessGitTokenScopesParams, GuessedGitTokenScopes, Team, TeamMemberInfo, TeamMembershipInvite, CreateProjectParams, Project, ProviderRepository, TeamMemberRole, WithDefaultConfig, FindPrebuildsParams, PrebuildWithStatus, StartPrebuildResult, ClientHeaderFields } from '@gitpod/gitpod-protocol';
9+
import { AuthProviderEntry, AuthProviderInfo, CommitContext, Configuration, CreateWorkspaceMode, DisposableCollection, GetWorkspaceTimeoutResult, GitpodClient as GitpodApiClient, GitpodServer, GitpodToken, GitpodTokenType, InstallPluginsParams, PermissionName, PortVisibility, PrebuiltWorkspace, PrebuiltWorkspaceContext, PreparePluginUploadParams, ResolvedPlugins, ResolvePluginsParams, SetWorkspaceTimeoutResult, StartPrebuildContext, StartWorkspaceResult, Terms, Token, UninstallPluginParams, User, UserEnvVar, UserEnvVarValue, UserInfo, WhitelistedRepository, Workspace, WorkspaceContext, WorkspaceCreationResult, WorkspaceImageBuild, WorkspaceInfo, WorkspaceInstance, WorkspaceInstancePort, WorkspaceInstanceUser, WorkspaceTimeoutDuration, GuessGitTokenScopesParams, GuessedGitTokenScopes, Team, TeamMemberInfo, TeamMembershipInvite, CreateProjectParams, Project, ProviderRepository, TeamMemberRole, WithDefaultConfig, FindPrebuildsParams, PrebuildWithStatus, StartPrebuildResult, ClientHeaderFields, Permission } from '@gitpod/gitpod-protocol';
1010
import { AccountStatement } from "@gitpod/gitpod-protocol/lib/accounting-protocol";
1111
import { AdminBlockUserRequest, AdminGetListRequest, AdminGetListResult, AdminGetWorkspacesRequest, AdminModifyPermanentWorkspaceFeatureFlagRequest, AdminModifyRoleOrPermissionRequest, WorkspaceAndInstance } from '@gitpod/gitpod-protocol/lib/admin-protocol';
1212
import { GetLicenseInfoResult, LicenseFeature, LicenseValidationResult } from '@gitpod/gitpod-protocol/lib/license-protocol';
@@ -543,6 +543,15 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
543543
await this.internalStopWorkspaceInstance(ctx, instance.id, instance.region, policy);
544544
}
545545

546+
protected async guardAdminAccess(method: string, params: any, requiredPermission: PermissionName) {
547+
const user = this.checkAndBlockUser(method);
548+
if (!this.authorizationService.hasPermission(user, requiredPermission)) {
549+
log.warn({ userId: this.user?.id }, "unauthorised admin access", { authorised: false, method, params });
550+
throw new ResponseError(ErrorCodes.PERMISSION_DENIED, "not allowed");
551+
}
552+
log.info({ userId: this.user?.id }, "admin access", { authorised: true, method, params });
553+
}
554+
546555
protected async internalStopWorkspaceInstance(ctx: TraceContext, instanceId: string, instanceRegion: string, policy?: StopWorkspacePolicy): Promise<void> {
547556
const req = new StopWorkspaceRequest();
548557
req.setId(instanceId);
@@ -1986,12 +1995,21 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
19861995
}
19871996

19881997
async adminSettingsGetTelemetry(ctx: TraceContext): Promise<boolean> {
1989-
console.log(2222)
1990-
return false;
1998+
traceAPIParams(ctx, {});
1999+
2000+
await this.guardAdminAccess("adminSettingsGetTelemetry", {}, Permission.ADMIN_API);
2001+
2002+
const settings = await this.installationAdminDb.getTelemetryData();
2003+
2004+
return settings.settings.sendTelemetry;
19912005
}
19922006

19932007
async adminSettingsSetTelemetry(ctx: TraceContext, send: boolean): Promise<void> {
1994-
console.log(3333);
2008+
traceAPIParams(ctx, {});
2009+
2010+
await this.guardAdminAccess("adminSettingsGetTelemetry", {}, Permission.ADMIN_API);
2011+
2012+
await this.installationAdminDb.setSendTelemetry(send);
19952013
}
19962014

19972015
async getLicenseInfo(): Promise<GetLicenseInfoResult> {

0 commit comments

Comments
 (0)