]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - middlewares/misc.js
4 var ursa
= require('ursa')
7 var logger
= require('../helpers/logger')
8 var utils
= require('../helpers/utils')
9 var PodsDB
= require('../initializers/database').PodsDB
13 misc
.cache = function (cache
) {
14 return function (req
, res
, next
) {
15 // If we want explicitly a cache
16 // Or if we don't specify if we want a cache or no and we are in production
17 if (cache
=== true || (cache
!== false && process
.env
.NODE_ENV
=== 'production')) {
18 res
.setHeader('Cache-Control', 'public')
20 res
.setHeader('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate')
27 misc
.decryptBody = function (req
, res
, next
) {
28 PodsDB
.findOne({ url: req
.body
.signature
.url
}, function (err
, pod
) {
30 logger
.error('Cannot get signed url in decryptBody.', { error: err
})
31 return res
.sendStatus(500)
35 logger
.error('Unknown pod %s.', req
.body
.signature
.url
)
36 return res
.sendStatus(403)
39 logger
.debug('Decrypting body from %s.', req
.body
.signature
.url
)
41 var crt
= ursa
.createPublicKey(pod
.publicKey
)
42 var signature_ok
= crt
.hashAndVerify('sha256', new Buffer(req
.body
.signature
.url
).toString('hex'), req
.body
.signature
.signature
, 'hex')
44 if (signature_ok
=== true) {
45 var myKey
= ursa
.createPrivateKey(fs
.readFileSync(utils
.certDir
+ 'peertube.key.pem'))
46 var decryptedKey
= myKey
.decrypt(req
.body
.key
, 'hex', 'utf8')
47 req
.body
.data
= JSON
.parse(utils
.symetricDecrypt(req
.body
.data
, decryptedKey
))
50 logger
.error('Signature is not okay in decryptBody for %s.', req
.body
.signature
.url
)
51 return res
.sendStatus(403)