| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /**
- * importer
- */
- module.exports = crowi => {
- 'use strict';
- const debug = require('debug')('growi:lib:importer');
- const request = require('request');
- const esa = require('esa-nodejs');
- const Page = crowi.model('Page');
- const User = crowi.model('User');
- const pageRouter = require('../routes/page')(crowi);
- const config = crowi.getConfig();
- let importer = {};
- let esaClient = {};
- /**
- * Initialize importer
- */
- importer.initialize = () => {
- esaClient = esa({
- team: config.crowi['importer:esa:team_name'],
- accessToken: config.crowi['importer:esa:access_token'],
- });
- debug('esa client is initialized');
- };
- /**
- * Import page data from esa to GROWI
- */
- importer.importPagesFromEsa = user => {
- return new Promise(async(resolve, reject) => {
- const data = await getAllDataFromEsa();
- const result = await createGrowiPages(data.body.posts, user);
- resolve(result);
- });
- };
- /**
- * Get posts from esa (Promise wrapper)
- */
- const getAllDataFromEsa = () => {
- return new Promise((resolve, reject) => {
- esaClient.api.posts((err, res) => {
- if (err) {
- debug(err);
- return reject(err);
- }
- resolve(res);
- });
- });
- };
- /**
- * Create posts from imported data
- */
- const createGrowiPages = (pages, user) => {
- const basePage = '/';
- let createdPages = [];
- let rejectedPages = [];
- let errors = [];
- return new Promise((resolve, reject) => {
- const promises = pages.map(page => {
- return new Promise(async(resolve, reject) => {
- const pagePath = basePage + [page.category, page.name].filter(v => v).join('/');
- const isCreatableName = await Page.isCreatableName(pagePath);
- const isPageNameTaken = await Page.findPage(pagePath, user, null, true);
- if (isCreatableName && !isPageNameTaken) {
- try {
- await Page.create(pagePath, page.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
- createdPages.push(page);
- }
- catch (err) {
- errors.push(err);
- }
- }
- else {
- rejectedPages.push(page);
- if (!isCreatableName) {
- errors.push(new Error(`${pagePath} is not a creatable name in Growi`));
- }
- if (isPageNameTaken) {
- errors.push(new Error(`${pagePath} already exists in Growi`));
- }
- }
- resolve();
- });
- });
- Promise.all(promises)
- .then(() => {
- resolve({
- createdPages,
- rejectedPages,
- errors,
- });
- });
- });
- };
- /**
- * Import page data from esa to GROWI
- */
- importer.testConnectionToEsa = () => {
- return new Promise(async(resolve, reject) => {
- try {
- await getTeamNameFromEsa();
- resolve();
- }
- catch (err) {
- debug(err);
- reject(err);
- }
- });
- };
- /**
- * Get teams from esa (Promise wrapper)
- */
- const getTeamNameFromEsa = () => {
- return new Promise((resolve, reject) => {
- esaClient.api.team((err, res) => {
- if (err) {
- debug(err);
- return reject(err);
- }
- resolve(res);
- });
- });
- };
- importer.initialize();
- return importer;
- };
|