You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.8 KiB

  1. /* global wiki */
  2. const Promise = require('bluebird')
  3. // const pm2 = Promise.promisifyAll(require('pm2'))
  4. const _ = require('lodash')
  5. const cfgHelper = require('../helpers/config')
  6. module.exports = {
  7. /**
  8. * Upgrade from Wiki.js 1.x - MongoDB database
  9. *
  10. * @param {Object} opts Options object
  11. */
  12. async upgradeFromMongo (opts) {
  13. wiki.telemetry.sendEvent('setup', 'upgradeFromMongo')
  14. wiki.logger.info('Upgrading from MongoDB...')
  15. let mongo = require('mongodb').MongoClient
  16. let parsedMongoConStr = cfgHelper.parseConfigValue(opts.mongoCnStr)
  17. return new Promise((resolve, reject) => {
  18. // Connect to MongoDB
  19. mongo.connect(parsedMongoConStr, {
  20. autoReconnect: false,
  21. reconnectTries: 2,
  22. reconnectInterval: 1000,
  23. connectTimeoutMS: 5000,
  24. socketTimeoutMS: 5000
  25. }, async (err, db) => {
  26. try {
  27. if (err !== null) { throw err }
  28. let users = db.collection('users')
  29. // Check if users table is populated
  30. let userCount = await users.count()
  31. if (userCount < 2) {
  32. throw new Error('MongoDB Upgrade: Users table is empty!')
  33. }
  34. // Import all users
  35. let userData = await users.find({
  36. email: {
  37. $not: 'guest'
  38. }
  39. }).toArray()
  40. await wiki.db.User.bulkCreate(_.map(userData, usr => {
  41. return {
  42. email: usr.email,
  43. name: usr.name || 'Imported User',
  44. password: usr.password || '',
  45. provider: usr.provider || 'local',
  46. providerId: usr.providerId || '',
  47. role: 'user',
  48. createdAt: usr.createdAt
  49. }
  50. }))
  51. resolve(true)
  52. } catch (err) {
  53. reject(err)
  54. }
  55. db.close()
  56. })
  57. })
  58. }
  59. }