Pass auth token from document collators

Co-authored-by: Nataliya Issayeva <nissayeva@users.noreply.github.com>
Co-authored-by: Tim Hansen <timbonicus@gmail.com>
Signed-off-by: Joe Porpeglia <josephp@spotify.com>
This commit is contained in:
Joe Porpeglia
2021-10-28 15:51:20 -04:00
committed by Nataliya Issayeva
parent 657a6a0b8e
commit 2a320c21b4
4 changed files with 50 additions and 20 deletions
@@ -14,7 +14,10 @@
* limitations under the License.
*/
import { PluginEndpointDiscovery } from '@backstage/backend-common';
import {
PluginEndpointDiscovery,
TokenManager,
} from '@backstage/backend-common';
import { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model';
import { DocumentCollator } from '@backstage/search-common';
import fetch from 'cross-fetch';
@@ -34,6 +37,7 @@ interface MkSearchIndexDoc {
export type TechDocsCollatorOptions = {
discovery: PluginEndpointDiscovery;
logger: Logger;
tokenManager: TokenManager;
locationTemplate?: string;
catalogClient?: CatalogApi;
parallelismLimit?: number;
@@ -51,6 +55,7 @@ export class DefaultTechDocsCollator implements DocumentCollator {
protected locationTemplate: string;
private readonly logger: Logger;
private readonly catalogClient: CatalogApi;
private readonly tokenManager: TokenManager;
private readonly parallelismLimit: number;
private readonly legacyPathCasing: boolean;
public readonly type: string = 'techdocs';
@@ -63,6 +68,7 @@ export class DefaultTechDocsCollator implements DocumentCollator {
locationTemplate,
logger,
catalogClient,
tokenManager,
parallelismLimit = 10,
legacyPathCasing = false,
}: TechDocsCollatorOptions) {
@@ -74,6 +80,7 @@ export class DefaultTechDocsCollator implements DocumentCollator {
catalogClient || new CatalogClient({ discoveryApi: discovery });
this.parallelismLimit = parallelismLimit;
this.legacyPathCasing = legacyPathCasing;
this.tokenManager = tokenManager;
}
static fromConfig(config: Config, options: TechDocsCollatorOptions) {
@@ -87,19 +94,23 @@ export class DefaultTechDocsCollator implements DocumentCollator {
async execute() {
const limit = pLimit(this.parallelismLimit);
const techDocsBaseUrl = await this.discovery.getBaseUrl('techdocs');
const entities = await this.catalogClient.getEntities({
fields: [
'kind',
'namespace',
'metadata.annotations',
'metadata.name',
'metadata.title',
'metadata.namespace',
'spec.type',
'spec.lifecycle',
'relations',
],
});
const { token } = await this.tokenManager.getServerToken();
const entities = await this.catalogClient.getEntities(
{
fields: [
'kind',
'namespace',
'metadata.annotations',
'metadata.name',
'metadata.title',
'metadata.namespace',
'spec.type',
'spec.lifecycle',
'relations',
],
},
{ token },
);
const docPromises = entities.items
.filter(it => it.metadata?.annotations?.['backstage.io/techdocs-ref'])
.map((entity: Entity) =>