Use lodash v4
[oweals/peertube.git] / server / initializers / installer.js
1 'use strict'
2
3 const async = require('async')
4 const config = require('config')
5 const mkdirp = require('mkdirp')
6 const path = require('path')
7
8 const checker = require('./checker')
9 const logger = require('../helpers/logger')
10 const peertubeCrypto = require('../helpers/peertubeCrypto')
11 const Users = require('../models/users')
12
13 const installer = {
14   installApplication: installApplication
15 }
16
17 function installApplication (callback) {
18   // Creates directories
19   createDirectoriesIfNotExist(function (err) {
20     if (err) return callback(err)
21
22     // ----------- Create the certificates if they don't already exist -----------
23     peertubeCrypto.createCertsIfNotExist(function (err) {
24       if (err) return callback(err)
25
26       createOAuthClientIfNotExist(function (err) {
27         if (err) return callback(err)
28
29         createOAuthUserIfNotExist(callback)
30       })
31     })
32   })
33 }
34
35 // ---------------------------------------------------------------------------
36
37 module.exports = installer
38
39 // ---------------------------------------------------------------------------
40
41 function createDirectoriesIfNotExist (callback) {
42   const storages = config.get('storage')
43
44   async.each(Object.keys(storages), function (key, callbackEach) {
45     const dir = storages[key]
46     mkdirp(path.join(__dirname, '..', '..', dir), callbackEach)
47   }, callback)
48 }
49
50 function createOAuthClientIfNotExist (callback) {
51   checker.clientsExist(function (err, exist) {
52     if (err) return callback(err)
53
54     // Nothing to do, clients already exist
55     if (exist === true) return callback(null)
56
57     logger.info('Creating a default OAuth Client.')
58
59     // TODO: generate password
60     const secret = 'megustalabanana'
61     Users.createClient(secret, [ 'password' ], function (err, id) {
62       if (err) return callback(err)
63
64       logger.info('Client id: ' + id)
65       logger.info('Client secret: ' + secret)
66
67       return callback(null)
68     })
69   })
70 }
71
72 function createOAuthUserIfNotExist (callback) {
73   checker.usersExist(function (err, exist) {
74     if (err) return callback(err)
75
76     // Nothing to do, users already exist
77     if (exist === true) return callback(null)
78
79     logger.info('Creating the administrator.')
80
81     // TODO: generate password
82     const username = 'admin'
83     const password = 'nomegustalabanana'
84
85     Users.createUser(username, password, function (err) {
86       if (err) return callback(err)
87
88       logger.info('Username: ' + username)
89       logger.info('User password: ' + password)
90
91       return callback(null)
92     })
93   })
94 }