From b157c2eb1c379a08e8687a55c5d342c3cc7560ec Mon Sep 17 00:00:00 2001 From: Isaiah Thiessen Date: Tue, 31 May 2022 11:15:17 -0700 Subject: [PATCH] Use identityApi to provide auth token for pagerduty API calls. Signed-off-by: Isaiah Thiessen Co-authored-by: Joel Cayne --- .changeset/eight-ducks-beg.md | 5 +++++ plugins/pagerduty/api-report.md | 2 ++ plugins/pagerduty/src/api/client.ts | 10 +++++++++- plugins/pagerduty/src/api/types.ts | 3 ++- plugins/pagerduty/src/plugin.ts | 11 ++++++++--- 5 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 .changeset/eight-ducks-beg.md diff --git a/.changeset/eight-ducks-beg.md b/.changeset/eight-ducks-beg.md new file mode 100644 index 0000000000..729c1992fa --- /dev/null +++ b/.changeset/eight-ducks-beg.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-pagerduty': patch +--- + +Use identityApi to provide auth token for pagerduty API calls. diff --git a/plugins/pagerduty/api-report.md b/plugins/pagerduty/api-report.md index bd26531da6..86b917c6eb 100644 --- a/plugins/pagerduty/api-report.md +++ b/plugins/pagerduty/api-report.md @@ -10,6 +10,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { ConfigApi } from '@backstage/core-plugin-api'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; +import { IdentityApi } from '@backstage/core-plugin-api'; import { ReactNode } from 'react'; // Warning: (ae-missing-release-tag) "EntityPagerDutyCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -45,6 +46,7 @@ export class PagerDutyClient implements PagerDutyApi { static fromConfig( configApi: ConfigApi, discoveryApi: DiscoveryApi, + identityApi: IdentityApi, ): PagerDutyClient; // Warning: (ae-forgotten-export) The symbol "ChangeEvent" needs to be exported by the entry point index.d.ts // diff --git a/plugins/pagerduty/src/api/client.ts b/plugins/pagerduty/src/api/client.ts index 81d3792ecf..43c6165c91 100644 --- a/plugins/pagerduty/src/api/client.ts +++ b/plugins/pagerduty/src/api/client.ts @@ -29,6 +29,7 @@ import { createApiRef, DiscoveryApi, ConfigApi, + IdentityApi, } from '@backstage/core-plugin-api'; export class UnauthorizedError extends Error {} @@ -38,13 +39,18 @@ export const pagerDutyApiRef = createApiRef({ }); export class PagerDutyClient implements PagerDutyApi { - static fromConfig(configApi: ConfigApi, discoveryApi: DiscoveryApi) { + static fromConfig( + configApi: ConfigApi, + discoveryApi: DiscoveryApi, + identityApi: IdentityApi, + ) { const eventsBaseUrl: string = configApi.getOptionalString('pagerDuty.eventsBaseUrl') ?? 'https://events.pagerduty.com/v2'; return new PagerDutyClient({ eventsBaseUrl, discoveryApi, + identityApi, }); } constructor(private readonly config: ClientApiConfig) {} @@ -124,11 +130,13 @@ export class PagerDutyClient implements PagerDutyApi { } private async getByUrl(url: string): Promise { + const { token: idToken } = await this.config.identityApi.getCredentials(); const options = { method: 'GET', headers: { Accept: 'application/vnd.pagerduty+json;version=2', 'Content-Type': 'application/json', + ...(idToken && { Authorization: `Bearer ${idToken}` }), }, }; const response = await this.request(url, options); diff --git a/plugins/pagerduty/src/api/types.ts b/plugins/pagerduty/src/api/types.ts index a11cc9d63b..8acd24f033 100644 --- a/plugins/pagerduty/src/api/types.ts +++ b/plugins/pagerduty/src/api/types.ts @@ -15,7 +15,7 @@ */ import { Incident, ChangeEvent, OnCall, Service } from '../components/types'; -import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; export type TriggerAlarmRequest = { integrationKey: string; @@ -74,6 +74,7 @@ export type OnCallsResponse = { export type ClientApiConfig = { eventsBaseUrl?: string; discoveryApi: DiscoveryApi; + identityApi: IdentityApi; }; export type RequestOptions = { diff --git a/plugins/pagerduty/src/plugin.ts b/plugins/pagerduty/src/plugin.ts index d1c4e6d35b..32093015ff 100644 --- a/plugins/pagerduty/src/plugin.ts +++ b/plugins/pagerduty/src/plugin.ts @@ -21,6 +21,7 @@ import { discoveryApiRef, configApiRef, createComponentExtension, + identityApiRef, } from '@backstage/core-plugin-api'; export const rootRouteRef = createRouteRef({ @@ -32,9 +33,13 @@ export const pagerDutyPlugin = createPlugin({ apis: [ createApiFactory({ api: pagerDutyApiRef, - deps: { discoveryApi: discoveryApiRef, configApi: configApiRef }, - factory: ({ configApi, discoveryApi }) => - PagerDutyClient.fromConfig(configApi, discoveryApi), + deps: { + discoveryApi: discoveryApiRef, + configApi: configApiRef, + identityApi: identityApiRef, + }, + factory: ({ configApi, discoveryApi, identityApi }) => + PagerDutyClient.fromConfig(configApi, discoveryApi, identityApi), }), ], });