Create an "installer" module that create defaults clients/users...
authorChocobozzz <florian.bigard@gmail.com>
Mon, 21 Mar 2016 20:11:26 +0000 (21:11 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Mon, 21 Mar 2016 20:11:26 +0000 (21:11 +0100)
server.js
server/initializers/checker.js
server/initializers/installer.js [new file with mode: 0644]
server/models/users.js

index f9925eb247c04afbbcecc6fe1ea5616cced3a69f..b748a024237e31b343c68cca0752bee00410b89f 100644 (file)
--- a/server.js
+++ b/server.js
@@ -21,15 +21,13 @@ if (miss.length !== 0) {
   throw new Error('Miss some configurations keys : ' + miss)
 }
 
-checker.createDirectoriesIfNotExist()
-
 // ----------- PeerTube modules -----------
 var config = require('config')
 var constants = require('./server/initializers/constants')
 var customValidators = require('./server/helpers/customValidators')
 var database = require('./server/initializers/database')
+var installer = require('./server/initializers/installer')
 var logger = require('./server/helpers/logger')
-var peertubeCrypto = require('./server/helpers/peertubeCrypto')
 var poolRequests = require('./server/lib/poolRequests')
 var routes = require('./server/controllers')
 var utils = require('./server/helpers/utils')
@@ -119,17 +117,9 @@ app.use(function (err, req, res, next) {
   res.sendStatus(err.status || 500)
 })
 
-// TODO: move into initializer
-require('./server/models/users').createClient('coucou', [ 'password' ], function (err, id) {
+installer.installApplication(function (err) {
   if (err) throw err
-  logger.info('Client id: ' + id)
-
-  require('./server/models/users').createUser('floflo', 'coucou', function () {})
-})
 
-// ----------- Create the certificates if they don't already exist -----------
-peertubeCrypto.createCertsIfNotExist(function (err) {
-  if (err) throw err
   // Create/activate the webtorrent module
   webtorrent.create(function () {
     function cleanForExit () {
index a21e54982fd606b38d33ca806fd69a3a6e2b808f..cb62fabf49b7fe155adf0cfc5386ecf957da8c8d 100644 (file)
@@ -1,12 +1,13 @@
 'use strict'
 
 const config = require('config')
-const mkdirp = require('mkdirp')
-const path = require('path')
+
+const Users = require('../models/users')
 
 const checker = {
   checkConfig: checkConfig,
-  createDirectoriesIfNotExist: createDirectoriesIfNotExist
+  clientsExist: clientsExist,
+  usersExist: usersExist
 }
 
 // Check the config files
@@ -27,18 +28,20 @@ function checkConfig () {
   return miss
 }
 
-// Create directories for the storage if it doesn't exist
-function createDirectoriesIfNotExist () {
-  const storages = config.get('storage')
+function clientsExist (callback) {
+  Users.getClients(function (err, clients) {
+    if (err) return callback(err)
 
-  for (const key of Object.keys(storages)) {
-    const dir = storages[key]
-    try {
-      mkdirp.sync(path.join(__dirname, '..', '..', dir))
-    } catch (error) {
-      throw new Error('Cannot create ' + path + ':' + error)
-    }
-  }
+    return callback(null, clients.length !== 0)
+  })
+}
+
+function usersExist (callback) {
+  Users.getUsers(function (err, users) {
+    if (err) return callback(err)
+
+    return callback(null, users.length !== 0)
+  })
 }
 
 // ---------------------------------------------------------------------------
diff --git a/server/initializers/installer.js b/server/initializers/installer.js
new file mode 100644 (file)
index 0000000..750eb2c
--- /dev/null
@@ -0,0 +1,94 @@
+'use strict'
+
+const async = require('async')
+const config = require('config')
+const mkdirp = require('mkdirp')
+const path = require('path')
+
+const checker = require('./checker')
+const logger = require('../helpers/logger')
+const peertubeCrypto = require('../helpers/peertubeCrypto')
+const Users = require('../models/users')
+
+const installer = {
+  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)
+      })
+    })
+  })
+}
+
+// ---------------------------------------------------------------------------
+
+module.exports = installer
+
+// ---------------------------------------------------------------------------
+
+function createDirectoriesIfNotExist (callback) {
+  const storages = config.get('storage')
+
+  async.each(Object.keys(storages), function (key, callbackEach) {
+    const dir = storages[key]
+    mkdirp(path.join(__dirname, '..', '..', dir), callbackEach)
+  }, callback)
+}
+
+function createOAuthClientIfNotExist (callback) {
+  checker.clientsExist(function (err, exist) {
+    if (err) return callback(err)
+
+    // Nothing to do, clients already exist
+    if (exist === true) return callback(null)
+
+    logger.info('Creating a default OAuth Client.')
+
+    // TODO: generate password
+    const password = 'megustalabanana'
+    Users.createClient(password, [ 'password' ], function (err, id) {
+      if (err) return callback(err)
+
+      logger.info('Client id: ' + id)
+      logger.info('Client password: ' + password)
+
+      return callback(null)
+    })
+  })
+}
+
+function createOAuthUserIfNotExist (callback) {
+  checker.usersExist(function (err, exist) {
+    if (err) return callback(err)
+
+    // Nothing to do, users already exist
+    if (exist === true) return callback(null)
+
+    logger.info('Creating the administrator.')
+
+    // TODO: generate password
+    const username = 'admin'
+    const password = 'nomegustalabanana'
+
+    Users.createUser(username, password, function (err) {
+      if (err) return callback(err)
+
+      logger.info('Username: ' + username)
+      logger.info('User password: ' + password)
+
+      return callback(null)
+    })
+  })
+}
index 355d991bdeb770d46e4935129ad3017bfd5b1f27..367c206abe359a2a7314863795b11768f8595fe3 100644 (file)
@@ -34,8 +34,10 @@ const Users = {
   createUser: createUser,
   getAccessToken: getAccessToken,
   getClient: getClient,
+  getClients: getClients,
   getRefreshToken: getRefreshToken,
   getUser: getUser,
+  getUsers: getUsers,
   saveToken: saveToken
 }
 
@@ -70,6 +72,10 @@ function getClient (clientId, clientSecret) {
   return OAuthClientsDB.findOne({ _id: mongo_id, clientSecret: clientSecret })
 }
 
+function getClients (callback) {
+  return OAuthClientsDB.find(callback)
+}
+
 function getRefreshToken (refreshToken) {
   logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').')
 
@@ -81,6 +87,10 @@ function getUser (username, password) {
   return UsersDB.findOne({ username: username, password: password })
 }
 
+function getUsers (callback) {
+  return UsersDB.find(callback)
+}
+
 function saveToken (token, client, user) {
   logger.debug('Saving token for client ' + client.id + ' and user ' + user.id + '.')