importer.js 2.8 KB

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