importer.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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. , qiita = require('./qiitaClient')
  11. , qiitaClient = {}
  12. , Page = crowi.model('Page')
  13. , User = crowi.model('User')
  14. , pageRouter = require('../routes/page')(crowi)
  15. , crowi = crowi
  16. , config = crowi.getConfig()
  17. , importer = {}
  18. ;
  19. /**
  20. * Initialize importer
  21. */
  22. function initialize() {
  23. esaClient = esa({
  24. team: config.crowi['importer:esa:team_name'],
  25. accessToken: config.crowi['importer:esa:access_token'],
  26. });
  27. debug('esa client is initialized');
  28. }
  29. qiitaClient = qiita({
  30. team: config.crowi['importer:qiita:team_name'],
  31. accessToken: config.crowi['importer:qiita:access_token'],
  32. });
  33. debug('qiita client is initialized');
  34. /**
  35. * Get teams from esa (Promise wrapper)
  36. */
  37. function getTeamsFromEsa() {
  38. return new Promise(function(resolve, reject) {
  39. esaClient.api.team(function(err, res) {
  40. if (err) {
  41. debug(err);
  42. reject(err);
  43. }
  44. resolve(res);
  45. })
  46. });
  47. }
  48. /**
  49. * Get posts from esa (Promise wrapper)
  50. */
  51. function getPostsFromEsa() {
  52. return new Promise(function(resolve, reject) {
  53. esaClient.api.posts(function(err, res) {
  54. if (err) {
  55. debug(err);
  56. reject(err);
  57. }
  58. resolve(res);
  59. });
  60. });
  61. }
  62. /**
  63. * Import post data from esa to GROWI
  64. */
  65. importer.importAllPostsFromEsa = function(user) {
  66. /* Get posts from esa */
  67. return new Promise(function(resolve, reject) {
  68. getPostsFromEsa()
  69. .then(function(res) {
  70. /* Import to GROWI */
  71. var basePage = '/';
  72. var ignoreNotFound = true;
  73. res.body.posts.forEach(function(post) {
  74. var pagePath = basePage + [post.category, post.name].filter(v => v).join('/')
  75. Page.findPage(pagePath, user, null, ignoreNotFound)
  76. .then(function(data) {
  77. if (data !== null) {
  78. reject('Page exists');
  79. }
  80. return Page.create(pagePath, post.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
  81. })
  82. .then(function(createdPage) {
  83. if (!createdPage) {
  84. reject('Page exists');
  85. }
  86. debug('Crete page: ' + createdPage);
  87. resolve();
  88. })
  89. .catch(function(err) {
  90. debug(err);
  91. reject(err);
  92. })
  93. });
  94. })
  95. .catch(function(err) {
  96. debug(err);
  97. reject(err);
  98. });
  99. });
  100. }
  101. /**
  102. * Import post data from esa to GROWI
  103. */
  104. importer.testConnectionToEsa = function() {
  105. return new Promise(function(resolve, reject) {
  106. getTeamsFromEsa()
  107. .then(function(res) {
  108. resolve();
  109. })
  110. .catch(function(err) {
  111. debug(err);
  112. reject(err);
  113. });
  114. });
  115. }
  116. /**
  117. * Get posts from qiita (Promise wrapper)
  118. */
  119. function getPostsFromQiita() {
  120. return new Promise(function(resolve, reject) {
  121. qiitaClient.api.posts(function(err, res) {
  122. if (err) {
  123. debug(err);
  124. reject(err);
  125. }
  126. resolve(res);
  127. });
  128. });
  129. }
  130. /**
  131. * Import post data from qiita to GROWI
  132. */
  133. importer.importAllPostsFromQiita = function(user) {
  134. /* Get posts from qiita */
  135. return new Promise(function(resolve, reject) {
  136. getPostsFromQiita()
  137. .then(function(res) {
  138. /* Import to GROWI */
  139. var basePage = '/';
  140. var ignoreNotFound = true;
  141. res.body.posts.forEach(function(post) {
  142. var pagePath = basePage + [post.category, post.name].filter(v => v).join('/')
  143. Page.findPage(pagePath, user, null, ignoreNotFound)
  144. .then(function(data) {
  145. if (data !== null) {
  146. reject('Page exists');
  147. }
  148. return Page.create(pagePath, post.body_md, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
  149. })
  150. .then(function(createdPage) {
  151. if (!createdPage) {
  152. reject('Page exists');
  153. }
  154. debug('Crete page: ' + createdPage);
  155. resolve();
  156. })
  157. .catch(function(err) {
  158. debug(err);
  159. reject(err);
  160. })
  161. });
  162. })
  163. .catch(function(err) {
  164. debug(err);
  165. reject(err);
  166. });
  167. });
  168. }
  169. /**
  170. * Import post data from esa to GROWI
  171. */
  172. importer.testConnectionToQiita = function() {
  173. return new Promise(function(resolve, reject) {
  174. getTeamsFromQiita()
  175. .then(function(res) {
  176. resolve();
  177. })
  178. .catch(function(err) {
  179. debug(err);
  180. reject(err);
  181. });
  182. });
  183. }
  184. initialize();
  185. importer.esaClient = esaClient;
  186. importer.qiitaClient = qiitaClient;
  187. return importer;
  188. };