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.

68 lines
1.8 KiB

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