Skip to content

Commit 0789eda

Browse files
easyCZroboquat
authored andcommitted
[server] Validate userID, teamID is a UUID on team operations
1 parent 169fbed commit 0789eda

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

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

+25
Original file line numberDiff line numberDiff line change
@@ -2046,6 +2046,11 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
20462046

20472047
public async getTeam(ctx: TraceContext, teamId: string): Promise<Team> {
20482048
traceAPIParams(ctx, { teamId });
2049+
2050+
if (!uuidValidate(teamId)) {
2051+
throw new ResponseError(ErrorCodes.BAD_REQUEST, "team ID must be a valid UUID");
2052+
}
2053+
20492054
this.checkAndBlockUser("getTeam");
20502055

20512056
const team = await this.teamDB.findTeamById(teamId);
@@ -2059,6 +2064,10 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
20592064
public async getTeamMembers(ctx: TraceContext, teamId: string): Promise<TeamMemberInfo[]> {
20602065
traceAPIParams(ctx, { teamId });
20612066

2067+
if (!uuidValidate(teamId)) {
2068+
throw new ResponseError(ErrorCodes.BAD_REQUEST, "team ID must be a valid UUID");
2069+
}
2070+
20622071
this.checkUser("getTeamMembers");
20632072
const team = await this.getTeam(ctx, teamId);
20642073
const members = await this.teamDB.findMembersByTeam(team.id);
@@ -2145,6 +2154,14 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
21452154
public async removeTeamMember(ctx: TraceContext, teamId: string, userId: string): Promise<void> {
21462155
traceAPIParams(ctx, { teamId, userId });
21472156

2157+
if (!uuidValidate(teamId)) {
2158+
throw new ResponseError(ErrorCodes.BAD_REQUEST, "team ID must be a valid UUID");
2159+
}
2160+
2161+
if (!uuidValidate(userId)) {
2162+
throw new ResponseError(ErrorCodes.BAD_REQUEST, "user ID must be a valid UUID");
2163+
}
2164+
21482165
const user = this.checkAndBlockUser("removeTeamMember");
21492166
// Users are free to leave any team themselves, but only owners can remove others from their teams.
21502167
await this.guardTeamOperation(teamId, user.id === userId ? "get" : "update");
@@ -2167,6 +2184,10 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
21672184
public async getGenericInvite(ctx: TraceContext, teamId: string): Promise<TeamMembershipInvite> {
21682185
traceAPIParams(ctx, { teamId });
21692186

2187+
if (!uuidValidate(teamId)) {
2188+
throw new ResponseError(ErrorCodes.BAD_REQUEST, "team ID must be a valid UUID");
2189+
}
2190+
21702191
this.checkUser("getGenericInvite");
21712192
await this.guardTeamOperation(teamId, "get");
21722193
const invite = await this.teamDB.findGenericInviteByTeamId(teamId);
@@ -2179,6 +2200,10 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
21792200
public async resetGenericInvite(ctx: TraceContext, teamId: string): Promise<TeamMembershipInvite> {
21802201
traceAPIParams(ctx, { teamId });
21812202

2203+
if (!uuidValidate(teamId)) {
2204+
throw new ResponseError(ErrorCodes.BAD_REQUEST, "team ID must be a valid UUID");
2205+
}
2206+
21822207
this.checkAndBlockUser("resetGenericInvite");
21832208
await this.guardTeamOperation(teamId, "update");
21842209
return this.teamDB.resetGenericInvite(teamId);

0 commit comments

Comments
 (0)