Use identityApi to provide auth token for pagerduty API calls.

Signed-off-by: Isaiah Thiessen <isaiah.thiessen@telus.com>
Co-authored-by: Joel Cayne <joel.cayne@telus.com>
This commit is contained in:
Isaiah Thiessen
2022-05-31 11:15:17 -07:00
parent e15c24ddb5
commit b157c2eb1c
5 changed files with 26 additions and 5 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-pagerduty': patch
---
Use identityApi to provide auth token for pagerduty API calls.
+2
View File
@@ -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
//
+9 -1
View File
@@ -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<PagerDutyApi>({
});
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<T>(url: string): Promise<T> {
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);
+2 -1
View File
@@ -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 = {
+8 -3
View File
@@ -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),
}),
],
});