From 7a89555e73d4d0ef5f428249bf2132575a37f786 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Thu, 6 Apr 2023 10:48:38 +0100 Subject: [PATCH 1/2] lighthouse to support authenticated catalog api Signed-off-by: Brian Fletcher --- .changeset/late-waves-march.md | 5 +++++ packages/backend/src/plugins/lighthouse.ts | 10 ++++++++-- .../lighthouse-backend/src/service/EntitiesLoader.ts | 9 ++++++++- plugins/lighthouse-backend/src/service/plugin.ts | 5 ++++- 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 .changeset/late-waves-march.md diff --git a/.changeset/late-waves-march.md b/.changeset/late-waves-march.md new file mode 100644 index 0000000000..c6856993df --- /dev/null +++ b/.changeset/late-waves-march.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-lighthouse-backend': minor +--- + +Lighthouse backend plugin can now use an authenticated catalog backend API. diff --git a/packages/backend/src/plugins/lighthouse.ts b/packages/backend/src/plugins/lighthouse.ts index 5e805b7b80..00a67409e3 100644 --- a/packages/backend/src/plugins/lighthouse.ts +++ b/packages/backend/src/plugins/lighthouse.ts @@ -19,11 +19,17 @@ import { PluginEnvironment } from '../types'; import { CatalogClient } from '@backstage/catalog-client'; export default async function createPlugin(env: PluginEnvironment) { - const { logger, scheduler, config } = env; + const { logger, scheduler, config, tokenManager } = env; const catalogClient = new CatalogClient({ discoveryApi: env.discovery, }); - await createScheduler({ logger, scheduler, config, catalogClient }); + await createScheduler({ + logger, + scheduler, + config, + catalogClient, + tokenManager, + }); } diff --git a/plugins/lighthouse-backend/src/service/EntitiesLoader.ts b/plugins/lighthouse-backend/src/service/EntitiesLoader.ts index fe9aab48cc..bbcf0b782f 100644 --- a/plugins/lighthouse-backend/src/service/EntitiesLoader.ts +++ b/plugins/lighthouse-backend/src/service/EntitiesLoader.ts @@ -18,15 +18,22 @@ import { CatalogClient, CATALOG_FILTER_EXISTS, } from '@backstage/catalog-client'; +import { TokenManager } from '@backstage/backend-common'; -export async function loadLighthouseEntities(catalogClient: CatalogClient) { +export async function loadLighthouseEntities( + catalogClient: CatalogClient, + tokenManager: TokenManager, +) { const filter: Record = { kind: 'Component', 'spec.type': 'website', ['lighthouse.com/website-url']: CATALOG_FILTER_EXISTS, }; + const { token } = await tokenManager.getToken(); + return await catalogClient.getEntities({ filter: [filter], + token, }); } diff --git a/plugins/lighthouse-backend/src/service/plugin.ts b/plugins/lighthouse-backend/src/service/plugin.ts index 8e8952a3d6..84bd63f011 100644 --- a/plugins/lighthouse-backend/src/service/plugin.ts +++ b/plugins/lighthouse-backend/src/service/plugin.ts @@ -31,13 +31,14 @@ export interface CreateLighthouseSchedulerOptions { config: Config; scheduler?: PluginTaskScheduler; catalogClient: CatalogClient; + tokenManager: TokenManager; } /** @public **/ export async function createScheduler( options: CreateLighthouseSchedulerOptions, ) { - const { logger, scheduler, catalogClient, config } = options; + const { logger, scheduler, catalogClient, config, tokenManager } = options; const lighthouseApi = LighthouseRestApi.fromConfig(config); const lighthouseAuditConfig = LighthouseAuditScheduleImpl.fromConfig(config); @@ -77,8 +78,10 @@ export async function createScheduler( logger.info('Running Lighthouse Audit Task'); + const { token } = await tokenManager.getToken(); const websitesWithUrl = await catalogClient.getEntities({ filter: [filter], + token, }); let index = 0; From 0299dd40d672cdd33dcc0703679562658666c864 Mon Sep 17 00:00:00 2001 From: Brian Fletcher Date: Thu, 6 Apr 2023 10:54:22 +0100 Subject: [PATCH 2/2] fixes and api report Signed-off-by: Brian Fletcher --- .changeset/late-waves-march.md | 2 ++ plugins/lighthouse-backend/api-report.md | 3 +++ .../lighthouse-backend/src/service/EntitiesLoader.ts | 10 ++++++---- plugins/lighthouse-backend/src/service/plugin.ts | 11 +++++++---- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/.changeset/late-waves-march.md b/.changeset/late-waves-march.md index c6856993df..0691abd0fd 100644 --- a/.changeset/late-waves-march.md +++ b/.changeset/late-waves-march.md @@ -3,3 +3,5 @@ --- Lighthouse backend plugin can now use an authenticated catalog backend API. + +- Breaking \* You must now pass the `tokenManager` to the lighthouse `createScheduler`. diff --git a/plugins/lighthouse-backend/api-report.md b/plugins/lighthouse-backend/api-report.md index a91e47dfc5..b8c028f3dc 100644 --- a/plugins/lighthouse-backend/api-report.md +++ b/plugins/lighthouse-backend/api-report.md @@ -7,6 +7,7 @@ import { CatalogClient } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; import { Logger } from 'winston'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; +import { TokenManager } from '@backstage/backend-common'; // @public (undocumented) export interface CreateLighthouseSchedulerOptions { @@ -18,6 +19,8 @@ export interface CreateLighthouseSchedulerOptions { logger: Logger; // (undocumented) scheduler?: PluginTaskScheduler; + // (undocumented) + tokenManager: TokenManager; } // @public (undocumented) diff --git a/plugins/lighthouse-backend/src/service/EntitiesLoader.ts b/plugins/lighthouse-backend/src/service/EntitiesLoader.ts index bbcf0b782f..c20b95beae 100644 --- a/plugins/lighthouse-backend/src/service/EntitiesLoader.ts +++ b/plugins/lighthouse-backend/src/service/EntitiesLoader.ts @@ -32,8 +32,10 @@ export async function loadLighthouseEntities( const { token } = await tokenManager.getToken(); - return await catalogClient.getEntities({ - filter: [filter], - token, - }); + return await catalogClient.getEntities( + { + filter: [filter], + }, + { token }, + ); } diff --git a/plugins/lighthouse-backend/src/service/plugin.ts b/plugins/lighthouse-backend/src/service/plugin.ts index 84bd63f011..089f20f4ed 100644 --- a/plugins/lighthouse-backend/src/service/plugin.ts +++ b/plugins/lighthouse-backend/src/service/plugin.ts @@ -24,6 +24,7 @@ import { Config } from '@backstage/config'; import { LighthouseRestApi } from '@backstage/plugin-lighthouse-common'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { LighthouseAuditScheduleImpl } from '../config'; +import { TokenManager } from '@backstage/backend-common'; /** @public **/ export interface CreateLighthouseSchedulerOptions { @@ -79,10 +80,12 @@ export async function createScheduler( logger.info('Running Lighthouse Audit Task'); const { token } = await tokenManager.getToken(); - const websitesWithUrl = await catalogClient.getEntities({ - filter: [filter], - token, - }); + const websitesWithUrl = await catalogClient.getEntities( + { + filter: [filter], + }, + { token }, + ); let index = 0; for (const entity of websitesWithUrl.items) {