2016-03-21 16:11:26 -04:00
|
|
|
'use strict'
|
|
|
|
|
|
|
|
const async = require('async')
|
|
|
|
const config = require('config')
|
|
|
|
const mkdirp = require('mkdirp')
|
2016-04-19 16:29:36 -04:00
|
|
|
const passwordGenerator = require('password-generator')
|
2016-03-21 16:11:26 -04:00
|
|
|
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.')
|
|
|
|
|
2016-04-19 16:29:36 -04:00
|
|
|
const secret = passwordGenerator(32, false)
|
2016-04-14 16:06:11 -04:00
|
|
|
Users.createClient(secret, [ 'password' ], function (err, id) {
|
2016-03-21 16:11:26 -04:00
|
|
|
if (err) return callback(err)
|
|
|
|
|
|
|
|
logger.info('Client id: ' + id)
|
2016-04-14 16:06:11 -04:00
|
|
|
logger.info('Client secret: ' + secret)
|
2016-03-21 16:11:26 -04:00
|
|
|
|
|
|
|
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.')
|
|
|
|
|
2016-04-19 16:29:36 -04:00
|
|
|
const username = 'root'
|
|
|
|
const password = passwordGenerator(8, true)
|
2016-03-21 16:11:26 -04:00
|
|
|
|
|
|
|
Users.createUser(username, password, function (err) {
|
|
|
|
if (err) return callback(err)
|
|
|
|
|
|
|
|
logger.info('Username: ' + username)
|
|
|
|
logger.info('User password: ' + password)
|
|
|
|
|
|
|
|
return callback(null)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|