Parcourir la source

Merge pull request #10732 from growilabs/fix/user-pages-are-displayed-in-lsx-when-user-pages-are-set-to-hidden

fix: User pages are displayed in lsx when user pages are set to hidden
Yuki Takei il y a 2 mois
Parent
commit
9ff50c829e

+ 5 - 2
packages/remark-lsx/src/server/index.ts

@@ -57,7 +57,10 @@ const middleware = (crowi: any, app: any): void => {
     loginRequiredFallback,
     loginRequiredFallback,
   );
   );
   const accessTokenParser = crowi.accessTokenParser;
   const accessTokenParser = crowi.accessTokenParser;
-  const excludedPaths = crowi.pageService.getExcludedPathsBySystem();
+
+  // Use a callback to get excludedPaths at request time, not at server startup.
+  // This ensures config changes are reflected without server restart.
+  const getExcludedPaths = () => crowi.pageService.getExcludedPathsBySystem();
 
 
   app.get(
   app.get(
     '/_api/lsx',
     '/_api/lsx',
@@ -65,7 +68,7 @@ const middleware = (crowi: any, app: any): void => {
     loginRequired,
     loginRequired,
     lsxValidator,
     lsxValidator,
     paramValidator,
     paramValidator,
-    listPages({ excludedPaths }),
+    listPages({ getExcludedPaths }),
   );
   );
 };
 };
 
 

+ 8 - 8
packages/remark-lsx/src/server/routes/list-pages/index.spec.ts

@@ -53,7 +53,7 @@ describe('listPages', () => {
       createError(400, 'pagePath is required'),
       createError(400, 'pagePath is required'),
     );
     );
 
 
-    const handler = listPages({ excludedPaths: [] });
+    const handler = listPages({ getExcludedPaths: () => [] });
     await handler(reqMock, resMock);
     await handler(reqMock, resMock);
 
 
     expect(resMock.status).toHaveBeenCalledWith(400);
     expect(resMock.status).toHaveBeenCalledWith(400);
@@ -96,7 +96,7 @@ describe('listPages', () => {
       resMock.status.calledWith(200).mockReturnValue(resStatusMock);
       resMock.status.calledWith(200).mockReturnValue(resStatusMock);
 
 
       // when
       // when
-      const handler = listPages({ excludedPaths: [] });
+      const handler = listPages({ getExcludedPaths: () => [] });
       await handler(reqMock, resMock);
       await handler(reqMock, resMock);
 
 
       // then
       // then
@@ -130,7 +130,7 @@ describe('listPages', () => {
       resMock.status.calledWith(500).mockReturnValue(resStatusMock);
       resMock.status.calledWith(500).mockReturnValue(resStatusMock);
 
 
       // when
       // when
-      const handler = listPages({ excludedPaths: [] });
+      const handler = listPages({ getExcludedPaths: () => [] });
       await handler(reqMock, resMock);
       await handler(reqMock, resMock);
 
 
       // then
       // then
@@ -160,7 +160,7 @@ describe('listPages', () => {
       resMock.status.calledWith(400).mockReturnValue(resStatusMock);
       resMock.status.calledWith(400).mockReturnValue(resStatusMock);
 
 
       // when
       // when
-      const handler = listPages({ excludedPaths: [] });
+      const handler = listPages({ getExcludedPaths: () => [] });
       await handler(reqMock, resMock);
       await handler(reqMock, resMock);
 
 
       // then
       // then
@@ -286,8 +286,8 @@ describe('when excludedPaths is handled', () => {
     const resMock = mock<Response>();
     const resMock = mock<Response>();
     resMock.status.mockReturnValue(mock<Response>());
     resMock.status.mockReturnValue(mock<Response>());
 
 
-    // excludedPaths is empty
-    const handler = listPages({ excludedPaths: [] });
+    // getExcludedPaths returns empty array
+    const handler = listPages({ getExcludedPaths: () => [] });
     await handler(reqMock, resMock);
     await handler(reqMock, resMock);
 
 
     // query.and should NOT be called with a $not regex for paths
     // query.and should NOT be called with a $not regex for paths
@@ -307,9 +307,9 @@ describe('when excludedPaths is handled', () => {
     const resMock = mock<Response>();
     const resMock = mock<Response>();
     resMock.status.mockReturnValue(mock<Response>());
     resMock.status.mockReturnValue(mock<Response>());
 
 
-    // excludedPaths provided
+    // getExcludedPaths returns paths to exclude
     const excludedPaths = ['/user', '/tmp'];
     const excludedPaths = ['/user', '/tmp'];
-    const handler = listPages({ excludedPaths });
+    const handler = listPages({ getExcludedPaths: () => excludedPaths });
     await handler(reqMock, resMock);
     await handler(reqMock, resMock);
 
 
     // check if the logic generates the correct regex: ^\/(user|tmp)(\/|$)
     // check if the logic generates the correct regex: ^\/(user|tmp)(\/|$)

+ 6 - 1
packages/remark-lsx/src/server/routes/list-pages/index.ts

@@ -66,7 +66,11 @@ interface IListPagesRequest
   user: IUser;
   user: IUser;
 }
 }
 
 
-export const listPages = ({ excludedPaths }: { excludedPaths: string[] }) => {
+export const listPages = ({
+  getExcludedPaths,
+}: {
+  getExcludedPaths: () => string[];
+}) => {
   return async (req: IListPagesRequest, res: Response): Promise<Response> => {
   return async (req: IListPagesRequest, res: Response): Promise<Response> => {
     const params: LsxApiParams = {
     const params: LsxApiParams = {
       pagePath: removeTrailingSlash(req.query.pagePath),
       pagePath: removeTrailingSlash(req.query.pagePath),
@@ -92,6 +96,7 @@ export const listPages = ({ excludedPaths }: { excludedPaths: string[] }) => {
       const builder = await generateBaseQuery(params.pagePath, user);
       const builder = await generateBaseQuery(params.pagePath, user);
       let query = builder.query;
       let query = builder.query;
 
 
+      const excludedPaths = getExcludedPaths();
       if (excludedPaths.length > 0) {
       if (excludedPaths.length > 0) {
         const escapedPaths = excludedPaths.map((p) => {
         const escapedPaths = excludedPaths.map((p) => {
           const cleanPath = p.startsWith('/') ? p.substring(1) : p;
           const cleanPath = p.startsWith('/') ? p.substring(1) : p;