3 const config = require('config')
4 const each = require('async/each')
5 const mkdirp = require('mkdirp')
6 const mongoose = require('mongoose')
7 const passwordGenerator = require('password-generator')
8 const path = require('path')
9 const series = require('async/series')
11 const checker = require('./checker')
12 const logger = require('../helpers/logger')
13 const peertubeCrypto = require('../helpers/peertube-crypto')
15 const Client = mongoose.model('OAuthClient')
16 const User = mongoose.model('User')
19 installApplication: installApplication
22 function installApplication (callback) {
24 function createDirectories (callbackAsync) {
25 createDirectoriesIfNotExist(callbackAsync)
28 function createCertificates (callbackAsync) {
29 peertubeCrypto.createCertsIfNotExist(callbackAsync)
32 function createOAuthClient (callbackAsync) {
33 createOAuthClientIfNotExist(callbackAsync)
36 function createOAuthUser (callbackAsync) {
37 createOAuthUserIfNotExist(callbackAsync)
42 // ---------------------------------------------------------------------------
44 module.exports = installer
46 // ---------------------------------------------------------------------------
48 function createDirectoriesIfNotExist (callback) {
49 const storages = config.get('storage')
51 each(Object.keys(storages), function (key, callbackEach) {
52 const dir = storages[key]
53 mkdirp(path.join(__dirname, '..', '..', dir), callbackEach)
57 function createOAuthClientIfNotExist (callback) {
58 checker.clientsExist(function (err, exist) {
59 if (err) return callback(err)
61 // Nothing to do, clients already exist
62 if (exist === true) return callback(null)
64 logger.info('Creating a default OAuth Client.')
66 const secret = passwordGenerator(32, false)
67 const client = new Client({
69 grants: [ 'password', 'refresh_token' ]
72 client.save(function (err, createdClient) {
73 if (err) return callback(err)
75 logger.info('Client id: ' + createdClient._id)
76 logger.info('Client secret: ' + createdClient.clientSecret)
83 function createOAuthUserIfNotExist (callback) {
84 checker.usersExist(function (err, exist) {
85 if (err) return callback(err)
87 // Nothing to do, users already exist
88 if (exist === true) return callback(null)
90 logger.info('Creating the administrator.')
92 const username = 'root'
95 // Do not generate a random password for tests
96 if (process.env.NODE_ENV === 'test') {
99 if (process.env.NODE_APP_INSTANCE) {
100 password += process.env.NODE_APP_INSTANCE
103 password = passwordGenerator(8, true)
106 const user = new User({
111 user.save(function (err, createdUser) {
112 if (err) return callback(err)
114 logger.info('Username: ' + createdUser.username)
115 logger.info('User password: ' + createdUser.password)
117 return callback(null)