فهرست منبع

refactor: implement G2GTransferReceiverService.validateTransferKey

mizozobu 3 سال پیش
والد
کامیت
a4da45ba10
2فایلهای تغییر یافته به همراه17 افزوده شده و 17 حذف شده
  1. 3 13
      packages/app/src/server/routes/apiv3/g2g-transfer.ts
  2. 14 4
      packages/app/src/server/service/g2g-transfer.ts

+ 3 - 13
packages/app/src/server/routes/apiv3/g2g-transfer.ts

@@ -110,23 +110,13 @@ module.exports = (crowi: Crowi): Router => {
 
   // Local middleware to check if key is valid or not
   const validateTransferKey = async(req: Request, res: ApiV3Response, next: NextFunction) => {
-    const key = req.headers[X_GROWI_TRANSFER_KEY_HEADER_NAME];
+    const transferKey = req.headers[X_GROWI_TRANSFER_KEY_HEADER_NAME] as string;
 
-    if (typeof key !== 'string') {
-      return res.apiv3Err(new ErrorV3('Invalid transfer key or not set.', 'invalid_transfer_key'), 400);
-    }
-
-    let transferKey;
     try {
-      transferKey = await (TransferKeyModel as any).findOneActiveTransferKey(key); // TODO: Improve TS of models
+      await g2gTransferReceiverService.validateTransferKey(transferKey);
     }
     catch (err) {
-      logger.error(err);
-      return res.apiv3Err(new ErrorV3('Error occurred while trying to fing a transfer key.', 'failed_to_find_transfer_key'), 500);
-    }
-
-    if (transferKey == null) {
-      return res.apiv3Err(new ErrorV3('Transfer key has expired or not found.', 'transfer_key_expired_or_not_found'), 404);
+      return res.apiv3Err(new ErrorV3('Invalid transfer key', 'invalid_transfer_key'), 403);
     }
 
     next();

+ 14 - 4
packages/app/src/server/service/g2g-transfer.ts

@@ -491,11 +491,21 @@ export class G2GTransferReceiverService implements Receiver {
     this.crowi = crowi;
   }
 
-  public async validateTransferKey(transferKeyString: string): Promise<void> {
-    // Parse to tk
-    // Find active tkd
+  public async validateTransferKey(key: string): Promise<void> {
+    const { TransferKeyModel } = this.crowi;
+    const transferKey = await (TransferKeyModel as any).find({ key });
 
-    return;
+    if (transferKey == null) {
+      throw new Error(`Transfer key "${key}" was expired or not found`);
+    }
+
+    try {
+      TransferKey.parse(transferKey.keyString);
+    }
+    catch (err) {
+      logger.error(err);
+      throw new Error(`Transfer key "${key}" is invalid`);
+    }
   }
 
   public async answerGROWIInfo(): Promise<IDataGROWIInfo> {