X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmiddlewares%2Fsecure.ts;h=0fa9ee9d2822932e50561f5a9eb130d9212fd61e;hb=18c8e945089bff49d2c617c411c8a8f4575989ad;hp=ee8545028085894341a7d975c5f1de2d24349fdc;hpb=65fcc3119c334b75dd13bcfdebf186afdc580a8f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/middlewares/secure.ts b/server/middlewares/secure.ts index ee8545028..0fa9ee9d2 100644 --- a/server/middlewares/secure.ts +++ b/server/middlewares/secure.ts @@ -1,44 +1,49 @@ -const db = require('../initializers/database') -const logger = require('../helpers/logger') -const peertubeCrypto = require('../helpers/peertube-crypto') +import 'express-validator' +import * as express from 'express' -function checkSignature (req, res, next) { +import { database as db } from '../initializers' +import { + logger, + checkSignature as peertubeCryptoCheckSignature +} from '../helpers' + +function checkSignature (req: express.Request, res: express.Response, next: express.NextFunction) { const host = req.body.signature.host - db.Pod.loadByHost(host, function (err, pod) { - if (err) { - logger.error('Cannot get signed host in body.', { error: err }) - return res.sendStatus(500) - } + db.Pod.loadByHost(host) + .then(pod => { + if (pod === null) { + logger.error('Unknown pod %s.', host) + return res.sendStatus(403) + } - if (pod === null) { - logger.error('Unknown pod %s.', host) - return res.sendStatus(403) - } + logger.debug('Checking signature from %s.', host) - logger.debug('Checking signature from %s.', host) + let signatureShouldBe + // If there is data in the body the sender used it for its signature + // If there is no data we just use its host as signature + if (req.body.data) { + signatureShouldBe = req.body.data + } else { + signatureShouldBe = host + } - let signatureShouldBe - // If there is data in the body the sender used it for its signature - // If there is no data we just use its host as signature - if (req.body.data) { - signatureShouldBe = req.body.data - } else { - signatureShouldBe = host - } + const signatureOk = peertubeCryptoCheckSignature(pod.publicKey, signatureShouldBe, req.body.signature.signature) - const signatureOk = peertubeCrypto.checkSignature(pod.publicKey, signatureShouldBe, req.body.signature.signature) + if (signatureOk === true) { + res.locals.secure = { + pod + } - if (signatureOk === true) { - res.locals.secure = { - pod + return next() } - return next() - } - - logger.error('Signature is not okay in body for %s.', req.body.signature.host) - return res.sendStatus(403) - }) + logger.error('Signature is not okay in body for %s.', req.body.signature.host) + return res.sendStatus(403) + }) + .catch(err => { + logger.error('Cannot get signed host in body.', { error: err }) + return res.sendStatus(500) + }) } // ---------------------------------------------------------------------------