Skip to content

Commit ae6be25

Browse files
committed
💄
1 parent 0b9db79 commit ae6be25

File tree

3 files changed

+19
-35
lines changed

3 files changed

+19
-35
lines changed

components/server/src/user/gitpod-token-service.spec.db.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ describe("GitpodTokenService", async () => {
9393
await expectError(ErrorCodes.NOT_FOUND, gs.getGitpodTokens(stranger.id, member.id));
9494
});
9595

96-
it("should return gitpod token scopes", async () => {
96+
it("should return gitpod token", async () => {
9797
await gs.generateNewGitpodToken(member.id, member.id, {
9898
name: "token1",
9999
type: GitpodTokenType.API_AUTH_TOKEN,
@@ -103,12 +103,10 @@ describe("GitpodTokenService", async () => {
103103
const tokens = await gs.getGitpodTokens(member.id, member.id);
104104
expect(tokens.length).to.equal(1);
105105

106-
const scopes = await gs.getGitpodTokenScopes(member.id, member.id, tokens[0].tokenHash);
107-
expect(scopes.length).to.equal(2);
108-
expect(scopes.some((s) => s === "user:email")).to.be.true;
109-
expect(scopes.some((s) => s === "read:user")).to.be.true;
106+
const token = await gs.findGitpodToken(member.id, member.id, tokens[0].tokenHash);
107+
expect(token).to.not.be.undefined;
110108

111-
await expectError(ErrorCodes.NOT_FOUND, gs.getGitpodTokenScopes(stranger.id, member.id, tokens[0].tokenHash));
109+
await expectError(ErrorCodes.NOT_FOUND, gs.findGitpodToken(stranger.id, member.id, tokens[0].tokenHash));
112110
});
113111

114112
it("should delete gitpod tokens", async () => {

components/server/src/user/gitpod-token-service.ts

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,10 @@ export class GitpodTokenService {
1818
@inject(Authorizer) private readonly auth: Authorizer,
1919
) {}
2020

21-
async getGitpodTokens(
22-
requestorId: string,
23-
userId: string,
24-
oldPermissionCheck?: (token: GitpodToken) => Promise<void>, // @deprecated
25-
): Promise<GitpodToken[]> {
21+
async getGitpodTokens(requestorId: string, userId: string): Promise<GitpodToken[]> {
2622
await this.auth.checkPermissionOnUser(requestorId, "read_tokens", userId);
27-
const res = (await this.userDB.findAllGitpodTokensOfUser(userId)).filter((v) => !v.deleted);
28-
if (oldPermissionCheck) {
29-
await Promise.all(res.map((tkn) => oldPermissionCheck(tkn)));
30-
}
31-
return res;
23+
const gitpodTokens = await this.userDB.findAllGitpodTokensOfUser(userId);
24+
return gitpodTokens.filter((v) => !v.deleted);
3225
}
3326

3427
async generateNewGitpodToken(
@@ -55,27 +48,18 @@ export class GitpodTokenService {
5548
return token;
5649
}
5750

58-
async getGitpodTokenScopes(
59-
requestorId: string,
60-
userId: string,
61-
tokenHash: string,
62-
oldPermissionCheck?: (token: GitpodToken) => Promise<void>, // @deprecated
63-
): Promise<string[]> {
51+
async findGitpodToken(requestorId: string, userId: string, tokenHash: string): Promise<GitpodToken | undefined> {
6452
await this.auth.checkPermissionOnUser(requestorId, "read_tokens", userId);
6553
let token: GitpodToken | undefined;
6654
try {
6755
token = await this.userDB.findGitpodTokensOfUser(userId, tokenHash);
6856
} catch (error) {
6957
log.error({ userId }, "failed to resolve gitpod token: ", error);
70-
return [];
7158
}
72-
if (!token || token.deleted) {
73-
return [];
59+
if (token?.deleted) {
60+
token = undefined;
7461
}
75-
if (oldPermissionCheck) {
76-
await oldPermissionCheck(token);
77-
}
78-
return token.scopes;
62+
return token;
7963
}
8064

8165
async deleteGitpodToken(

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2893,9 +2893,9 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
28932893

28942894
public async getGitpodTokens(ctx: TraceContext): Promise<GitpodToken[]> {
28952895
const user = await this.checkAndBlockUser("getGitpodTokens");
2896-
return this.gitpodTokenService.getGitpodTokens(user.id, user.id, (token: GitpodToken) => {
2897-
return this.guardAccess({ kind: "gitpodToken", subject: token }, "get");
2898-
});
2896+
const gitpodTokens = await this.gitpodTokenService.getGitpodTokens(user.id, user.id);
2897+
await Promise.all(gitpodTokens.map((tkn) => this.guardAccess({ kind: "gitpodToken", subject: tkn }, "get")));
2898+
return gitpodTokens;
28992899
}
29002900

29012901
public async generateNewGitpodToken(
@@ -2914,9 +2914,11 @@ export class GitpodServerImpl implements GitpodServerWithTracing, Disposable {
29142914
traceAPIParams(ctx, {}); // do not trace tokenHash
29152915

29162916
const user = await this.checkAndBlockUser("getGitpodTokenScopes");
2917-
return this.gitpodTokenService.getGitpodTokenScopes(user.id, user.id, tokenHash, (token: GitpodToken) => {
2918-
return this.guardAccess({ kind: "gitpodToken", subject: token }, "get");
2919-
});
2917+
const gitpodToken = await this.gitpodTokenService.findGitpodToken(user.id, user.id, tokenHash);
2918+
if (gitpodToken) {
2919+
await this.guardAccess({ kind: "gitpodToken", subject: gitpodToken }, "get");
2920+
}
2921+
return gitpodToken?.scopes ?? [];
29202922
}
29212923

29222924
public async deleteGitpodToken(ctx: TraceContext, tokenHash: string): Promise<void> {

0 commit comments

Comments
 (0)