importer.js 5.3 KB

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