Create an "installer" module that create defaults clients/users...

This commit is contained in:
Chocobozzz 2016-03-21 21:11:26 +01:00
parent 9457bf8807
commit 37dc07b292
4 changed files with 123 additions and 26 deletions

View File

@ -21,15 +21,13 @@ if (miss.length !== 0) {
throw new Error('Miss some configurations keys : ' + miss)
}
checker.createDirectoriesIfNotExist()
// ----------- PeerTube modules -----------
var config = require('config')
var constants = require('./server/initializers/constants')
var customValidators = require('./server/helpers/customValidators')
var database = require('./server/initializers/database')
var installer = require('./server/initializers/installer')
var logger = require('./server/helpers/logger')
var peertubeCrypto = require('./server/helpers/peertubeCrypto')
var poolRequests = require('./server/lib/poolRequests')
var routes = require('./server/controllers')
var utils = require('./server/helpers/utils')
@ -119,17 +117,9 @@ app.use(function (err, req, res, next) {
res.sendStatus(err.status || 500)
})
// TODO: move into initializer
require('./server/models/users').createClient('coucou', [ 'password' ], function (err, id) {
installer.installApplication(function (err) {
if (err) throw err
logger.info('Client id: ' + id)
require('./server/models/users').createUser('floflo', 'coucou', function () {})
})
// ----------- Create the certificates if they don't already exist -----------
peertubeCrypto.createCertsIfNotExist(function (err) {
if (err) throw err
// Create/activate the webtorrent module
webtorrent.create(function () {
function cleanForExit () {

View File

@ -1,12 +1,13 @@
'use strict'
const config = require('config')
const mkdirp = require('mkdirp')
const path = require('path')
const Users = require('../models/users')
const checker = {
checkConfig: checkConfig,
createDirectoriesIfNotExist: createDirectoriesIfNotExist
clientsExist: clientsExist,
usersExist: usersExist
}
// Check the config files
@ -27,18 +28,20 @@ function checkConfig () {
return miss
}
// Create directories for the storage if it doesn't exist
function createDirectoriesIfNotExist () {
const storages = config.get('storage')
function clientsExist (callback) {
Users.getClients(function (err, clients) {
if (err) return callback(err)
for (const key of Object.keys(storages)) {
const dir = storages[key]
try {
mkdirp.sync(path.join(__dirname, '..', '..', dir))
} catch (error) {
throw new Error('Cannot create ' + path + ':' + error)
}
return callback(null, clients.length !== 0)
})
}
function usersExist (callback) {
Users.getUsers(function (err, users) {
if (err) return callback(err)
return callback(null, users.length !== 0)
})
}
// ---------------------------------------------------------------------------

View File

@ -0,0 +1,94 @@
'use strict'
const async = require('async')
const config = require('config')
const mkdirp = require('mkdirp')
const path = require('path')
const checker = require('./checker')
const logger = require('../helpers/logger')
const peertubeCrypto = require('../helpers/peertubeCrypto')
const Users = require('../models/users')
const installer = {
installApplication: installApplication
}
function installApplication (callback) {
// Creates directories
createDirectoriesIfNotExist(function (err) {
if (err) return callback(err)
// ----------- Create the certificates if they don't already exist -----------
peertubeCrypto.createCertsIfNotExist(function (err) {
if (err) return callback(err)
createOAuthClientIfNotExist(function (err) {
if (err) return callback(err)
createOAuthUserIfNotExist(callback)
})
})
})
}
// ---------------------------------------------------------------------------
module.exports = installer
// ---------------------------------------------------------------------------
function createDirectoriesIfNotExist (callback) {
const storages = config.get('storage')
async.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.')
// TODO: generate password
const password = 'megustalabanana'
Users.createClient(password, [ 'password' ], function (err, id) {
if (err) return callback(err)
logger.info('Client id: ' + id)
logger.info('Client password: ' + password)
return callback(null)
})
})
}
function createOAuthUserIfNotExist (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.')
// TODO: generate password
const username = 'admin'
const password = 'nomegustalabanana'
Users.createUser(username, password, function (err) {
if (err) return callback(err)
logger.info('Username: ' + username)
logger.info('User password: ' + password)
return callback(null)
})
})
}

View File

@ -34,8 +34,10 @@ const Users = {
createUser: createUser,
getAccessToken: getAccessToken,
getClient: getClient,
getClients: getClients,
getRefreshToken: getRefreshToken,
getUser: getUser,
getUsers: getUsers,
saveToken: saveToken
}
@ -70,6 +72,10 @@ function getClient (clientId, clientSecret) {
return OAuthClientsDB.findOne({ _id: mongo_id, clientSecret: clientSecret })
}
function getClients (callback) {
return OAuthClientsDB.find(callback)
}
function getRefreshToken (refreshToken) {
logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').')
@ -81,6 +87,10 @@ function getUser (username, password) {
return UsersDB.findOne({ username: username, password: password })
}
function getUsers (callback) {
return UsersDB.find(callback)
}
function saveToken (token, client, user) {
logger.debug('Saving token for client ' + client.id + ' and user ' + user.id + '.')