@@ -5,7 +5,6 @@
|
||||
```ts
|
||||
import express from 'express';
|
||||
import { Logger as Logger_2 } from 'winston';
|
||||
import { PluginEndpointDiscovery } from '@backstage/backend-common';
|
||||
import { SearchEngine } from '@backstage/plugin-search-backend-node';
|
||||
|
||||
// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal)
|
||||
@@ -19,7 +18,5 @@ export function createRouter(options: RouterOptions): Promise<express.Router>;
|
||||
export type RouterOptions = {
|
||||
engine: SearchEngine;
|
||||
logger: Logger_2;
|
||||
discovery: PluginEndpointDiscovery;
|
||||
allowedLocationProtocols?: string[];
|
||||
};
|
||||
```
|
||||
|
||||
@@ -14,10 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
getVoidLogger,
|
||||
PluginEndpointDiscovery,
|
||||
} from '@backstage/backend-common';
|
||||
import { getVoidLogger } from '@backstage/backend-common';
|
||||
import {
|
||||
IndexBuilder,
|
||||
LunrSearchEngine,
|
||||
@@ -30,22 +27,16 @@ import { createRouter } from './router';
|
||||
|
||||
describe('createRouter', () => {
|
||||
let app: express.Express;
|
||||
let mockDiscoveryApi: jest.Mocked<PluginEndpointDiscovery>;
|
||||
let mockSearchEngine: jest.Mocked<SearchEngine>;
|
||||
|
||||
beforeAll(async () => {
|
||||
const logger = getVoidLogger();
|
||||
const searchEngine = new LunrSearchEngine({ logger });
|
||||
const indexBuilder = new IndexBuilder({ logger, searchEngine });
|
||||
mockDiscoveryApi = {
|
||||
getBaseUrl: jest.fn(),
|
||||
getExternalBaseUrl: jest.fn().mockResolvedValue('http://localhost:3000/'),
|
||||
};
|
||||
|
||||
const router = await createRouter({
|
||||
engine: indexBuilder.getSearchEngine(),
|
||||
logger,
|
||||
discovery: mockDiscoveryApi,
|
||||
});
|
||||
app = express().use(router);
|
||||
});
|
||||
@@ -65,12 +56,6 @@ describe('createRouter', () => {
|
||||
describe('search result filtering', () => {
|
||||
beforeAll(async () => {
|
||||
const logger = getVoidLogger();
|
||||
mockDiscoveryApi = {
|
||||
getBaseUrl: jest.fn(),
|
||||
getExternalBaseUrl: jest
|
||||
.fn()
|
||||
.mockResolvedValue('http://localhost:3000/'),
|
||||
};
|
||||
mockSearchEngine = {
|
||||
index: jest.fn(),
|
||||
setTranslator: jest.fn(),
|
||||
@@ -84,7 +69,6 @@ describe('createRouter', () => {
|
||||
const router = await createRouter({
|
||||
engine: indexBuilder.getSearchEngine(),
|
||||
logger,
|
||||
discovery: mockDiscoveryApi,
|
||||
});
|
||||
app = express().use(router);
|
||||
});
|
||||
|
||||
@@ -19,32 +19,24 @@ import Router from 'express-promise-router';
|
||||
import { Logger } from 'winston';
|
||||
import { SearchQuery, SearchResultSet } from '@backstage/search-common';
|
||||
import { SearchEngine } from '@backstage/plugin-search-backend-node';
|
||||
import { PluginEndpointDiscovery } from '@backstage/backend-common';
|
||||
|
||||
export type RouterOptions = {
|
||||
engine: SearchEngine;
|
||||
logger: Logger;
|
||||
discovery: PluginEndpointDiscovery;
|
||||
allowedLocationProtocols?: string[];
|
||||
};
|
||||
|
||||
const defaultAllowedLocationProtocols = ['http:', 'https:'];
|
||||
const allowedLocationProtocols = ['http:', 'https:'];
|
||||
|
||||
export async function createRouter(
|
||||
options: RouterOptions,
|
||||
): Promise<express.Router> {
|
||||
const {
|
||||
engine,
|
||||
logger,
|
||||
discovery,
|
||||
allowedLocationProtocols = defaultAllowedLocationProtocols,
|
||||
} = options;
|
||||
const baseUrl = await discovery.getExternalBaseUrl('');
|
||||
const { engine, logger } = options;
|
||||
|
||||
const filterResultSet = ({ results, ...resultSet }: SearchResultSet) => ({
|
||||
...resultSet,
|
||||
results: results.filter(result => {
|
||||
const protocol = new URL(result.document.location, baseUrl).protocol;
|
||||
const protocol = new URL(result.document.location, 'https://example.com')
|
||||
.protocol;
|
||||
const isAllowed = allowedLocationProtocols.includes(protocol);
|
||||
if (!isAllowed) {
|
||||
logger.info(
|
||||
|
||||
@@ -14,11 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import {
|
||||
createServiceBuilder,
|
||||
loadBackendConfig,
|
||||
SingleHostDiscovery,
|
||||
} from '@backstage/backend-common';
|
||||
import { createServiceBuilder } from '@backstage/backend-common';
|
||||
import { Server } from 'http';
|
||||
import { Logger } from 'winston';
|
||||
import { createRouter } from './router';
|
||||
@@ -37,8 +33,6 @@ export async function startStandaloneServer(
|
||||
options: ServerOptions,
|
||||
): Promise<Server> {
|
||||
const logger = options.logger.child({ service: 'search-backend' });
|
||||
const config = await loadBackendConfig({ logger, argv: process.argv });
|
||||
const discovery = SingleHostDiscovery.fromConfig(config);
|
||||
const searchEngine = new LunrSearchEngine({ logger });
|
||||
const indexBuilder = new IndexBuilder({ logger, searchEngine });
|
||||
logger.debug('Starting application server...');
|
||||
@@ -48,7 +42,6 @@ export async function startStandaloneServer(
|
||||
const router = await createRouter({
|
||||
engine: indexBuilder.getSearchEngine(),
|
||||
logger,
|
||||
discovery,
|
||||
});
|
||||
|
||||
let service = createServiceBuilder(module)
|
||||
|
||||
Reference in New Issue
Block a user