]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - middlewares/misc.js
Split models
[github/Chocobozzz/PeerTube.git] / middlewares / misc.js
index 69e8d78c1ada78fda2d318a68f28a48ba7bd605f..cc4e2e8a43b8af9eb73b08cd2cafca33dc8b480b 100644 (file)
@@ -1,16 +1,19 @@
 ;(function () {
   'use strict'
 
-  var ursa = require('ursa')
   var fs = require('fs')
+  var ursa = require('ursa')
 
-  var logger = require('../src/logger')
-  var utils = require('../src/utils')
-  var PodsDB = require('../src/database').PodsDB
+  var logger = require('../helpers/logger')
+  var Pods = require('../models/pods')
+  var utils = require('../helpers/utils')
 
-  var misc = {}
+  var miscMiddleware = {
+    cache: cache,
+    decryptBody: decryptBody
+  }
 
-  misc.cache = function (cache) {
+  function cache (cache) {
     return function (req, res, next) {
       // If we want explicitly a cache
       // Or if we don't specify if we want a cache or no and we are in production
     }
   }
 
-  misc.decryptBody = function (req, res, next) {
-    logger.debug('Decrypting body.')
-
-    PodsDB.findOne({ url: req.body.signature.url }, function (err, pod) {
+  function decryptBody (req, res, next) {
+    var url = req.body.signature.url
+    Pods.findByUrl(url, function (err, pod) {
       if (err) {
         logger.error('Cannot get signed url in decryptBody.', { error: err })
-        res.sendStatus(500)
+        return res.sendStatus(500)
       }
 
-      logger.debug('Found one pod which could send the message.', { pod: pod.publicKey, url: req.body.signature.url })
+      if (pod === null) {
+        logger.error('Unknown pod %s.', url)
+        return res.sendStatus(403)
+      }
+
+      logger.debug('Decrypting body from %s.', url)
 
       var crt = ursa.createPublicKey(pod.publicKey)
       var signature_ok = crt.hashAndVerify('sha256', new Buffer(req.body.signature.url).toString('hex'), req.body.signature.signature, 'hex')
 
       if (signature_ok === true) {
-        var myKey = ursa.createPrivateKey(fs.readFileSync(utils.certDir + 'peertube.key.pem'))
+        var myKey = ursa.createPrivateKey(fs.readFileSync(utils.getCertDir() + 'peertube.key.pem'))
         var decryptedKey = myKey.decrypt(req.body.key, 'hex', 'utf8')
-        logger.debug(decryptedKey)
         req.body.data = JSON.parse(utils.symetricDecrypt(req.body.data, decryptedKey))
-        logger.debug('Decrypted.', { body: req.body })
+        delete req.body.key
       } else {
         logger.error('Signature is not okay in decryptBody for %s.', req.body.signature.url)
-        res.sendStatus(500)
+        return res.sendStatus(403)
       }
 
       next()
     })
   }
 
-  module.exports = misc
+  // ---------------------------------------------------------------------------
+
+  module.exports = miscMiddleware
 })()