itizawa пре 5 година
родитељ
комит
73b60cc602
1 измењених фајлова са 29 додато и 2 уклоњено
  1. 29 2
      src/server/routes/apiv3/revisions.js

+ 29 - 2
src/server/routes/apiv3/revisions.js

@@ -4,7 +4,7 @@ const logger = loggerFactory('growi:routes:apiv3:pages');
 
 
 const express = require('express');
 const express = require('express');
 
 
-const { query } = require('express-validator/check');
+const { query, param } = require('express-validator/check');
 const ErrorV3 = require('../../models/vo/error-apiv3');
 const ErrorV3 = require('../../models/vo/error-apiv3');
 
 
 const router = express.Router();
 const router = express.Router();
@@ -23,11 +23,16 @@ module.exports = (crowi) => {
   const {
   const {
     Revision,
     Revision,
     Page,
     Page,
+    User,
   } = crowi.models;
   } = crowi.models;
 
 
   const validator = {
   const validator = {
     retrieveRevisions: [
     retrieveRevisions: [
-      query('pageId').exists().withMessage('pageId is required'),
+      query('pageId').isMongoId().withMessage('pageId is required'),
+    ],
+    retrieveRevisionById: [
+      query('pageId').isMongoId().withMessage('pageId is required'),
+      param('id').isMongoId().withMessage('id is required'),
     ],
     ],
   };
   };
 
 
@@ -71,5 +76,27 @@ module.exports = (crowi) => {
 
 
   });
   });
 
 
+  router.get('/:id', accessTokenParser, loginRequired, validator.retrieveRevisionById, apiV3FormValidator, async(req, res) => {
+    const revisionId = req.params.id;
+    const { pageId } = req.query;
+    const { isSharedPage } = req;
+
+    // check whether accessible
+    if (!isSharedPage && !(await Page.isAccessiblePageByViewer(pageId, req.user))) {
+      return res.apiv3Err(new ErrorV3('Current user is not accessible to this page.', 'forbidden-page'), 403);
+    }
+
+    try {
+      const revision = await Revision.findById(revisionId).populate('author', User.USER_PUBLIC_FIELDS);
+      return res.apiv3({ revision });
+    }
+    catch (err) {
+      const msg = 'Error occurred in getting revision data by id';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'faild-to-find-revision'), 500);
+    }
+
+  });
+
   return router;
   return router;
 };
 };