system.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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.logger.info('Upgrading from MongoDB...')
  35. let mongo = require('mongodb').MongoClient
  36. let parsedMongoConStr = cfgHelper.parseConfigValue(opts.mongoCnStr)
  37. return new Promise((resolve, reject) => {
  38. // Connect to MongoDB
  39. mongo.connect(parsedMongoConStr, {
  40. autoReconnect: false,
  41. reconnectTries: 2,
  42. reconnectInterval: 1000,
  43. connectTimeoutMS: 5000,
  44. socketTimeoutMS: 5000
  45. }, async (err, db) => {
  46. try {
  47. if (err !== null) { throw err }
  48. let users = db.collection('users')
  49. // Check if users table is populated
  50. let userCount = await users.count()
  51. if (userCount < 2) {
  52. throw new Error('MongoDB Upgrade: Users table is empty!')
  53. }
  54. // Import all users
  55. let userData = await users.find({
  56. email: {
  57. $not: 'guest'
  58. }
  59. }).toArray()
  60. await WIKI.models.User.bulkCreate(_.map(userData, usr => {
  61. return {
  62. email: usr.email,
  63. name: usr.name || 'Imported User',
  64. password: usr.password || '',
  65. provider: usr.provider || 'local',
  66. providerId: usr.providerId || '',
  67. role: 'user',
  68. createdAt: usr.createdAt
  69. }
  70. }))
  71. resolve(true)
  72. } catch (err) {
  73. reject(err)
  74. }
  75. db.close()
  76. })
  77. })
  78. }
  79. }