Explorar el Código

Move solution to normalizeQueryString method

arvid-e hace 2 meses
padre
commit
ee6e4f07bf

+ 18 - 0
apps/app/src/features/search/utils/disableUserPages.ts

@@ -0,0 +1,18 @@
+export function handleUserPages(
+  query: string,
+  userPagesDisabled: boolean,
+): string {
+  if (!userPagesDisabled) {
+    return query;
+  }
+
+  const cleanQuery = query.replace(/prefix:\/user/g, '').trim();
+
+  if (!cleanQuery.includes('-prefix:/user')) {
+    const queryWithUserPrefix = `${cleanQuery.trim()} -prefix:/user`;
+
+    return queryWithUserPrefix;
+  }
+
+  return cleanQuery;
+}

+ 1 - 13
apps/app/src/server/routes/search.ts

@@ -162,19 +162,7 @@ module.exports = (crowi: Crowi, app) => {
     // biome-ignore lint/suspicious/noImplicitAnyLet: ignore
     let delegatorName;
     try {
-      let query = decodeURIComponent(q);
-
-      const disableUserPages = crowi.configManager.getConfig(
-        'security:disableUserPages',
-      );
-
-      if (disableUserPages) {
-        query = query.replace(/prefix:\/user/g, '');
-
-        if (!query.includes('-prefix:/user')) {
-          query = `${query.trim()} -prefix:/user`;
-        }
-      }
+      const query = decodeURIComponent(q);
 
       const nqName = nq ?? decodeURIComponent(nq);
       [searchResult, delegatorName] = await searchService.searchKeyword(

+ 12 - 3
apps/app/src/server/service/search.ts

@@ -8,6 +8,7 @@ import {
   isIncludeAiMenthion,
   removeAiMenthion,
 } from '~/features/search/utils/ai';
+import { handleUserPages } from '~/features/search/utils/disableUserPages';
 import { SearchDelegatorName } from '~/interfaces/named-query';
 import type {
   IFormattedSearchResult,
@@ -48,9 +49,13 @@ const filterXssOptions = {
 
 const filterXss = new FilterXSS(filterXssOptions);
 
-const normalizeQueryString = (_queryString: string): string => {
+const normalizeQueryString = (
+  _queryString: string,
+  disableUserPages: boolean,
+): string => {
   let queryString = _queryString.trim();
   queryString = removeAiMenthion(queryString).replace(/\s+/g, ' ');
+  queryString = handleUserPages(queryString, disableUserPages);
 
   return queryString;
 };
@@ -328,7 +333,11 @@ class SearchService implements SearchQueryParser, SearchResolver {
     _queryString: string,
     nqName: string | null,
   ): Promise<ParsedQuery> {
-    const queryString = normalizeQueryString(_queryString);
+    const disableUserPages = this.crowi.configManager.getConfig(
+      'security:disableUserPages',
+    );
+
+    const queryString = normalizeQueryString(_queryString, disableUserPages);
 
     const terms = this.parseQueryString(queryString);
 
@@ -351,7 +360,7 @@ class SearchService implements SearchQueryParser, SearchResolver {
     let parsedQuery: ParsedQuery;
     if (aliasOf != null) {
       parsedQuery = {
-        queryString: normalizeQueryString(aliasOf),
+        queryString: normalizeQueryString(aliasOf, disableUserPages),
         terms: this.parseQueryString(aliasOf),
       };
     } else {