]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - middlewares/secure.js
99ac9cdaeeed43e092ef85e422f240de8537e942
5 var ursa
= require('ursa')
7 var logger
= require('../helpers/logger')
8 var Pods
= require('../models/pods')
9 var utils
= require('../helpers/utils')
11 var secureMiddleware
= {
12 decryptBody: decryptBody
15 function decryptBody (req
, res
, next
) {
16 var url
= req
.body
.signature
.url
17 Pods
.findByUrl(url
, function (err
, pod
) {
19 logger
.error('Cannot get signed url in decryptBody.', { error: err
})
20 return res
.sendStatus(500)
24 logger
.error('Unknown pod %s.', url
)
25 return res
.sendStatus(403)
28 logger
.debug('Decrypting body from %s.', url
)
30 var crt
= ursa
.createPublicKey(pod
.publicKey
)
31 var signature_ok
= crt
.hashAndVerify('sha256', new Buffer(req
.body
.signature
.url
).toString('hex'), req
.body
.signature
.signature
, 'hex')
33 if (signature_ok
=== true) {
34 var myKey
= ursa
.createPrivateKey(fs
.readFileSync(utils
.getCertDir() + 'peertube.key.pem'))
35 var decryptedKey
= myKey
.decrypt(req
.body
.key
, 'hex', 'utf8')
36 req
.body
.data
= JSON
.parse(utils
.symetricDecrypt(req
.body
.data
, decryptedKey
))
39 logger
.error('Signature is not okay in decryptBody for %s.', req
.body
.signature
.url
)
40 return res
.sendStatus(403)
47 // ---------------------------------------------------------------------------
49 module
.exports
= secureMiddleware