Skip to content

Commit 009d6a8

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 00c700f commit 009d6a8

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';
@@ -565,6 +565,15 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
565565
await this.internalStopWorkspaceInstance(ctx, instance.id, instance.region, policy);
566566
}
567567

568+
protected async guardAdminAccess(method: string, params: any, requiredPermission: PermissionName) {
569+
const user = this.checkAndBlockUser(method);
570+
if (!this.authorizationService.hasPermission(user, requiredPermission)) {
571+
log.warn({ userId: this.user?.id }, "unauthorised admin access", { authorised: false, method, params });
572+
throw new ResponseError(ErrorCodes.PERMISSION_DENIED, "not allowed");
573+
}
574+
log.info({ userId: this.user?.id }, "admin access", { authorised: true, method, params });
575+
}
576+
568577
protected async internalStopWorkspaceInstance(ctx: TraceContext, instanceId: string, instanceRegion: string, policy?: StopWorkspacePolicy): Promise<void> {
569578
const req = new StopWorkspaceRequest();
570579
req.setId(instanceId);
@@ -2008,12 +2017,21 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
20082017
}
20092018

20102019
async adminSettingsGetTelemetry(ctx: TraceContext): Promise<boolean> {
2011-
console.log(2222)
2012-
return false;
2020+
traceAPIParams(ctx, {});
2021+
2022+
await this.guardAdminAccess("adminSettingsGetTelemetry", {}, Permission.ADMIN_API);
2023+
2024+
const settings = await this.installationAdminDb.getTelemetryData();
2025+
2026+
return settings.settings.sendTelemetry;
20132027
}
20142028

20152029
async adminSettingsSetTelemetry(ctx: TraceContext, send: boolean): Promise<void> {
2016-
console.log(3333);
2030+
traceAPIParams(ctx, {});
2031+
2032+
await this.guardAdminAccess("adminSettingsGetTelemetry", {}, Permission.ADMIN_API);
2033+
2034+
await this.installationAdminDb.setSendTelemetry(send);
20172035
}
20182036

20192037
async getLicenseInfo(): Promise<GetLicenseInfoResult> {

0 commit comments

Comments
 (0)