aboutsummaryrefslogtreecommitdiffhomepage
path: root/helpers/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'helpers/utils.js')
-rw-r--r--helpers/utils.js111
1 files changed, 62 insertions, 49 deletions
diff --git a/helpers/utils.js b/helpers/utils.js
index 7cdb2600d..ec46631b1 100644
--- a/helpers/utils.js
+++ b/helpers/utils.js
@@ -13,47 +13,29 @@
13 var constants = require('../initializers/constants') 13 var constants = require('../initializers/constants')
14 var logger = require('./logger') 14 var logger = require('./logger')
15 15
16 var utils = {} 16 var certDir = __dirname + '/../' + config.get('storage.certs')
17
18 var http = config.get('webserver.https') ? 'https' : 'http' 17 var http = config.get('webserver.https') ? 'https' : 'http'
19 var host = config.get('webserver.host') 18 var host = config.get('webserver.host')
20 var port = config.get('webserver.port') 19 var port = config.get('webserver.port')
21 var algorithm = 'aes-256-ctr' 20 var algorithm = 'aes-256-ctr'
22 21
23 // ----------- Private functions ---------- 22 var utils = {
24 23 getCertDir: getCertDir,
25 function makeRetryRequest (params, from_url, to_pod, signature, callbackEach) { 24 certsExist: certsExist,
26 // Append the signature 25 cleanForExit: cleanForExit,
27 if (signature) { 26 createCerts: createCerts,
28 params.json.signature = { 27 createCertsIfNotExist: createCertsIfNotExist,
29 url: from_url, 28 generatePassword: generatePassword,
30 signature: signature 29 makeMultipleRetryRequest: makeMultipleRetryRequest,
31 } 30 symetricEncrypt: symetricEncrypt,
32 } 31 symetricDecrypt: symetricDecrypt
33
34 logger.debug('Make retry requests to %s.', to_pod.url)
35
36 replay(
37 request.post(params, function (err, response, body) {
38 callbackEach(err, response, body, params.url, to_pod)
39 }),
40 {
41 retries: constants.REQUEST_RETRIES,
42 factor: 3,
43 maxTimeout: Infinity,
44 errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ]
45 }
46 ).on('replay', function (replay) {
47 logger.info('Replaying request to %s. Request failed: %d %s. Replay number: #%d. Will retry in: %d ms.',
48 params.url, replay.error.code, replay.error.message, replay.number, replay.delay)
49 })
50 } 32 }
51 33
52 // ----------- Public attributes ---------- 34 function getCertDir () {
53 utils.certDir = __dirname + '/../' + config.get('storage.certs') 35 return certDir
36 }
54 37
55 // { path, data } 38 function makeMultipleRetryRequest (all_data, pods, callbackEach, callback) {
56 utils.makeMultipleRetryRequest = function (all_data, pods, callbackEach, callback) {
57 if (!callback) { 39 if (!callback) {
58 callback = callbackEach 40 callback = callbackEach
59 callbackEach = null 41 callbackEach = null
@@ -64,7 +46,7 @@
64 46
65 // Add signature if it is specified in the params 47 // Add signature if it is specified in the params
66 if (all_data.method === 'POST' && all_data.data && all_data.sign === true) { 48 if (all_data.method === 'POST' && all_data.data && all_data.sign === true) {
67 var myKey = ursa.createPrivateKey(fs.readFileSync(utils.certDir + 'peertube.key.pem')) 49 var myKey = ursa.createPrivateKey(fs.readFileSync(certDir + 'peertube.key.pem'))
68 signature = myKey.hashAndSign('sha256', url, 'utf8', 'hex') 50 signature = myKey.hashAndSign('sha256', url, 'utf8', 'hex')
69 } 51 }
70 52
@@ -93,7 +75,7 @@
93 75
94 // TODO: ES6 with let 76 // TODO: ES6 with let
95 ;(function (crt_copy, copy_params, copy_url, copy_pod, copy_signature) { 77 ;(function (crt_copy, copy_params, copy_url, copy_pod, copy_signature) {
96 utils.symetricEncrypt(JSON.stringify(all_data.data), function (err, dataEncrypted) { 78 symetricEncrypt(JSON.stringify(all_data.data), function (err, dataEncrypted) {
97 if (err) throw err 79 if (err) throw err
98 80
99 var passwordEncrypted = crt_copy.encrypt(dataEncrypted.password, 'utf8', 'hex') 81 var passwordEncrypted = crt_copy.encrypt(dataEncrypted.password, 'utf8', 'hex')
@@ -115,14 +97,14 @@
115 }, callback) 97 }, callback)
116 } 98 }
117 99
118 utils.certsExist = function (callback) { 100 function certsExist (callback) {
119 fs.exists(utils.certDir + 'peertube.key.pem', function (exists) { 101 fs.exists(certDir + 'peertube.key.pem', function (exists) {
120 return callback(exists) 102 return callback(exists)
121 }) 103 })
122 } 104 }
123 105
124 utils.createCerts = function (callback) { 106 function createCerts (callback) {
125 utils.certsExist(function (exist) { 107 certsExist(function (exist) {
126 if (exist === true) { 108 if (exist === true) {
127 var string = 'Certs already exist.' 109 var string = 'Certs already exist.'
128 logger.warning(string) 110 logger.warning(string)
@@ -130,7 +112,7 @@
130 } 112 }
131 113
132 logger.info('Generating a RSA key...') 114 logger.info('Generating a RSA key...')
133 openssl.exec('genrsa', { 'out': utils.certDir + 'peertube.key.pem', '2048': false }, function (err) { 115 openssl.exec('genrsa', { 'out': certDir + 'peertube.key.pem', '2048': false }, function (err) {
134 if (err) { 116 if (err) {
135 logger.error('Cannot create private key on this pod.', { error: err }) 117 logger.error('Cannot create private key on this pod.', { error: err })
136 return callback(err) 118 return callback(err)
@@ -138,7 +120,7 @@
138 logger.info('RSA key generated.') 120 logger.info('RSA key generated.')
139 121
140 logger.info('Manage public key...') 122 logger.info('Manage public key...')
141 openssl.exec('rsa', { 'in': utils.certDir + 'peertube.key.pem', 'pubout': true, 'out': utils.certDir + 'peertube.pub' }, function (err) { 123 openssl.exec('rsa', { 'in': certDir + 'peertube.key.pem', 'pubout': true, 'out': certDir + 'peertube.pub' }, function (err) {
142 if (err) { 124 if (err) {
143 logger.error('Cannot create public key on this pod .', { error: err }) 125 logger.error('Cannot create public key on this pod .', { error: err })
144 return callback(err) 126 return callback(err)
@@ -151,19 +133,19 @@
151 }) 133 })
152 } 134 }
153 135
154 utils.createCertsIfNotExist = function (callback) { 136 function createCertsIfNotExist (callback) {
155 utils.certsExist(function (exist) { 137 certsExist(function (exist) {
156 if (exist === true) { 138 if (exist === true) {
157 return callback(null) 139 return callback(null)
158 } 140 }
159 141
160 utils.createCerts(function (err) { 142 createCerts(function (err) {
161 return callback(err) 143 return callback(err)
162 }) 144 })
163 }) 145 })
164 } 146 }
165 147
166 utils.generatePassword = function (callback) { 148 function generatePassword (callback) {
167 crypto.randomBytes(32, function (err, buf) { 149 crypto.randomBytes(32, function (err, buf) {
168 if (err) { 150 if (err) {
169 return callback(err) 151 return callback(err)
@@ -173,8 +155,8 @@
173 }) 155 })
174 } 156 }
175 157
176 utils.symetricEncrypt = function (text, callback) { 158 function symetricEncrypt (text, callback) {
177 utils.generatePassword(function (err, password) { 159 generatePassword(function (err, password) {
178 if (err) { 160 if (err) {
179 return callback(err) 161 return callback(err)
180 } 162 }
@@ -186,17 +168,48 @@
186 }) 168 })
187 } 169 }
188 170
189 utils.symetricDecrypt = function (text, password) { 171 function symetricDecrypt (text, password) {
190 var decipher = crypto.createDecipher(algorithm, password) 172 var decipher = crypto.createDecipher(algorithm, password)
191 var dec = decipher.update(text, 'hex', 'utf8') 173 var dec = decipher.update(text, 'hex', 'utf8')
192 dec += decipher.final('utf8') 174 dec += decipher.final('utf8')
193 return dec 175 return dec
194 } 176 }
195 177
196 utils.cleanForExit = function (webtorrent_process) { 178 function cleanForExit (webtorrent_process) {
197 logger.info('Gracefully exiting') 179 logger.info('Gracefully exiting')
198 process.kill(-webtorrent_process.pid) 180 process.kill(-webtorrent_process.pid)
199 } 181 }
200 182
183 // ---------------------------------------------------------------------------
184
201 module.exports = utils 185 module.exports = utils
186
187 // ---------------------------------------------------------------------------
188
189 function makeRetryRequest (params, from_url, to_pod, signature, callbackEach) {
190 // Append the signature
191 if (signature) {
192 params.json.signature = {
193 url: from_url,
194 signature: signature
195 }
196 }
197
198 logger.debug('Make retry requests to %s.', to_pod.url)
199
200 replay(
201 request.post(params, function (err, response, body) {
202 callbackEach(err, response, body, params.url, to_pod)
203 }),
204 {
205 retries: constants.REQUEST_RETRIES,
206 factor: 3,
207 maxTimeout: Infinity,
208 errorCodes: [ 'EADDRINFO', 'ETIMEDOUT', 'ECONNRESET', 'ESOCKETTIMEDOUT', 'ENOTFOUND', 'ECONNREFUSED' ]
209 }
210 ).on('replay', function (replay) {
211 logger.info('Replaying request to %s. Request failed: %d %s. Replay number: #%d. Will retry in: %d ms.',
212 params.url, replay.error.code, replay.error.message, replay.number, replay.delay)
213 })
214 }
202})() 215})()