diff --git a/.changeset/weak-drinks-report.md b/.changeset/weak-drinks-report.md index d9ab3880f7..1f8ee512ba 100644 --- a/.changeset/weak-drinks-report.md +++ b/.changeset/weak-drinks-report.md @@ -2,4 +2,4 @@ '@backstage/plugin-code-climate': patch --- -Send Authorization headers in fetch requests in Code Climate plugin to fix unauthorized requests to Backstage backends with authentication enabled as per https://github.com/backstage/backstage/blob/master/contrib/docs/tutorials/authenticate-api-requests.md. +Send Authorization headers in fetch requests using FetchApi in Code Climate plugin to fix unauthorized requests to Backstage backends with authentication enabled. diff --git a/plugins/code-climate/api-report.md b/plugins/code-climate/api-report.md index 13231361dc..5ef53cf543 100644 --- a/plugins/code-climate/api-report.md +++ b/plugins/code-climate/api-report.md @@ -8,7 +8,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { DiscoveryApi } from '@backstage/core-plugin-api'; -import { IdentityApi } from '@backstage/core-plugin-api'; +import { FetchApi } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; // Warning: (ae-missing-release-tag) "CodeClimateApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) diff --git a/plugins/code-climate/src/api/production-api.ts b/plugins/code-climate/src/api/production-api.ts index d37ec61458..81ba6b9ad6 100644 --- a/plugins/code-climate/src/api/production-api.ts +++ b/plugins/code-climate/src/api/production-api.ts @@ -22,7 +22,7 @@ import { CodeClimateIssuesData, } from './code-climate-data'; import { CodeClimateApi } from './code-climate-api'; -import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; +import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; import { Duration } from 'luxon'; import humanizeDuration from 'humanize-duration'; @@ -36,16 +36,16 @@ const otherIssuesQuery = `${basicIssuesOptions}&${categoriesFilter}=Bug%20Risk`; type Options = { discoveryApi: DiscoveryApi; - identityApi: IdentityApi; + fetchApi: FetchApi; }; export class ProductionCodeClimateApi implements CodeClimateApi { private readonly discoveryApi: DiscoveryApi; - private readonly identityApi: IdentityApi; + private readonly fetchApi: FetchApi; constructor(options: Options) { this.discoveryApi = options.discoveryApi; - this.identityApi = options.identityApi; + this.fetchApi = options.fetchApi; } async fetchAllData(options: { @@ -55,11 +55,6 @@ export class ProductionCodeClimateApi implements CodeClimateApi { testReportID: string; }): Promise { const { apiUrl, repoID, snapshotID, testReportID } = options; - - const { token } = await this.identityApi.getCredentials(); - const headersWithAuth = { - headers: { Authorization: `Bearer ${token}` }, - }; const [ maintainabilityResponse, testCoverageResponse, @@ -67,25 +62,20 @@ export class ProductionCodeClimateApi implements CodeClimateApi { duplicationResponse, otherIssuesResponse, ] = await Promise.all([ - await fetch( + await this.fetchApi.fetch( `${apiUrl}/repos/${repoID}/snapshots/${snapshotID}`, - headersWithAuth, ), - await fetch( + await this.fetchApi.fetch( `${apiUrl}/repos/${repoID}/test_reports/${testReportID}`, - headersWithAuth, ), - await fetch( + await this.fetchApi.fetch( `${apiUrl}/repos/${repoID}/snapshots/${snapshotID}/issues?${codeSmellsQuery}`, - headersWithAuth, ), - await fetch( + await this.fetchApi.fetch( `${apiUrl}/repos/${repoID}/snapshots/${snapshotID}/issues?${duplicationQuery}`, - headersWithAuth, ), - await fetch( + await this.fetchApi.fetch( `${apiUrl}/repos/${repoID}/snapshots/${snapshotID}/issues?${otherIssuesQuery}`, - headersWithAuth, ), ]); @@ -132,11 +122,8 @@ export class ProductionCodeClimateApi implements CodeClimateApi { const apiUrl = `${await this.discoveryApi.getBaseUrl( 'proxy', )}/codeclimate/api`; - const { token } = await this.identityApi.getCredentials(); - const repoResponse = await fetch(`${apiUrl}/repos/${repoID}`, { - headers: { Authorization: `Bearer ${token}` }, - }); + const repoResponse = await this.fetchApi.fetch(`${apiUrl}/repos/${repoID}`); if (!repoResponse.ok) { throw new Error('Failed fetching Code Climate info'); diff --git a/plugins/code-climate/src/plugin.ts b/plugins/code-climate/src/plugin.ts index d8f7ea5028..54502b6355 100644 --- a/plugins/code-climate/src/plugin.ts +++ b/plugins/code-climate/src/plugin.ts @@ -20,7 +20,7 @@ import { createPlugin, createRouteRef, discoveryApiRef, - identityApiRef, + fetchApiRef, createComponentExtension, } from '@backstage/core-plugin-api'; @@ -37,10 +37,10 @@ export const codeClimatePlugin = createPlugin({ api: codeClimateApiRef, deps: { discoveryApi: discoveryApiRef, - identityApi: identityApiRef, + fetchApi: fetchApiRef, }, - factory: ({ discoveryApi, identityApi }) => - new ProductionCodeClimateApi({ discoveryApi, identityApi }), + factory: ({ discoveryApi, fetchApi }) => + new ProductionCodeClimateApi({ discoveryApi, fetchApi }), }), ], routes: {