importer.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /**
  2. * importer
  3. */
  4. module.exports = crowi => {
  5. 'use strict';
  6. const debug = require('debug')('growi:lib:importer');
  7. const esa = require('esa-nodejs');
  8. const User = crowi.model('User');
  9. const config = crowi.getConfig();
  10. const createGrowiPages = require('./createGrowiPagesFromImports')(crowi);
  11. let importer = {};
  12. let esaClient = {};
  13. /**
  14. * Initialize importer
  15. */
  16. importer.initialize = () => {
  17. esaClient = esa({
  18. team: config.crowi['importer:esa:team_name'],
  19. accessToken: config.crowi['importer:esa:access_token'],
  20. });
  21. debug('esa client is initialized');
  22. };
  23. /**
  24. * Import page data from esa to GROWI
  25. */
  26. importer.importPagesFromEsa = user => {
  27. return new Promise(async(resolve, reject) => {
  28. const rawData = await getAllDataFromEsa();
  29. const data = convertEsaDataForGrowi(rawData, user);
  30. const result = await createGrowiPages(data, user);
  31. resolve(result);
  32. });
  33. };
  34. /**
  35. * Get posts from esa (Promise wrapper)
  36. */
  37. const getAllDataFromEsa = () => {
  38. return new Promise((resolve, reject) => {
  39. esaClient.api.posts((err, res) => {
  40. if (err) {
  41. debug(err);
  42. return reject(err);
  43. }
  44. resolve(res);
  45. });
  46. });
  47. };
  48. /**
  49. * Convert data into usable format for createGrowiPagesFromImports
  50. */
  51. const convertEsaDataForGrowi = (rawData, user) => {
  52. const basePage = '';
  53. const data = rawData.body.posts.map(post => {
  54. const category = post.category;
  55. const name = post.name;
  56. let path = '';
  57. if (category && name) {
  58. path = `${category}/${name}`;
  59. }
  60. else if (category) {
  61. path = category;
  62. }
  63. else if (name) {
  64. path = name;
  65. }
  66. return {
  67. path: `${basePage}/${path}`,
  68. body: post.body_md,
  69. user: user,
  70. };
  71. });
  72. return data;
  73. };
  74. /**
  75. * Import page data from esa to GROWI
  76. */
  77. importer.testConnectionToEsa = () => {
  78. return new Promise(async(resolve, reject) => {
  79. try {
  80. await getTeamNameFromEsa();
  81. resolve();
  82. }
  83. catch (err) {
  84. debug(err);
  85. reject(err);
  86. }
  87. });
  88. };
  89. /**
  90. * Get teams from esa (Promise wrapper)
  91. */
  92. const getTeamNameFromEsa = () => {
  93. return new Promise((resolve, reject) => {
  94. esaClient.api.team((err, res) => {
  95. if (err) {
  96. debug(err);
  97. return reject(err);
  98. }
  99. resolve(res);
  100. });
  101. });
  102. };
  103. importer.initialize();
  104. return importer;
  105. };