3 const async = require('async')
4 const config = require('config')
5 const mkdirp = require('mkdirp')
6 const passwordGenerator = require('password-generator')
7 const path = require('path')
9 const checker = require('./checker')
10 const logger = require('../helpers/logger')
11 const peertubeCrypto = require('../helpers/peertubeCrypto')
12 const Users = require('../models/users')
15 installApplication: installApplication
18 function installApplication (callback) {
20 function createDirectories (callbackAsync) {
21 createDirectoriesIfNotExist(callbackAsync)
24 function createCertificates (callbackAsync) {
25 peertubeCrypto.createCertsIfNotExist(callbackAsync)
28 function createOAuthClient (callbackAsync) {
29 createOAuthClientIfNotExist(callbackAsync)
32 function createOAuthUser (callbackAsync) {
33 createOAuthUserIfNotExist(callbackAsync)
38 // ---------------------------------------------------------------------------
40 module.exports = installer
42 // ---------------------------------------------------------------------------
44 function createDirectoriesIfNotExist (callback) {
45 const storages = config.get('storage')
47 async.each(Object.keys(storages), function (key, callbackEach) {
48 const dir = storages[key]
49 mkdirp(path.join(__dirname, '..', '..', dir), callbackEach)
53 function createOAuthClientIfNotExist (callback) {
54 checker.clientsExist(function (err, exist) {
55 if (err) return callback(err)
57 // Nothing to do, clients already exist
58 if (exist === true) return callback(null)
60 logger.info('Creating a default OAuth Client.')
62 const secret = passwordGenerator(32, false)
63 Users.createClient(secret, [ 'password' ], function (err, id) {
64 if (err) return callback(err)
66 logger.info('Client id: ' + id)
67 logger.info('Client secret: ' + secret)
74 function createOAuthUserIfNotExist (callback) {
75 checker.usersExist(function (err, exist) {
76 if (err) return callback(err)
78 // Nothing to do, users already exist
79 if (exist === true) return callback(null)
81 logger.info('Creating the administrator.')
83 const username = 'root'
84 const password = passwordGenerator(8, true)
86 Users.createUser(username, password, function (err) {
87 if (err) return callback(err)
89 logger.info('Username: ' + username)
90 logger.info('User password: ' + password)