system.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. const _ = require('lodash')
  2. const cfgHelper = require('../helpers/config')
  3. const Promise = require('bluebird')
  4. const fs = require('fs-extra')
  5. const path = require('path')
  6. /* global WIKI */
  7. module.exports = {
  8. updates: {
  9. channel: 'BETA',
  10. version: WIKI.version,
  11. releaseDate: WIKI.releaseDate,
  12. minimumVersionRequired: '2.0.0-beta.0',
  13. minimumNodeRequired: '10.12.0'
  14. },
  15. init() {
  16. // Listen for updates events
  17. WIKI.events.on('updates', (infoRaw) => {
  18. try {
  19. this.updates = JSON.parse(infoRaw)
  20. } catch (err) {
  21. WIKI.logger.warn('Failed to parse updates info.')
  22. }
  23. })
  24. // Clear content cache
  25. fs.emptyDir(path.join(WIKI.ROOTPATH, 'data/cache'))
  26. return this
  27. },
  28. /**
  29. * Upgrade from WIKI.js 1.x - MongoDB database
  30. *
  31. * @param {Object} opts Options object
  32. */
  33. async upgradeFromMongo (opts) {
  34. WIKI.telemetry.sendEvent('setup', 'upgradeFromMongo')
  35. WIKI.logger.info('Upgrading from MongoDB...')
  36. let mongo = require('mongodb').MongoClient
  37. let parsedMongoConStr = cfgHelper.parseConfigValue(opts.mongoCnStr)
  38. return new Promise((resolve, reject) => {
  39. // Connect to MongoDB
  40. mongo.connect(parsedMongoConStr, {
  41. autoReconnect: false,
  42. reconnectTries: 2,
  43. reconnectInterval: 1000,
  44. connectTimeoutMS: 5000,
  45. socketTimeoutMS: 5000
  46. }, async (err, db) => {
  47. try {
  48. if (err !== null) { throw err }
  49. let users = db.collection('users')
  50. // Check if users table is populated
  51. let userCount = await users.count()
  52. if (userCount < 2) {
  53. throw new Error('MongoDB Upgrade: Users table is empty!')
  54. }
  55. // Import all users
  56. let userData = await users.find({
  57. email: {
  58. $not: 'guest'
  59. }
  60. }).toArray()
  61. await WIKI.models.User.bulkCreate(_.map(userData, usr => {
  62. return {
  63. email: usr.email,
  64. name: usr.name || 'Imported User',
  65. password: usr.password || '',
  66. provider: usr.provider || 'local',
  67. providerId: usr.providerId || '',
  68. role: 'user',
  69. createdAt: usr.createdAt
  70. }
  71. }))
  72. resolve(true)
  73. } catch (err) {
  74. reject(err)
  75. }
  76. db.close()
  77. })
  78. })
  79. }
  80. }