From 3ed0eac5b4fc6e48f50395d61adc4a6a88423f21 Mon Sep 17 00:00:00 2001 From: Heikki Hellgren Date: Tue, 20 Feb 2024 12:27:06 +0200 Subject: [PATCH] fix: authorized search engine to obey query page limit Signed-off-by: Heikki Hellgren --- .changeset/light-birds-sparkle.md | 5 +++++ .../src/service/AuthorizedSearchEngine.ts | 14 +++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) create mode 100644 .changeset/light-birds-sparkle.md diff --git a/.changeset/light-birds-sparkle.md b/.changeset/light-birds-sparkle.md new file mode 100644 index 0000000000..8170e5fe26 --- /dev/null +++ b/.changeset/light-birds-sparkle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend': patch +--- + +Authorized search engine now obeys query page limit diff --git a/plugins/search-backend/src/service/AuthorizedSearchEngine.ts b/plugins/search-backend/src/service/AuthorizedSearchEngine.ts index 52c87d76c7..8d285d053e 100644 --- a/plugins/search-backend/src/service/AuthorizedSearchEngine.ts +++ b/plugins/search-backend/src/service/AuthorizedSearchEngine.ts @@ -18,12 +18,12 @@ import { compact, zipObject } from 'lodash'; import qs from 'qs'; import DataLoader from 'dataloader'; import { - EvaluatePermissionResponse, - EvaluatePermissionRequest, + AuthorizePermissionRequest, AuthorizeResult, + EvaluatePermissionRequest, + EvaluatePermissionResponse, isResourcePermission, PermissionEvaluator, - AuthorizePermissionRequest, QueryPermissionRequest, } from '@backstage/plugin-permission-common'; import { @@ -63,7 +63,6 @@ export function encodePageCursor({ page }: { page: number }): string { } export class AuthorizedSearchEngine implements SearchEngine { - private readonly pageSize = 25; private readonly queryLatencyBudgetMs: number; constructor( @@ -162,8 +161,9 @@ export class AuthorizedSearchEngine implements SearchEngine { ); } + const pageSize = query.pageLimit || 25; const { page } = decodePageCursor(query.pageCursor); - const targetResults = (page + 1) * this.pageSize; + const targetResults = (page + 1) * pageSize; let filteredResults: IndexableResult[] = []; let nextPageCursor: string | undefined; @@ -190,12 +190,12 @@ export class AuthorizedSearchEngine implements SearchEngine { return { results: filteredResults - .slice(page * this.pageSize, (page + 1) * this.pageSize) + .slice(page * pageSize, (page + 1) * pageSize) .map((result, index) => { // Overwrite any/all rank entries to avoid leaking knowledge of filtered results. return { ...result, - rank: page * this.pageSize + index + 1, + rank: page * pageSize + index + 1, }; }), previousPageCursor: