Răsfoiți Sursa

Pass operatorUserId

Taichi Masuyama 3 ani în urmă
părinte
comite
3a2160d10b

+ 9 - 5
packages/app/src/server/routes/apiv3/g2g-transfer.ts

@@ -20,6 +20,10 @@ import ErrorV3 from '../../models/vo/error-apiv3';
 import { generateOverwriteParams } from './import';
 import { ApiV3Response } from './interfaces/apiv3-response';
 
+interface AuthorizedRequest extends Request {
+  user?: any
+}
+
 const logger = loggerFactory('growi:routes:apiv3:transfer');
 
 const validator = {
@@ -131,13 +135,13 @@ module.exports = (crowi: Crowi): Router => {
 
   // Auto import
   // eslint-disable-next-line max-len
-  receiveRouter.post('/', uploads.single('transferDataZipFile'), /* verifyAndExtractTransferKey, */ async(req: Request & { transferKey: TransferKey }, res: ApiV3Response) => {
+  receiveRouter.post('/', uploads.single('transferDataZipFile'), /* verifyAndExtractTransferKey, */ async(req: Request & { transferKey: TransferKey, operatorUserId: string }, res: ApiV3Response) => {
     const { file } = req;
 
     const zipFile = importService.getFile(file.filename);
     let data;
 
-    const { collections: strCollections, optionsMap: strOptionsMap } = req.body;
+    const { collections: strCollections, optionsMap: strOptionsMap, operatorUserId } = req.body;
 
     let collections;
     let optionsMap;
@@ -199,7 +203,7 @@ module.exports = (crowi: Crowi): Router => {
       importSettings.jsonFileName = fileName;
 
       // generate overwrite params
-      importSettings.overwriteParams = generateOverwriteParams(collectionName, req.user, options);
+      importSettings.overwriteParams = generateOverwriteParams(collectionName, operatorUserId, options);
 
       importSettingsMap[collectionName] = importSettings;
     });
@@ -299,7 +303,7 @@ module.exports = (crowi: Crowi): Router => {
   // Auto export
   // TODO: Use socket to send progress info to the client
   // eslint-disable-next-line max-len
-  pushRouter.post('/transfer', /* accessTokenParser, loginRequiredStrictly, adminRequired, */ validator.transfer, apiV3FormValidator, async(req: Request, res: ApiV3Response) => {
+  pushRouter.post('/transfer', /* accessTokenParser, loginRequiredStrictly, adminRequired, */ validator.transfer, apiV3FormValidator, async(req: AuthorizedRequest, res: ApiV3Response) => {
     const { transferKey: transferKeyString, collections, optionsMap } = req.body;
 
     // Parse transfer key
@@ -332,7 +336,7 @@ module.exports = (crowi: Crowi): Router => {
 
     // Start transfer
     try {
-      await g2gTransferPusherService.startTransfer(tk, collections, optionsMap);
+      await g2gTransferPusherService.startTransfer(tk, req.user, collections, optionsMap);
     }
     catch (err) {
       logger.error(err);

+ 6 - 8
packages/app/src/server/routes/apiv3/import.js

@@ -1,5 +1,3 @@
-import mongoose from 'mongoose';
-
 import { SupportedAction } from '~/interfaces/activity';
 import loggerFactory from '~/utils/logger';
 
@@ -56,17 +54,17 @@ const router = express.Router();
 /**
  * generate overwrite params with overwrite-params/* modules
  * @param {string} collectionName
- * @param {object} user User Object
+ * @param {string} operatorUserId Operator user id
  * @param {GrowiArchiveImportOption} options GrowiArchiveImportOption instance
  */
-export const generateOverwriteParams = (collectionName, user, options) => {
+export const generateOverwriteParams = (collectionName, operatorUserId, options) => {
   switch (collectionName) {
     case 'pages':
-      return overwriteParamsPages(user, options);
+      return overwriteParamsPages(operatorUserId, options);
     case 'revisions':
-      return overwriteParamsRevisions(user, options);
+      return overwriteParamsRevisions(operatorUserId, options);
     case 'attachmentFiles.chunks':
-      return overwriteParamsAttachmentFilesChunks(user, options);
+      return overwriteParamsAttachmentFilesChunks(operatorUserId, options);
     default:
       return {};
   }
@@ -287,7 +285,7 @@ export default function route(crowi) {
       importSettings.jsonFileName = fileName;
 
       // generate overwrite params
-      importSettings.overwriteParams = generateOverwriteParams(collectionName, req.user, options);
+      importSettings.overwriteParams = generateOverwriteParams(collectionName, req.user._id, options);
 
       importSettingsMap[collectionName] = importSettings;
     });

+ 2 - 1
packages/app/src/server/routes/apiv3/index.js

@@ -6,6 +6,7 @@ import * as loginFormValidator from '../../middlewares/login-form-validator';
 import * as registerFormValidator from '../../middlewares/register-form-validator';
 
 import g2gTransfer from './g2g-transfer';
+import importRoute from './import';
 import pageListing from './page-listing';
 import * as userActivation from './user-activation';
 
@@ -33,7 +34,7 @@ module.exports = (crowi, app, isInstalled) => {
   routerForAdmin.use('/users', require('./users')(crowi));
   routerForAdmin.use('/user-groups', require('./user-group')(crowi));
   routerForAdmin.use('/export', require('./export')(crowi));
-  routerForAdmin.use('/import', require('./import')(crowi));
+  routerForAdmin.use('/import', importRoute(crowi));
   routerForAdmin.use('/search', require('./search')(crowi));
   routerForAdmin.use('/security-setting', require('./security-setting')(crowi));
   routerForAdmin.use('/mongo', require('./mongo')(crowi));

+ 3 - 3
packages/app/src/server/routes/apiv3/overwrite-params/attachmentFiles.chunks.js

@@ -5,13 +5,13 @@ class AttachmentFilesChunksOverwriteParamsFactory {
 
   /**
    * generate overwrite params object
-   * @param {object} user
+   * @param {string} operatorUserId
    * @param {ImportOptionForPages} option
    * @return object
    *  key: property name
    *  value: any value or a function `(value, { document, schema, propertyName }) => { return newValue }`
    */
-  static generate(user, option) {
+  static generate(operatorUserId, option) {
     const params = {};
 
     // Date
@@ -29,4 +29,4 @@ class AttachmentFilesChunksOverwriteParamsFactory {
 
 }
 
-module.exports = (req, option) => AttachmentFilesChunksOverwriteParamsFactory.generate(req, option);
+module.exports = (operatorUserId, option) => AttachmentFilesChunksOverwriteParamsFactory.generate(operatorUserId, option);

+ 5 - 6
packages/app/src/server/routes/apiv3/overwrite-params/pages.js

@@ -1,6 +1,5 @@
-const mongoose = require('mongoose');
-const { format } = require('date-fns');
 const { pagePathUtils } = require('@growi/core');
+const mongoose = require('mongoose');
 
 const { isTopPage } = pagePathUtils;
 
@@ -17,17 +16,17 @@ class PageOverwriteParamsFactory {
 
   /**
    * generate overwrite params object
-   * @param {object} user
+   * @param {string} operatorUserId
    * @param {ImportOptionForPages} option
    * @return object
    *  key: property name
    *  value: any value or a function `(value, { document, schema, propertyName }) => { return newValue }`
    */
-  static generate(user, option) {
+  static generate(operatorUserId, option) {
     const params = {};
 
     if (option.isOverwriteAuthorWithCurrentUser) {
-      const userId = ObjectId(user._id);
+      const userId = ObjectId(operatorUserId);
       params.creator = userId;
       params.lastUpdateUser = userId;
     }
@@ -71,4 +70,4 @@ class PageOverwriteParamsFactory {
 
 }
 
-module.exports = (user, option) => PageOverwriteParamsFactory.generate(user, option);
+module.exports = (operatorUserId, option) => PageOverwriteParamsFactory.generate(operatorUserId, option);

+ 4 - 4
packages/app/src/server/routes/apiv3/overwrite-params/revisions.js

@@ -9,17 +9,17 @@ class RevisionOverwriteParamsFactory {
 
   /**
    * generate overwrite params object
-   * @param {object} user
+   * @param {string} operatorUserId
    * @param {ImportOptionForPages} option
    * @return object
    *  key: property name
    *  value: any value or a function `(value, { document, schema, propertyName }) => { return newValue }`
    */
-  static generate(user, option) {
+  static generate(operatorUserId, option) {
     const params = {};
 
     if (option.isOverwriteAuthorWithCurrentUser) {
-      const userId = ObjectId(user._id);
+      const userId = ObjectId(operatorUserId);
       params.author = userId;
     }
 
@@ -28,4 +28,4 @@ class RevisionOverwriteParamsFactory {
 
 }
 
-module.exports = (user, option) => RevisionOverwriteParamsFactory.generate(user, option);
+module.exports = (operatorUserId, option) => RevisionOverwriteParamsFactory.generate(operatorUserId, option);

+ 3 - 2
packages/app/src/server/service/g2g-transfer.ts

@@ -47,7 +47,7 @@ interface Pusher {
    * @param {string[]} collections Collection name string array
    * @param {any} optionsMap Options map
    */
-  startTransfer(tk: TransferKey, collections: string[], optionsMap: any): Promise<void>
+  startTransfer(tk: TransferKey, user: any, collections: string[], optionsMap: any): Promise<void>
 }
 
 interface Receiver {
@@ -113,7 +113,7 @@ export class G2GTransferPusherService implements Pusher {
 
   public async transferAttachments(): Promise<void> { return }
 
-  public async startTransfer(tk: TransferKey, collections: string[], optionsMap: any): Promise<void> {
+  public async startTransfer(tk: TransferKey, user: any, collections: string[], optionsMap: any): Promise<void> {
     const { appUrl, key } = tk;
 
     let zipFileStream: ReadStream;
@@ -138,6 +138,7 @@ export class G2GTransferPusherService implements Pusher {
       form.append('transferDataZipFile', zipFileStream, `${appTitle}-${Date.now}.growi.zip`);
       form.append('collections', JSON.stringify(collections));
       form.append('optionsMap', JSON.stringify(optionsMap));
+      form.append('operatorUserId', user._id.toString());
       await rawAxios.post('/_api/v3/g2g-transfer/', form, {
         baseURL: appUrl.origin,
         headers: {