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