Skip to content

Commit 110b83f

Browse files
committed
merge envVarResolver and project env var managment to envVarService
1 parent 09e8d92 commit 110b83f

11 files changed

+708
-596
lines changed

components/server/src/container-module.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ import { WebsocketConnectionManager } from "./websocket/websocket-connection-man
104104
import { ConfigProvider } from "./workspace/config-provider";
105105
import { IContextParser, IPrefixContextParser } from "./workspace/context-parser";
106106
import { ContextParser } from "./workspace/context-parser-service";
107-
import { EnvVarResolver } from "./workspace/env-var-resolver";
108107
import { EnvvarPrefixParser } from "./workspace/envvar-prefix-context-parser";
109108
import { GitTokenScopeGuesser } from "./workspace/git-token-scope-guesser";
110109
import { GitTokenValidator } from "./workspace/git-token-validator";
@@ -259,7 +258,6 @@ export const productionContainerModule = new ContainerModule(
259258

260259
bind(OrganizationService).toSelf().inSingletonScope();
261260
bind(ProjectsService).toSelf().inSingletonScope();
262-
bind(EnvVarResolver).toSelf().inSingletonScope();
263261

264262
bind(NewsletterSubscriptionController).toSelf().inSingletonScope();
265263

components/server/src/prebuilds/prebuild-manager.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ import { PrebuildRateLimiterConfig } from "../workspace/prebuild-rate-limiter";
3636
import { ErrorCodes, ApplicationError } from "@gitpod/gitpod-protocol/lib/messaging/error";
3737
import { UserAuthentication } from "../user/user-authentication";
3838
import { EntitlementService, MayStartWorkspaceResult } from "../billing/entitlement-service";
39-
import { EnvVarResolver } from "../workspace/env-var-resolver";
4039
import { WorkspaceService } from "../workspace/workspace-service";
40+
import { EnvVarService } from "../user/env-var-service";
4141

4242
export class WorkspaceRunningError extends Error {
4343
constructor(msg: string, public instance: WorkspaceInstance) {
@@ -66,7 +66,7 @@ export class PrebuildManager {
6666
@inject(UserAuthentication) protected readonly userService: UserAuthentication;
6767
@inject(TeamDB) protected readonly teamDB: TeamDB;
6868
@inject(EntitlementService) protected readonly entitlementService: EntitlementService;
69-
@inject(EnvVarResolver) private readonly envVarResolver: EnvVarResolver;
69+
@inject(EnvVarService) protected readonly envVarService: EnvVarService;
7070

7171
async abortPrebuildsForBranch(ctx: TraceContext, project: Project, user: User, branch: string): Promise<void> {
7272
const span = TraceContext.startSpan("abortPrebuildsForBranch", ctx);
@@ -230,7 +230,12 @@ export class PrebuildManager {
230230
context.normalizedContextURL!,
231231
);
232232

233-
const envVarsPromise = this.envVarResolver.resolve(workspace);
233+
const envVarsPromise = this.envVarService.resolveEnvVariables(
234+
workspace.ownerId,
235+
workspace.projectId,
236+
workspace.type,
237+
workspace.context,
238+
);
234239

235240
const prebuild = await this.workspaceDB.trace({ span }).findPrebuildByWorkspaceID(workspace.id)!;
236241
if (!prebuild) {
@@ -334,7 +339,12 @@ export class PrebuildManager {
334339
if (!prebuild) {
335340
throw new Error("No prebuild found for workspace " + workspaceId);
336341
}
337-
const envVars = await this.envVarResolver.resolve(workspace);
342+
const envVars = await this.envVarService.resolveEnvVariables(
343+
workspace.ownerId,
344+
workspace.projectId,
345+
workspace.type,
346+
workspace.context,
347+
);
338348
await this.workspaceStarter.startWorkspace({ span }, workspace, user, project, envVars);
339349
return { prebuildId: prebuild.id, wsid: workspace.id, done: false };
340350
} catch (err) {

components/server/src/projects/projects-service.spec.db.ts

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -120,64 +120,6 @@ describe("ProjectsService", async () => {
120120
);
121121
});
122122

123-
it("should let owners create, delete and get project env vars", async () => {
124-
const ps = container.get(ProjectsService);
125-
const project = await createTestProject(ps, org, owner);
126-
await ps.setProjectEnvironmentVariable(owner.id, project.id, "FOO", "BAR", false);
127-
128-
const envVars = await ps.getProjectEnvironmentVariables(owner.id, project.id);
129-
expect(envVars[0].name).to.equal("FOO");
130-
131-
const envVarById = await ps.getProjectEnvironmentVariableById(owner.id, envVars[0].id);
132-
expect(envVarById?.name).to.equal("FOO");
133-
134-
await ps.deleteProjectEnvironmentVariable(owner.id, envVars[0].id);
135-
136-
await expectError(ErrorCodes.NOT_FOUND, () => ps.getProjectEnvironmentVariableById(owner.id, envVars[0].id));
137-
138-
const emptyEnvVars = await ps.getProjectEnvironmentVariables(owner.id, project.id);
139-
expect(emptyEnvVars.length).to.equal(0);
140-
});
141-
142-
it("should not let members create, delete but allow get project env vars", async () => {
143-
const ps = container.get(ProjectsService);
144-
const project = await createTestProject(ps, org, owner);
145-
await ps.setProjectEnvironmentVariable(owner.id, project.id, "FOO", "BAR", false);
146-
147-
const envVars = await ps.getProjectEnvironmentVariables(member.id, project.id);
148-
expect(envVars[0].name).to.equal("FOO");
149-
150-
const envVarById = await ps.getProjectEnvironmentVariableById(member.id, envVars[0].id);
151-
expect(envVarById?.name).to.equal("FOO");
152-
153-
await expectError(ErrorCodes.PERMISSION_DENIED, () =>
154-
ps.deleteProjectEnvironmentVariable(member.id, envVars[0].id),
155-
);
156-
157-
await expectError(ErrorCodes.PERMISSION_DENIED, () =>
158-
ps.setProjectEnvironmentVariable(member.id, project.id, "FOO", "BAR", false),
159-
);
160-
});
161-
162-
it("should not let strangers create, delete and get project env vars", async () => {
163-
const ps = container.get(ProjectsService);
164-
const project = await createTestProject(ps, org, owner);
165-
166-
await ps.setProjectEnvironmentVariable(owner.id, project.id, "FOO", "BAR", false);
167-
168-
const envVars = await ps.getProjectEnvironmentVariables(owner.id, project.id);
169-
expect(envVars[0].name).to.equal("FOO");
170-
171-
// let's try to get the env var as a stranger
172-
await expectError(ErrorCodes.NOT_FOUND, () => ps.getProjectEnvironmentVariableById(stranger.id, envVars[0].id));
173-
174-
// let's try to delete the env var as a stranger
175-
await expectError(ErrorCodes.NOT_FOUND, () => ps.deleteProjectEnvironmentVariable(stranger.id, envVars[0].id));
176-
177-
// let's try to get the env vars as a stranger
178-
await expectError(ErrorCodes.NOT_FOUND, () => ps.getProjectEnvironmentVariables(stranger.id, project.id));
179-
});
180-
181123
it("should findProjects", async () => {
182124
const ps = container.get(ProjectsService);
183125
const project = await createTestProject(ps, org, owner);

components/server/src/projects/projects-service.ts

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import {
1212
CreateProjectParams,
1313
FindPrebuildsParams,
1414
Project,
15-
ProjectEnvVar,
1615
User,
1716
PrebuildEvent,
1817
} from "@gitpod/gitpod-protocol";
@@ -386,41 +385,6 @@ export class ProjectsService {
386385
return this.projectDB.updateProject(partialProject);
387386
}
388387

389-
async setProjectEnvironmentVariable(
390-
userId: string,
391-
projectId: string,
392-
name: string,
393-
value: string,
394-
censored: boolean,
395-
): Promise<void> {
396-
await this.auth.checkPermissionOnProject(userId, "write_info", projectId);
397-
return this.projectDB.setProjectEnvironmentVariable(projectId, name, value, censored);
398-
}
399-
400-
async getProjectEnvironmentVariables(userId: string, projectId: string): Promise<ProjectEnvVar[]> {
401-
await this.auth.checkPermissionOnProject(userId, "read_info", projectId);
402-
return this.projectDB.getProjectEnvironmentVariables(projectId);
403-
}
404-
405-
async getProjectEnvironmentVariableById(userId: string, variableId: string): Promise<ProjectEnvVar> {
406-
const result = await this.projectDB.getProjectEnvironmentVariableById(variableId);
407-
if (!result) {
408-
throw new ApplicationError(ErrorCodes.NOT_FOUND, `Environment Variable ${variableId} not found.`);
409-
}
410-
try {
411-
await this.auth.checkPermissionOnProject(userId, "read_info", result.projectId);
412-
} catch (err) {
413-
throw new ApplicationError(ErrorCodes.NOT_FOUND, `Environment Variable ${variableId} not found.`);
414-
}
415-
return result;
416-
}
417-
418-
async deleteProjectEnvironmentVariable(userId: string, variableId: string): Promise<void> {
419-
const variable = await this.getProjectEnvironmentVariableById(userId, variableId);
420-
await this.auth.checkPermissionOnProject(userId, "write_info", variable.projectId);
421-
return this.projectDB.deleteProjectEnvironmentVariable(variableId);
422-
}
423-
424388
async isProjectConsideredInactive(userId: string, projectId: string): Promise<boolean> {
425389
await this.auth.checkPermissionOnProject(userId, "read_info", projectId);
426390
const usage = await this.projectDB.getProjectUsage(projectId);

0 commit comments

Comments
 (0)