3 const config = require('config')
4 const each = require('async/each')
5 const mkdirp = require('mkdirp')
6 const passwordGenerator = require('password-generator')
7 const path = require('path')
8 const series = require('async/series')
10 const checker = require('./checker')
11 const constants = require('./constants')
12 const db = require('./database')
13 const logger = require('../helpers/logger')
14 const peertubeCrypto = require('../helpers/peertube-crypto')
20 function installApplication (callback) {
22 function createDatabase (callbackAsync) {
23 db.sequelize.sync().asCallback(callbackAsync)
24 // db.sequelize.sync({ force: true }).asCallback(callbackAsync)
27 function createDirectories (callbackAsync) {
28 createDirectoriesIfNotExist(callbackAsync)
31 function createCertificates (callbackAsync) {
32 peertubeCrypto.createCertsIfNotExist(callbackAsync)
35 function createOAuthClient (callbackAsync) {
36 createOAuthClientIfNotExist(callbackAsync)
39 function createOAuthUser (callbackAsync) {
40 createOAuthAdminIfNotExist(callbackAsync)
45 // ---------------------------------------------------------------------------
47 module.exports = installer
49 // ---------------------------------------------------------------------------
51 function createDirectoriesIfNotExist (callback) {
52 const storages = config.get('storage')
54 each(Object.keys(storages), function (key, callbackEach) {
55 const dir = storages[key]
56 mkdirp(path.join(__dirname, '..', '..', dir), callbackEach)
60 function createOAuthClientIfNotExist (callback) {
61 checker.clientsExist(function (err, exist) {
62 if (err) return callback(err)
64 // Nothing to do, clients already exist
65 if (exist === true) return callback(null)
67 logger.info('Creating a default OAuth Client.')
69 const id = passwordGenerator(32, false, /[a-z0-9]/)
70 const secret = passwordGenerator(32, false, /[a-zA-Z0-9]/)
71 const client = db.OAuthClient.build({
74 grants: [ 'password', 'refresh_token' ]
77 client.save().asCallback(function (err, createdClient) {
78 if (err) return callback(err)
80 logger.info('Client id: ' + createdClient.clientId)
81 logger.info('Client secret: ' + createdClient.clientSecret)
88 function createOAuthAdminIfNotExist (callback) {
89 checker.usersExist(function (err, exist) {
90 if (err) return callback(err)
92 // Nothing to do, users already exist
93 if (exist === true) return callback(null)
95 logger.info('Creating the administrator.')
97 const username = 'root'
98 const role = constants.USER_ROLES.ADMIN
101 // Do not generate a random password for tests
102 if (process.env.NODE_ENV === 'test') {
105 if (process.env.NODE_APP_INSTANCE) {
106 password += process.env.NODE_APP_INSTANCE
109 password = passwordGenerator(8, true)
112 const user = db.User.build({
118 user.save().asCallback(function (err, createdUser) {
119 if (err) return callback(err)
121 logger.info('Username: ' + username)
122 logger.info('User password: ' + password)
124 logger.info('Creating Application table.')
125 db.Application.create({ migrationVersion: constants.LAST_MIGRATION_VERSION }).asCallback(callback)