Create an "installer" module that create defaults clients/users...
This commit is contained in:
parent
9457bf8807
commit
37dc07b292
4 changed files with 123 additions and 26 deletions
14
server.js
14
server.js
|
@ -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 () {
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
94
server/initializers/installer.js
Normal file
94
server/initializers/installer.js
Normal 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)
|
||||
})
|
||||
})
|
||||
}
|
|
@ -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 + '.')
|
||||
|
||||
|
|
Loading…
Reference in a new issue