|
6 | 6 |
|
7 | 7 | import { DownloadUrlRequest, DownloadUrlResponse, UploadUrlRequest, UploadUrlResponse } from '@gitpod/content-service/lib/blobs_pb';
|
8 | 8 | 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'; |
10 | 10 | import { AccountStatement } from "@gitpod/gitpod-protocol/lib/accounting-protocol";
|
11 | 11 | import { AdminBlockUserRequest, AdminGetListRequest, AdminGetListResult, AdminGetWorkspacesRequest, AdminModifyPermanentWorkspaceFeatureFlagRequest, AdminModifyRoleOrPermissionRequest, WorkspaceAndInstance } from '@gitpod/gitpod-protocol/lib/admin-protocol';
|
12 | 12 | import { GetLicenseInfoResult, LicenseFeature, LicenseValidationResult } from '@gitpod/gitpod-protocol/lib/license-protocol';
|
@@ -565,6 +565,15 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
|
565 | 565 | await this.internalStopWorkspaceInstance(ctx, instance.id, instance.region, policy);
|
566 | 566 | }
|
567 | 567 |
|
| 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 | + |
568 | 577 | protected async internalStopWorkspaceInstance(ctx: TraceContext, instanceId: string, instanceRegion: string, policy?: StopWorkspacePolicy): Promise<void> {
|
569 | 578 | const req = new StopWorkspaceRequest();
|
570 | 579 | req.setId(instanceId);
|
@@ -2008,12 +2017,21 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
|
2008 | 2017 | }
|
2009 | 2018 |
|
2010 | 2019 | 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; |
2013 | 2027 | }
|
2014 | 2028 |
|
2015 | 2029 | 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); |
2017 | 2035 | }
|
2018 | 2036 |
|
2019 | 2037 | async getLicenseInfo(): Promise<GetLicenseInfoResult> {
|
|
0 commit comments