X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmiddlewares%2Fsecure.js;h=b6e6d818b91995561b98f06df70459a6315e3360;hb=99fe265a5fc077cb66c322e7f3d191ff7110aea0;hp=58f824d14cbb4561f00d42c42d2c214e9640ea03;hpb=c4403b29ad4db097af528a7f04eea07e0ed320d0;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/middlewares/secure.js b/server/middlewares/secure.js index 58f824d14..b6e6d818b 100644 --- a/server/middlewares/secure.js +++ b/server/middlewares/secure.js @@ -1,58 +1,47 @@ 'use strict' +const db = require('../initializers/database') const logger = require('../helpers/logger') -const mongoose = require('mongoose') const peertubeCrypto = require('../helpers/peertube-crypto') -const Pod = mongoose.model('Pod') - const secureMiddleware = { - checkSignature, - decryptBody + checkSignature } function checkSignature (req, res, next) { - const url = req.body.signature.url - Pod.loadByUrl(url, function (err, pod) { + const host = req.body.signature.host + db.Pod.loadByHost(host, function (err, pod) { if (err) { - logger.error('Cannot get signed url in decryptBody.', { error: err }) + logger.error('Cannot get signed host in body.', { error: err }) return res.sendStatus(500) } if (pod === null) { - logger.error('Unknown pod %s.', url) + logger.error('Unknown pod %s.', host) return res.sendStatus(403) } - logger.debug('Decrypting body from %s.', url) - - const signatureOk = peertubeCrypto.checkSignature(pod.publicKey, url, req.body.signature.signature) + logger.debug('Checking signature from %s.', host) - if (signatureOk === true) { - return next() + let signatureShouldBe + if (req.body.data) { + signatureShouldBe = req.body.data + } else { + signatureShouldBe = host } - logger.error('Signature is not okay in decryptBody for %s.', req.body.signature.url) - return res.sendStatus(403) - }) -} + const signatureOk = peertubeCrypto.checkSignature(pod.publicKey, signatureShouldBe, req.body.signature.signature) -function decryptBody (req, res, next) { - peertubeCrypto.decrypt(req.body.key, req.body.data, function (err, decrypted) { - if (err) { - logger.error('Cannot decrypt data.', { error: err }) - return res.sendStatus(500) - } + if (signatureOk === true) { + res.locals.secure = { + pod + } - try { - req.body.data = JSON.parse(decrypted) - delete req.body.key - } catch (err) { - logger.error('Error in JSON.parse', { error: err }) - return res.sendStatus(500) + return next() } - next() + logger.error('Signature is not okay in body for %s.', req.body.signature.host) + return res.sendStatus(403) }) }