diff --git a/src/api/GitlabCIClient.ts b/src/api/GitlabCIClient.ts index 965855f..7af2a37 100644 --- a/src/api/GitlabCIClient.ts +++ b/src/api/GitlabCIClient.ts @@ -6,7 +6,7 @@ import { MergeRequestsSummary, MergeRequestsStatusSummary, } from './GitlabCIApi'; -import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; import { ContributorData, MergeRequest, @@ -16,28 +16,34 @@ import { export class GitlabCIClient implements GitlabCIApi { discoveryApi: DiscoveryApi; baseUrl: string; + identityApi: IdentityApi; constructor({ discoveryApi, baseUrl = 'https://gitlab.com/', + identityApi, }: { discoveryApi: DiscoveryApi; baseUrl?: string; + identityApi: IdentityApi; }) { this.discoveryApi = discoveryApi; this.baseUrl = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`; + this.identityApi = identityApi; } private async callApi( path: string, - query: { [key in string]: any }, + query: { [key in string]: any } ): Promise { const apiUrl = `${await this.discoveryApi.getBaseUrl('proxy')}/gitlabci`; + const { token } = await this.identityApi.getCredentials(); const response = await fetch( `${apiUrl}/${path}?${new URLSearchParams(query).toString()}`, + { headers: { Authorization: `Bearer ${token}` } } ); if (response.status === 200) { return (await response.json()) as T; - } + } return []; } @@ -142,7 +148,7 @@ export class GitlabCIClient implements GitlabCIApi { async getProjectDetails(projectSlug?: string): Promise { let projectDetails: any; - if(projectSlug){ + if (projectSlug) { projectDetails = await this.callApi( 'projects/' + encodeURIComponent(projectSlug), {}, diff --git a/src/plugin.ts b/src/plugin.ts index 779e6eb..3b7520f 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -1,13 +1,15 @@ -import { createPlugin, +import { + createPlugin, createRoutableExtension, createComponentExtension, - } from '@backstage/core-plugin-api'; +} from '@backstage/core-plugin-api'; import { configApiRef, createApiFactory, createRouteRef, discoveryApiRef, + identityApiRef, } from '@backstage/core-plugin-api'; import { GitlabCIApiRef, GitlabCIClient } from './api'; @@ -20,11 +22,16 @@ export const gitlabPlugin = createPlugin({ apis: [ createApiFactory({ api: GitlabCIApiRef, - deps: { configApi: configApiRef, discoveryApi: discoveryApiRef }, - factory: ({ configApi, discoveryApi }) => + deps: { + configApi: configApiRef, + discoveryApi: discoveryApiRef, + identityApi: identityApiRef, + }, + factory: ({ configApi, discoveryApi, identityApi }) => new GitlabCIClient({ discoveryApi, baseUrl: configApi.getOptionalString('gitlab.baseUrl'), + identityApi, }), }), ], @@ -32,10 +39,9 @@ export const gitlabPlugin = createPlugin({ export const EntityGitlabContent = gitlabPlugin.provide( createRoutableExtension({ - component: () => - import('./Router').then(m => m.Router), + component: () => import('./Router').then((m) => m.Router), mountPoint: rootRouteRef, - }), + }) ); export const EntityGitlabLanguageCard = gitlabPlugin.provide( @@ -86,4 +92,4 @@ export const EntityGitlabPipelinesTable = gitlabPlugin.provide( import('./components/widgets/index').then((m) => m.PipelinesTable), }, }) -); \ No newline at end of file +);