3 const async = require('async')
4 const config = require('config')
5 const mkdirp = require('mkdirp')
6 const mongoose = require('mongoose')
7 const passwordGenerator = require('password-generator')
8 const path = require('path')
10 const checker = require('./checker')
11 const logger = require('../helpers/logger')
12 const peertubeCrypto = require('../helpers/peertubeCrypto')
14 const Client = mongoose.model('OAuthClient')
15 const User = mongoose.model('User')
18 installApplication: installApplication
21 function installApplication (callback) {
23 function createDirectories (callbackAsync) {
24 createDirectoriesIfNotExist(callbackAsync)
27 function createCertificates (callbackAsync) {
28 peertubeCrypto.createCertsIfNotExist(callbackAsync)
31 function createOAuthClient (callbackAsync) {
32 createOAuthClientIfNotExist(callbackAsync)
35 function createOAuthUser (callbackAsync) {
36 createOAuthUserIfNotExist(callbackAsync)
41 // ---------------------------------------------------------------------------
43 module.exports = installer
45 // ---------------------------------------------------------------------------
47 function createDirectoriesIfNotExist (callback) {
48 const storages = config.get('storage')
50 async.each(Object.keys(storages), function (key, callbackEach) {
51 const dir = storages[key]
52 mkdirp(path.join(__dirname, '..', '..', dir), callbackEach)
56 function createOAuthClientIfNotExist (callback) {
57 checker.clientsExist(function (err, exist) {
58 if (err) return callback(err)
60 // Nothing to do, clients already exist
61 if (exist === true) return callback(null)
63 logger.info('Creating a default OAuth Client.')
65 const secret = passwordGenerator(32, false)
66 const client = new Client({
68 grants: [ 'password' ]
71 client.save(function (err, createdClient) {
72 if (err) return callback(err)
74 logger.info('Client id: ' + createdClient._id)
75 logger.info('Client secret: ' + createdClient.clientSecret)
82 function createOAuthUserIfNotExist (callback) {
83 checker.usersExist(function (err, exist) {
84 if (err) return callback(err)
86 // Nothing to do, users already exist
87 if (exist === true) return callback(null)
89 logger.info('Creating the administrator.')
91 const username = 'root'
94 // Do not generate a random password for tests
95 if (process.env.NODE_ENV === 'test') {
98 if (process.env.NODE_APP_INSTANCE) {
99 password += process.env.NODE_APP_INSTANCE
102 password = passwordGenerator(8, true)
105 const user = new User({
110 user.save(function (err, createdUser) {
111 if (err) return callback(err)
113 logger.info('Username: ' + createdUser.username)
114 logger.info('User password: ' + createdUser.password)
116 return callback(null)