sou 7 лет назад
Родитель
Сommit
5b007da335
2 измененных файлов с 50 добавлено и 39 удалено
  1. 1 1
      lib/routes/admin.js
  2. 49 38
      lib/util/importer.js

+ 1 - 1
lib/routes/admin.js

@@ -1222,7 +1222,7 @@ module.exports = function(crowi, app) {
    */
   actions.api.importAllPostsFromEsa = function(req, res) {
     const user = req.user;
-    importer.importAllPostsFromEsa(user)
+    importer.importPagesFromEsa(user)
     .then(function() {
       return res.json({ status: true });
     })

+ 49 - 38
lib/util/importer.js

@@ -32,7 +32,7 @@ module.exports = crowi => {
   /**
    * Get posts from esa (Promise wrapper)
    */
-  const getPostsFromEsa = () => {
+  const getDataFromEsa = () => {
     return new Promise((resolve, reject) => {
       esaClient.api.posts((err, res) => {
         if (err) {
@@ -44,6 +44,40 @@ module.exports = crowi => {
     });
   };
 
+  /**
+   * Create posts from imported data
+   */
+  const createGrowiPages = (pages, user) => {
+    return new Promise((resolve, reject) => {
+      const basePage = '/';
+      const ignoreNotFound = true;
+      pages.forEach(post => {
+        const pagePath = basePage + [post.category, post.name].filter(v => v).join('/');
+        Page.findPage(pagePath, user, null, ignoreNotFound)
+        .then(data => {
+          if (data !== null) {
+            return reject('Page exists');
+          }
+          if (!Page.isCreatableName(pagePath)) {
+            return reject(`Page name '${pagePath}' is not allowed in Growi`);
+          }
+          return Page.create(pagePath, post.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
+        })
+        .then(createdPage => {
+          if (!createdPage) {
+            return reject('Page exists');
+          }
+          debug('Crete page: ' + createdPage);
+          return resolve();
+        })
+        .catch(err => {
+          debug(err);
+          return reject(err);
+        });
+      });
+    });
+  };
+
   /**
    * Initialize importer
    */
@@ -56,57 +90,34 @@ module.exports = crowi => {
   };
 
   /**
-   * Import post data from esa to GROWI
+   * Import page data from esa to GROWI
    */
-  importer.importAllPostsFromEsa = user => {
-    /* Get posts from esa */
-    return new Promise((resolve, reject) => {
-      getPostsFromEsa()
-      .then(res => {
-        /* Import to GROWI */
-        const basePage = '/';
-        const ignoreNotFound = true;
-        res.body.posts.forEach(post => {
-          const pagePath = basePage + [post.category, post.name].filter(v => v).join('/');
-          Page.findPage(pagePath, user, null, ignoreNotFound)
-          .then(data => {
-            if (data !== null) {
-              reject('Page exists');
-            }
-            return Page.create(pagePath, post.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
-          })
-          .then(createdPage => {
-            if (!createdPage) {
-              reject('Page exists');
-            }
-            debug('Crete page: ' + createdPage);
-            resolve();
-          })
-          .catch(err => {
-            debug(err);
-            reject(err);
-          });
-        });
-      })
-      .catch(err => {
+  importer.importPagesFromEsa = user => {
+    return new Promise(async(resolve, reject) => {
+      const data = await getDataFromEsa();
+      try {
+        await createGrowiPages(data.body.posts, user);
+        return resolve();
+      }
+      catch (err) {
         debug(err);
-        reject(err);
-      });
+        return reject(err);
+      }
     });
   };
 
   /**
-   * Import post data from esa to GROWI
+   * Import page data from esa to GROWI
    */
   importer.testConnectionToEsa = () => {
     return new Promise((resolve, reject) => {
       getTeamsFromEsa()
       .then(res => {
-        resolve();
+        return resolve();
       })
       .catch(err => {
         debug(err);
-        reject(err);
+        return reject(err);
       });
     });
   };