importer.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /**
  2. * importer
  3. */
  4. module.exports = crowi => {
  5. 'use strict';
  6. const debug = require('debug')('growi:lib:importer');
  7. const request = require('request');
  8. const esa = require('esa-nodejs');
  9. const Page = crowi.model('Page');
  10. const User = crowi.model('User');
  11. const pageRouter = require('../routes/page')(crowi);
  12. const config = crowi.getConfig();
  13. let importer = {};
  14. let esaClient = {};
  15. /**
  16. * Get teams from esa (Promise wrapper)
  17. */
  18. const getTeamsFromEsa = () => {
  19. return new Promise((resolve, reject) => {
  20. esaClient.api.team((err, res) => {
  21. if (err) {
  22. debug(err);
  23. reject(err);
  24. }
  25. resolve(res);
  26. });
  27. });
  28. };
  29. /**
  30. * Get posts from esa (Promise wrapper)
  31. */
  32. const getPostsFromEsa = () => {
  33. return new Promise((resolve, reject) => {
  34. esaClient.api.posts((err, res) => {
  35. if (err) {
  36. debug(err);
  37. reject(err);
  38. }
  39. resolve(res);
  40. });
  41. });
  42. };
  43. /**
  44. * Initialize importer
  45. */
  46. importer.initialize = () => {
  47. esaClient = esa({
  48. team: config.crowi['importer:esa:team_name'],
  49. accessToken: config.crowi['importer:esa:access_token'],
  50. });
  51. debug('esa client is initialized');
  52. };
  53. /**
  54. * Import post data from esa to GROWI
  55. */
  56. importer.importAllPostsFromEsa = user => {
  57. /* Get posts from esa */
  58. return new Promise((resolve, reject) => {
  59. getPostsFromEsa()
  60. .then(res => {
  61. /* Import to GROWI */
  62. const basePage = '/';
  63. const ignoreNotFound = true;
  64. res.body.posts.forEach(post => {
  65. const pagePath = basePage + [post.category, post.name].filter(v => v).join('/');
  66. Page.findPage(pagePath, user, null, ignoreNotFound)
  67. .then(data => {
  68. if (data !== null) {
  69. reject('Page exists');
  70. }
  71. return Page.create(pagePath, post.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
  72. })
  73. .then(createdPage => {
  74. if (!createdPage) {
  75. reject('Page exists');
  76. }
  77. debug('Crete page: ' + createdPage);
  78. resolve();
  79. })
  80. .catch(err => {
  81. debug(err);
  82. reject(err);
  83. });
  84. });
  85. })
  86. .catch(err => {
  87. debug(err);
  88. reject(err);
  89. });
  90. });
  91. };
  92. /**
  93. * Import post data from esa to GROWI
  94. */
  95. importer.testConnectionToEsa = () => {
  96. return new Promise((resolve, reject) => {
  97. getTeamsFromEsa()
  98. .then(res => {
  99. resolve();
  100. })
  101. .catch(err => {
  102. debug(err);
  103. reject(err);
  104. });
  105. });
  106. };
  107. importer.initialize();
  108. return importer;
  109. };