diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/initializers/checker.js | 31 | ||||
-rw-r--r-- | server/initializers/installer.js | 94 | ||||
-rw-r--r-- | server/models/users.js | 10 |
3 files changed, 121 insertions, 14 deletions
diff --git a/server/initializers/checker.js b/server/initializers/checker.js index a21e54982..cb62fabf4 100644 --- a/server/initializers/checker.js +++ b/server/initializers/checker.js | |||
@@ -1,12 +1,13 @@ | |||
1 | 'use strict' | 1 | 'use strict' |
2 | 2 | ||
3 | const config = require('config') | 3 | const config = require('config') |
4 | const mkdirp = require('mkdirp') | 4 | |
5 | const path = require('path') | 5 | const Users = require('../models/users') |
6 | 6 | ||
7 | const checker = { | 7 | const checker = { |
8 | checkConfig: checkConfig, | 8 | checkConfig: checkConfig, |
9 | createDirectoriesIfNotExist: createDirectoriesIfNotExist | 9 | clientsExist: clientsExist, |
10 | usersExist: usersExist | ||
10 | } | 11 | } |
11 | 12 | ||
12 | // Check the config files | 13 | // Check the config files |
@@ -27,18 +28,20 @@ function checkConfig () { | |||
27 | return miss | 28 | return miss |
28 | } | 29 | } |
29 | 30 | ||
30 | // Create directories for the storage if it doesn't exist | 31 | function clientsExist (callback) { |
31 | function createDirectoriesIfNotExist () { | 32 | Users.getClients(function (err, clients) { |
32 | const storages = config.get('storage') | 33 | if (err) return callback(err) |
33 | 34 | ||
34 | for (const key of Object.keys(storages)) { | 35 | return callback(null, clients.length !== 0) |
35 | const dir = storages[key] | 36 | }) |
36 | try { | 37 | } |
37 | mkdirp.sync(path.join(__dirname, '..', '..', dir)) | 38 | |
38 | } catch (error) { | 39 | function usersExist (callback) { |
39 | throw new Error('Cannot create ' + path + ':' + error) | 40 | Users.getUsers(function (err, users) { |
40 | } | 41 | if (err) return callback(err) |
41 | } | 42 | |
43 | return callback(null, users.length !== 0) | ||
44 | }) | ||
42 | } | 45 | } |
43 | 46 | ||
44 | // --------------------------------------------------------------------------- | 47 | // --------------------------------------------------------------------------- |
diff --git a/server/initializers/installer.js b/server/initializers/installer.js new file mode 100644 index 000000000..750eb2c59 --- /dev/null +++ b/server/initializers/installer.js | |||
@@ -0,0 +1,94 @@ | |||
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 password = 'megustalabanana' | ||
61 | Users.createClient(password, [ 'password' ], function (err, id) { | ||
62 | if (err) return callback(err) | ||
63 | |||
64 | logger.info('Client id: ' + id) | ||
65 | logger.info('Client password: ' + password) | ||
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 | } | ||
diff --git a/server/models/users.js b/server/models/users.js index 355d991bd..367c206ab 100644 --- a/server/models/users.js +++ b/server/models/users.js | |||
@@ -34,8 +34,10 @@ const Users = { | |||
34 | createUser: createUser, | 34 | createUser: createUser, |
35 | getAccessToken: getAccessToken, | 35 | getAccessToken: getAccessToken, |
36 | getClient: getClient, | 36 | getClient: getClient, |
37 | getClients: getClients, | ||
37 | getRefreshToken: getRefreshToken, | 38 | getRefreshToken: getRefreshToken, |
38 | getUser: getUser, | 39 | getUser: getUser, |
40 | getUsers: getUsers, | ||
39 | saveToken: saveToken | 41 | saveToken: saveToken |
40 | } | 42 | } |
41 | 43 | ||
@@ -70,6 +72,10 @@ function getClient (clientId, clientSecret) { | |||
70 | return OAuthClientsDB.findOne({ _id: mongo_id, clientSecret: clientSecret }) | 72 | return OAuthClientsDB.findOne({ _id: mongo_id, clientSecret: clientSecret }) |
71 | } | 73 | } |
72 | 74 | ||
75 | function getClients (callback) { | ||
76 | return OAuthClientsDB.find(callback) | ||
77 | } | ||
78 | |||
73 | function getRefreshToken (refreshToken) { | 79 | function getRefreshToken (refreshToken) { |
74 | logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').') | 80 | logger.debug('Getting RefreshToken (refreshToken: ' + refreshToken + ').') |
75 | 81 | ||
@@ -81,6 +87,10 @@ function getUser (username, password) { | |||
81 | return UsersDB.findOne({ username: username, password: password }) | 87 | return UsersDB.findOne({ username: username, password: password }) |
82 | } | 88 | } |
83 | 89 | ||
90 | function getUsers (callback) { | ||
91 | return UsersDB.find(callback) | ||
92 | } | ||
93 | |||
84 | function saveToken (token, client, user) { | 94 | function saveToken (token, client, user) { |
85 | logger.debug('Saving token for client ' + client.id + ' and user ' + user.id + '.') | 95 | logger.debug('Saving token for client ' + client.id + ' and user ' + user.id + '.') |
86 | 96 | ||