mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			127 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
| 'use strict'
 | |
| 
 | |
| const config = require('config')
 | |
| const each = require('async/each')
 | |
| const mkdirp = require('mkdirp')
 | |
| const mongoose = require('mongoose')
 | |
| const passwordGenerator = require('password-generator')
 | |
| const path = require('path')
 | |
| const series = require('async/series')
 | |
| 
 | |
| const checker = require('./checker')
 | |
| const constants = require('./constants')
 | |
| const logger = require('../helpers/logger')
 | |
| const peertubeCrypto = require('../helpers/peertube-crypto')
 | |
| 
 | |
| const Application = mongoose.model('Application')
 | |
| const Client = mongoose.model('OAuthClient')
 | |
| const User = mongoose.model('User')
 | |
| 
 | |
| const installer = {
 | |
|   installApplication
 | |
| }
 | |
| 
 | |
| function installApplication (callback) {
 | |
|   series([
 | |
|     function createDirectories (callbackAsync) {
 | |
|       createDirectoriesIfNotExist(callbackAsync)
 | |
|     },
 | |
| 
 | |
|     function createCertificates (callbackAsync) {
 | |
|       peertubeCrypto.createCertsIfNotExist(callbackAsync)
 | |
|     },
 | |
| 
 | |
|     function createOAuthClient (callbackAsync) {
 | |
|       createOAuthClientIfNotExist(callbackAsync)
 | |
|     },
 | |
| 
 | |
|     function createOAuthUser (callbackAsync) {
 | |
|       createOAuthAdminIfNotExist(callbackAsync)
 | |
|     }
 | |
|   ], callback)
 | |
| }
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| module.exports = installer
 | |
| 
 | |
| // ---------------------------------------------------------------------------
 | |
| 
 | |
| function createDirectoriesIfNotExist (callback) {
 | |
|   const storages = config.get('storage')
 | |
| 
 | |
|   each(Object.keys(storages), function (key, callbackEach) {
 | |
|     const dir = storages[key]
 | |
|     mkdirp(path.join(__dirname, '..', '..', dir), callbackEach)
 | |
|   }, callback)
 | |
| }
 | |
| 
 | |
| function createOAuthClientIfNotExist (callback) {
 | |
|   checker.clientsExist(function (err, exist) {
 | |
|     if (err) return callback(err)
 | |
| 
 | |
|     // Nothing to do, clients already exist
 | |
|     if (exist === true) return callback(null)
 | |
| 
 | |
|     logger.info('Creating a default OAuth Client.')
 | |
| 
 | |
|     const secret = passwordGenerator(32, false)
 | |
|     const client = new Client({
 | |
|       clientSecret: secret,
 | |
|       grants: [ 'password', 'refresh_token' ]
 | |
|     })
 | |
| 
 | |
|     client.save(function (err, createdClient) {
 | |
|       if (err) return callback(err)
 | |
| 
 | |
|       logger.info('Client id: ' + createdClient._id)
 | |
|       logger.info('Client secret: ' + createdClient.clientSecret)
 | |
| 
 | |
|       return callback(null)
 | |
|     })
 | |
|   })
 | |
| }
 | |
| 
 | |
| function createOAuthAdminIfNotExist (callback) {
 | |
|   checker.usersExist(function (err, exist) {
 | |
|     if (err) return callback(err)
 | |
| 
 | |
|     // Nothing to do, users already exist
 | |
|     if (exist === true) return callback(null)
 | |
| 
 | |
|     logger.info('Creating the administrator.')
 | |
| 
 | |
|     const username = 'root'
 | |
|     const role = constants.USER_ROLES.ADMIN
 | |
|     let password = ''
 | |
| 
 | |
|     // Do not generate a random password for tests
 | |
|     if (process.env.NODE_ENV === 'test') {
 | |
|       password = 'test'
 | |
| 
 | |
|       if (process.env.NODE_APP_INSTANCE) {
 | |
|         password += process.env.NODE_APP_INSTANCE
 | |
|       }
 | |
|     } else {
 | |
|       password = passwordGenerator(8, true)
 | |
|     }
 | |
| 
 | |
|     const user = new User({
 | |
|       username,
 | |
|       password,
 | |
|       role
 | |
|     })
 | |
| 
 | |
|     user.save(function (err, createdUser) {
 | |
|       if (err) return callback(err)
 | |
| 
 | |
|       logger.info('Username: ' + username)
 | |
|       logger.info('User password: ' + password)
 | |
| 
 | |
|       logger.info('Creating Application collection.')
 | |
|       const application = new Application({ mongoSchemaVersion: constants.LAST_MONGO_SCHEMA_VERSION })
 | |
|       application.save(callback)
 | |
|     })
 | |
|   })
 | |
| }
 |