]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/initializers/installer.js
reqValidators --> validators
[github/Chocobozzz/PeerTube.git] / server / initializers / installer.js
CommitLineData
37dc07b2
C
1'use strict'
2
3const async = require('async')
4const config = require('config')
5const mkdirp = require('mkdirp')
69b0a27c 6const mongoose = require('mongoose')
bb1e6d0c 7const passwordGenerator = require('password-generator')
37dc07b2
C
8const path = require('path')
9
10const checker = require('./checker')
11const logger = require('../helpers/logger')
12const peertubeCrypto = require('../helpers/peertubeCrypto')
69b0a27c
C
13
14const Client = mongoose.model('OAuthClient')
15const User = mongoose.model('User')
37dc07b2
C
16
17const installer = {
18 installApplication: installApplication
19}
20
21function installApplication (callback) {
cefc718d
C
22 async.series([
23 function createDirectories (callbackAsync) {
24 createDirectoriesIfNotExist(callbackAsync)
25 },
26
27 function createCertificates (callbackAsync) {
28 peertubeCrypto.createCertsIfNotExist(callbackAsync)
29 },
30
31 function createOAuthClient (callbackAsync) {
32 createOAuthClientIfNotExist(callbackAsync)
33 },
34
35 function createOAuthUser (callbackAsync) {
36 createOAuthUserIfNotExist(callbackAsync)
37 }
38 ], callback)
37dc07b2
C
39}
40
41// ---------------------------------------------------------------------------
42
43module.exports = installer
44
45// ---------------------------------------------------------------------------
46
47function createDirectoriesIfNotExist (callback) {
48 const storages = config.get('storage')
49
50 async.each(Object.keys(storages), function (key, callbackEach) {
51 const dir = storages[key]
52 mkdirp(path.join(__dirname, '..', '..', dir), callbackEach)
53 }, callback)
54}
55
56function createOAuthClientIfNotExist (callback) {
57 checker.clientsExist(function (err, exist) {
58 if (err) return callback(err)
59
60 // Nothing to do, clients already exist
61 if (exist === true) return callback(null)
62
63 logger.info('Creating a default OAuth Client.')
64
bb1e6d0c 65 const secret = passwordGenerator(32, false)
69b0a27c
C
66 const client = new Client({
67 clientSecret: secret,
68 grants: [ 'password' ]
69 })
70
71 client.save(function (err, createdClient) {
37dc07b2
C
72 if (err) return callback(err)
73
69b0a27c
C
74 logger.info('Client id: ' + createdClient._id)
75 logger.info('Client secret: ' + createdClient.clientSecret)
37dc07b2
C
76
77 return callback(null)
78 })
79 })
80}
81
82function createOAuthUserIfNotExist (callback) {
83 checker.usersExist(function (err, exist) {
84 if (err) return callback(err)
85
86 // Nothing to do, users already exist
87 if (exist === true) return callback(null)
88
89 logger.info('Creating the administrator.')
90
bb1e6d0c 91 const username = 'root'
d14b3e37
C
92 let password = ''
93
94 // Do not generate a random password for tests
95 if (process.env.NODE_ENV === 'test') {
96 password = 'test'
97
98 if (process.env.NODE_APP_INSTANCE) {
99 password += process.env.NODE_APP_INSTANCE
100 }
101 } else {
102 password = passwordGenerator(8, true)
103 }
37dc07b2 104
69b0a27c
C
105 const user = new User({
106 username: username,
107 password: password
108 })
109
110 user.save(function (err, createdUser) {
37dc07b2
C
111 if (err) return callback(err)
112
69b0a27c
C
113 logger.info('Username: ' + createdUser.username)
114 logger.info('User password: ' + createdUser.password)
37dc07b2
C
115
116 return callback(null)
117 })
118 })
119}