]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/initializers/installer.js
Update migrations code
[github/Chocobozzz/PeerTube.git] / server / initializers / installer.js
index 750eb2c5927d3072adf1adf123e3aabaa182b829..d5382364ed77d4ccc47c8624232a0ae53af56ebd 100644 (file)
@@ -1,35 +1,45 @@
 'use strict'
 
-const async = require('async')
 const config = require('config')
+const each = require('async/each')
 const mkdirp = require('mkdirp')
+const passwordGenerator = require('password-generator')
 const path = require('path')
+const series = require('async/series')
 
 const checker = require('./checker')
+const constants = require('./constants')
+const db = require('./database')
 const logger = require('../helpers/logger')
-const peertubeCrypto = require('../helpers/peertubeCrypto')
-const Users = require('../models/users')
+const peertubeCrypto = require('../helpers/peertube-crypto')
 
 const installer = {
-  installApplication: installApplication
+  installApplication
 }
 
 function installApplication (callback) {
-  // Creates directories
-  createDirectoriesIfNotExist(function (err) {
-    if (err) return callback(err)
-
-    // ----------- Create the certificates if they don't already exist -----------
-    peertubeCrypto.createCertsIfNotExist(function (err) {
-      if (err) return callback(err)
-
-      createOAuthClientIfNotExist(function (err) {
-        if (err) return callback(err)
-
-        createOAuthUserIfNotExist(callback)
-      })
-    })
-  })
+  series([
+    function createDatabase (callbackAsync) {
+      db.sequelize.sync().asCallback(callbackAsync)
+      // db.sequelize.sync({ force: true }).asCallback(callbackAsync)
+    },
+
+    function createDirectories (callbackAsync) {
+      createDirectoriesIfNotExist(callbackAsync)
+    },
+
+    function createCertificates (callbackAsync) {
+      peertubeCrypto.createCertsIfNotExist(callbackAsync)
+    },
+
+    function createOAuthClient (callbackAsync) {
+      createOAuthClientIfNotExist(callbackAsync)
+    },
+
+    function createOAuthUser (callbackAsync) {
+      createOAuthAdminIfNotExist(callbackAsync)
+    }
+  ], callback)
 }
 
 // ---------------------------------------------------------------------------
@@ -41,7 +51,7 @@ module.exports = installer
 function createDirectoriesIfNotExist (callback) {
   const storages = config.get('storage')
 
-  async.each(Object.keys(storages), function (key, callbackEach) {
+  each(Object.keys(storages), function (key, callbackEach) {
     const dir = storages[key]
     mkdirp(path.join(__dirname, '..', '..', dir), callbackEach)
   }, callback)
@@ -56,20 +66,26 @@ function createOAuthClientIfNotExist (callback) {
 
     logger.info('Creating a default OAuth Client.')
 
-    // TODO: generate password
-    const password = 'megustalabanana'
-    Users.createClient(password, [ 'password' ], function (err, id) {
+    const id = passwordGenerator(32, false, /[a-z0-9]/)
+    const secret = passwordGenerator(32, false, /[a-zA-Z0-9]/)
+    const client = db.OAuthClient.build({
+      clientId: id,
+      clientSecret: secret,
+      grants: [ 'password', 'refresh_token' ]
+    })
+
+    client.save().asCallback(function (err, createdClient) {
       if (err) return callback(err)
 
-      logger.info('Client id: ' + id)
-      logger.info('Client password: ' + password)
+      logger.info('Client id: ' + createdClient.clientId)
+      logger.info('Client secret: ' + createdClient.clientSecret)
 
       return callback(null)
     })
   })
 }
 
-function createOAuthUserIfNotExist (callback) {
+function createOAuthAdminIfNotExist (callback) {
   checker.usersExist(function (err, exist) {
     if (err) return callback(err)
 
@@ -78,17 +94,35 @@ function createOAuthUserIfNotExist (callback) {
 
     logger.info('Creating the administrator.')
 
-    // TODO: generate password
-    const username = 'admin'
-    const password = 'nomegustalabanana'
+    const username = 'root'
+    const role = constants.USER_ROLES.ADMIN
+    let password = ''
+
+    // Do not generate a random password for tests
+    if (process.env.NODE_ENV === 'test') {
+      password = 'test'
+
+      if (process.env.NODE_APP_INSTANCE) {
+        password += process.env.NODE_APP_INSTANCE
+      }
+    } else {
+      password = passwordGenerator(8, true)
+    }
+
+    const user = db.User.build({
+      username,
+      password,
+      role
+    })
 
-    Users.createUser(username, password, function (err) {
+    user.save().asCallback(function (err, createdUser) {
       if (err) return callback(err)
 
       logger.info('Username: ' + username)
       logger.info('User password: ' + password)
 
-      return callback(null)
+      logger.info('Creating Application table.')
+      db.Application.create({ migrationVersion: constants.LAST_MIGRATION_VERSION }).asCallback(callback)
     })
   })
 }