Skip to content

Commit e30c7f0

Browse files
committed
WIP: get and list authProviders
1 parent c6dbe7c commit e30c7f0

File tree

1 file changed

+46
-10
lines changed

1 file changed

+46
-10
lines changed

components/server/src/api/auth-provider-service-api.ts

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,41 +22,77 @@ import {
2222
DeleteAuthProviderRequest,
2323
DeleteAuthProviderResponse,
2424
} from "@gitpod/public-api/lib/gitpod/v1/authprovider_pb";
25+
import { AuthProviderService } from "../auth/auth-provider-service";
26+
import { AuthProviderEntry } from "@gitpod/gitpod-protocol";
2527

2628
@injectable()
2729
export class AuthProviderServiceAPI implements ServiceImpl<typeof AuthProviderServiceInterface> {
28-
@inject(PublicAPIConverter)
29-
private readonly apiConverter: PublicAPIConverter;
30+
constructor(
31+
@inject(PublicAPIConverter) private readonly apiConverter: PublicAPIConverter,
32+
@inject(AuthProviderService) private readonly authProviderService: AuthProviderService,
33+
) {}
3034

3135
async createAuthProvider(
32-
req: CreateAuthProviderRequest,
36+
request: CreateAuthProviderRequest,
3337
context: HandlerContext,
3438
): Promise<CreateAuthProviderResponse> {
3539
throw new ConnectError("unimplemented", Code.Unimplemented);
3640
}
37-
async getAuthProvider(req: GetAuthProviderRequest, context: HandlerContext): Promise<GetAuthProviderResponse> {
38-
throw new ConnectError("unimplemented", Code.Unimplemented);
41+
async getAuthProvider(request: GetAuthProviderRequest, context: HandlerContext): Promise<GetAuthProviderResponse> {
42+
if (!request.authProviderId) {
43+
throw new ConnectError("authProviderId is required", Code.InvalidArgument);
44+
}
45+
46+
const authProvider = await this.authProviderService.getAuthProvider(context.user.id, request.authProviderId);
47+
if (!authProvider) {
48+
throw new ConnectError("Provider not found.", Code.NotFound);
49+
}
50+
51+
return new GetAuthProviderResponse({
52+
authProvider: this.apiConverter.toAuthProvider(authProvider),
53+
});
3954
}
55+
4056
async listAuthProviders(
41-
req: ListAuthProvidersRequest,
57+
request: ListAuthProvidersRequest,
4258
context: HandlerContext,
4359
): Promise<ListAuthProvidersResponse> {
44-
throw new ConnectError("unimplemented", Code.Unimplemented);
60+
const target = request.id;
61+
const ownerId = target.case === "userId" ? target.value : undefined;
62+
const organizationId = target.case === "organizationId" ? target.value : undefined;
63+
64+
if (!organizationId && !ownerId) {
65+
throw new ConnectError("organizationId or ownerId is required", Code.InvalidArgument);
66+
}
67+
68+
const authProviders = organizationId
69+
? await this.authProviderService.getAuthProvidersOfOrg(context.user.id, organizationId)
70+
: await this.authProviderService.getAuthProvidersOfUser(context.user.id);
71+
72+
const redacted = authProviders.map(AuthProviderEntry.redact.bind(AuthProviderEntry));
73+
74+
const result = new ListAuthProvidersResponse({
75+
list: redacted.map((ap) => this.apiConverter.toAuthProvider(ap)),
76+
});
77+
return result;
4578
}
79+
4680
async listAuthProviderDescriptions(
47-
req: ListAuthProviderDescriptionsRequest,
81+
request: ListAuthProviderDescriptionsRequest,
4882
context: HandlerContext,
4983
): Promise<ListAuthProviderDescriptionsResponse> {
5084
throw new ConnectError("unimplemented", Code.Unimplemented);
5185
}
86+
5287
async updateAuthProvider(
53-
req: UpdateAuthProviderRequest,
88+
request: UpdateAuthProviderRequest,
5489
context: HandlerContext,
5590
): Promise<UpdateAuthProviderResponse> {
5691
throw new ConnectError("unimplemented", Code.Unimplemented);
5792
}
93+
5894
async deleteAuthProvider(
59-
req: DeleteAuthProviderRequest,
95+
request: DeleteAuthProviderRequest,
6096
context: HandlerContext,
6197
): Promise<DeleteAuthProviderResponse> {
6298
throw new ConnectError("unimplemented", Code.Unimplemented);

0 commit comments

Comments
 (0)