فهرست منبع

WIP: implement validateReferer

Yuki Takei 2 سال پیش
والد
کامیت
4d8aee0559

+ 21 - 4
apps/app/src/server/middlewares/certify-shared-file/validate-referer.spec.ts

@@ -1,4 +1,4 @@
-import { validateReferer } from './validate-referer';
+import { retrieveSiteUrl, validateReferer } from './validate-referer';
 
 const mocks = vi.hoisted(() => {
   return {
@@ -12,7 +12,8 @@ vi.mock('~/server/service/config-manager', () => {
   return { configManager: mocks.configManagerMock };
 });
 
-describe('validateReferer', () => {
+
+describe('retrieveSiteUrl', () => {
 
   it('throw a parse error when the siteUrl is invalid', () => {
     // setup
@@ -21,10 +22,26 @@ describe('validateReferer', () => {
     });
 
     // when
-    const refererString = 'referer string';
-    expect(() => validateReferer(refererString)).toThrowError();
+    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));
   });
 
+});
+
+
+describe('validateReferer', () => {
+
   describe('refurns false', () => {
 
     it('when the referer argument is undefined', () => {

+ 14 - 11
apps/app/src/server/middlewares/certify-shared-file/validate-referer.ts

@@ -7,28 +7,31 @@ import { ValidReferer } from './interfaces';
 const logger = loggerFactory('growi:middlewares:certify-shared-file:validate-referer');
 
 
-export const validateReferer = (referer: string | undefined): ValidReferer | false => {
-  // not null
-  if (referer == null) {
-    logger.debug('referer string is undefined');
-    return false;
-  }
-
-  // siteUrl
+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 false;
+    return null;
   }
 
-  let siteUrl: URL;
   try {
-    siteUrl = new URL(siteUrlString);
+    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
+  if (referer == null) {
+    logger.debug('referer string is undefined');
+    return false;
+  }
+
+  // siteUrl
+
   let refererUrl: URL;
   try {
     refererUrl = new URL(referer);