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')
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 () {
'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
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)
+ })
}
// ---------------------------------------------------------------------------
--- /dev/null
+'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)
+ })
+ })
+}
createUser: createUser,
getAccessToken: getAccessToken,
getClient: getClient,
+ getClients: getClients,
getRefreshToken: getRefreshToken,
getUser: getUser,
+ getUsers: getUsers,
saveToken: saveToken
}
return OAuthClientsDB.findOne({ _id: mongo_id, clientSecret: clientSecret })
}
+function getClients (callback) {
+ return OAuthClientsDB.find(callback)
+}
+
function getRefreshToken (refreshToken) {
logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').')
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 + '.')