Просмотр исходного кода

WIP: implement validateReferer

devide validate-referer.spec.ts
Yuki Takei 2 лет назад
Родитель
Сommit
d0b84a13b4

+ 1 - 0
apps/app/src/server/middlewares/certify-shared-file/validate-referer/index.ts

@@ -0,0 +1 @@
+export * from './validate-referer';

+ 59 - 0
apps/app/src/server/middlewares/certify-shared-file/validate-referer/retrieve-site-url.spec.ts

@@ -0,0 +1,59 @@
+import { retrieveSiteUrl } from './retrieve-site-url';
+
+const mocks = vi.hoisted(() => {
+  return {
+    configManagerMock: {
+      getConfig: vi.fn(),
+    },
+  };
+});
+
+vi.mock('~/server/service/config-manager', () => {
+  return { configManager: mocks.configManagerMock };
+});
+
+
+describe('retrieveSiteUrl', () => {
+
+  describe('returns null', () => {
+
+    it('when the siteUrl is not set', () => {
+      // setup
+      mocks.configManagerMock.getConfig.mockImplementation(() => {
+        return null;
+      });
+
+      // when
+      const result = retrieveSiteUrl();
+
+      // then
+      expect(result).toBeNull();
+    });
+
+    it('when the siteUrl is invalid', () => {
+      // setup
+      mocks.configManagerMock.getConfig.mockImplementation(() => {
+        return 'invalid siteUrl string';
+      });
+
+      // when
+      const result = retrieveSiteUrl();
+
+      // then
+      expect(result).toBeNull();
+    });
+  });
+
+  it('returns a URL instance', () => {
+    // setup
+    const siteUrl = 'https://example.com';
+    mocks.configManagerMock.getConfig.mockImplementation(() => siteUrl);
+
+    // when
+    const result = retrieveSiteUrl();
+
+    // then
+    expect(result).toEqual(new URL(siteUrl));
+  });
+
+});

+ 22 - 0
apps/app/src/server/middlewares/certify-shared-file/validate-referer/retrieve-site-url.ts

@@ -0,0 +1,22 @@
+import { configManager } from '~/server/service/config-manager';
+import loggerFactory from '~/utils/logger';
+
+
+const logger = loggerFactory('growi:middlewares:certify-shared-file:validate-referer:retrieve-site-url');
+
+
+export const retrieveSiteUrl = (): URL | null => {
+  const siteUrlString = configManager.getConfig('crowi', 'app:siteUrl');
+  if (siteUrlString == null) {
+    logger.warn("Verification referer does not work because 'Site URL' is NOT set. All of attachments in share link page is invisible.");
+    return null;
+  }
+
+  try {
+    return new URL(siteUrlString);
+  }
+  catch (err) {
+    logger.error("The 'app:siteUrl' is invalid");
+    return null;
+  }
+};

+ 5 - 34
apps/app/src/server/middlewares/certify-shared-file/validate-referer.spec.ts → apps/app/src/server/middlewares/certify-shared-file/validate-referer/validate-referer.spec.ts

@@ -1,43 +1,12 @@
-import { retrieveSiteUrl, validateReferer } from './validate-referer';
+import { validateReferer } from './validate-referer';
 
 const mocks = vi.hoisted(() => {
   return {
-    configManagerMock: {
-      getConfig: vi.fn(),
-    },
+    retrieveSiteUrlMock: vi.fn(),
   };
 });
 
-vi.mock('~/server/service/config-manager', () => {
-  return { configManager: mocks.configManagerMock };
-});
-
-
-describe('retrieveSiteUrl', () => {
-
-  it('throw a parse error when the siteUrl is invalid', () => {
-    // setup
-    mocks.configManagerMock.getConfig.mockImplementation(() => {
-      return 'invalid siteUrl string';
-    });
-
-    // when
-    expect(() => retrieveSiteUrl()).toThrowError();
-  });
-
-  it('returns a URL instance', () => {
-    // setup
-    const siteUrl = 'https://example.com';
-    mocks.configManagerMock.getConfig.mockImplementation(() => siteUrl);
-
-    // when
-    const result = retrieveSiteUrl();
-
-    // then
-    expect(result).toEqual(new URL(siteUrl));
-  });
-
-});
+vi.mock('./retrieve-site-url', () => ({ retrieveSiteUrl: mocks.retrieveSiteUrlMock }));
 
 
 describe('validateReferer', () => {
@@ -45,6 +14,8 @@ describe('validateReferer', () => {
   describe('refurns false', () => {
 
     it('when the referer argument is undefined', () => {
+      // setup
+
       // when
       const result = validateReferer(undefined);
 

+ 7 - 18
apps/app/src/server/middlewares/certify-shared-file/validate-referer.ts → apps/app/src/server/middlewares/certify-shared-file/validate-referer/validate-referer.ts

@@ -1,27 +1,12 @@
-import { configManager } from '~/server/service/config-manager';
 import loggerFactory from '~/utils/logger';
 
-import { ValidReferer } from './interfaces';
+import { ValidReferer } from '../interfaces';
 
+import { retrieveSiteUrl } from './retrieve-site-url';
 
-const logger = loggerFactory('growi:middlewares:certify-shared-file:validate-referer');
 
+const logger = loggerFactory('growi:middlewares:certify-shared-file:validate-referer');
 
-export const retrieveSiteUrl = (): URL | null => {
-  const siteUrlString = configManager.getConfig('crowi', 'app:siteUrl');
-  if (siteUrlString == null) {
-    logger.warn("Verification referer does not work because 'Site URL' is NOT set. All of attachments in share link page is invisible.");
-    return null;
-  }
-
-  try {
-    return new URL(siteUrlString);
-  }
-  catch (err) {
-    logger.error("The 'app:siteUrl' is invalid");
-    throw err;
-  }
-};
 
 export const validateReferer = (referer: string | undefined): ValidReferer | false => {
   // not null
@@ -31,6 +16,10 @@ export const validateReferer = (referer: string | undefined): ValidReferer | fal
   }
 
   // siteUrl
+  const siteUrl = retrieveSiteUrl();
+  if (siteUrl == null) {
+    return false;
+  }
 
   let refererUrl: URL;
   try {