Server: error if we add a pod that already exists
authorChocobozzz <florian.bigard@gmail.com>
Fri, 27 Jan 2017 10:55:31 +0000 (11:55 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Fri, 27 Jan 2017 10:55:31 +0000 (11:55 +0100)
server/controllers/api/pods.js
server/middlewares/pods.js
server/middlewares/validators/pods.js
server/tests/api/check-params/pods.js
server/tests/utils/requests.js

index e1fe6fb5d0cc052172174ffc899f770af9094cb9..da991f8d973cf189baef8737f933395854cb8856 100644 (file)
@@ -20,8 +20,8 @@ const router = express.Router()
 
 router.get('/', listPods)
 router.post('/',
+  podsMiddleware.setBodyHostPort, // We need to modify the host before running the validator!
   validators.podsAdd,
-  podsMiddleware.setBodyHostPort,
   addPods
 )
 router.post('/makefriends',
index e38fb341d0fb61c31dccec046dc6a83c97cca285..2647f9ff0b342849007fbca19cfcb552b72ee339 100644 (file)
@@ -8,6 +8,8 @@ const podsMiddleware = {
 }
 
 function setBodyHostsPort (req, res, next) {
+  if (!req.body.hosts) return next()
+
   for (let i = 0; i < req.body.hosts.length; i++) {
     const hostWithPort = getHostWithPort(req.body.hosts[i])
 
@@ -23,6 +25,8 @@ function setBodyHostsPort (req, res, next) {
 }
 
 function setBodyHostPort (req, res, next) {
+  if (!req.body.host) return next()
+
   const hostWithPort = getHostWithPort(req.body.host)
 
   // Problem with the url parsing?
index 0723871b2ca3499c5504b4fbc156ae4276250fc6..b9b30e7a1bde4dd4d0220e3e6efcf7e8490bed49 100644 (file)
@@ -2,6 +2,7 @@
 
 const checkErrors = require('./utils').checkErrors
 const constants = require('../../initializers/constants')
+const db = require('../../initializers/database')
 const friends = require('../../lib/friends')
 const logger = require('../../helpers/logger')
 const utils = require('../../helpers/utils')
@@ -30,23 +31,34 @@ function makeFriends (req, res, next) {
 
       if (hasFriends === true) {
         // We need to quit our friends before make new ones
-        res.sendStatus(409)
-      } else {
-        return next()
+        return res.sendStatus(409)
       }
+
+      return next()
     })
   })
 }
 
 function podsAdd (req, res, next) {
-  req.checkBody('host', 'Should have an host').notEmpty().isURL()
+  req.checkBody('host', 'Should have an host').isHostValid()
   req.checkBody('publicKey', 'Should have a public key').notEmpty()
+  logger.debug('Checking podsAdd parameters', { parameters: req.body })
 
-  // TODO: check we don't have it already
+  checkErrors(req, res, function () {
+    db.Pod.loadByHost(req.body.host, function (err, pod) {
+      if (err) {
+        logger.error('Cannot load pod by host.', { error: err })
+        res.sendStatus(500)
+      }
 
-  logger.debug('Checking podsAdd parameters', { parameters: req.body })
+      // Pod with this host already exists
+      if (pod) {
+        return res.sendStatus(409)
+      }
 
-  checkErrors(req, res, next)
+      return next()
+    })
+  })
 }
 
 // ---------------------------------------------------------------------------
index 2f85af644022b00326a69b08697264a0a056f994..8d52b69b1a96bcdce70f99f98132e135175f6ab2 100644 (file)
@@ -189,6 +189,14 @@ describe('Test pods API validators', function () {
       }
       requestsUtils.makePostBodyRequest(server.url, path, null, data, done, 200)
     })
+
+    it('Should fail with a host that already exists', function (done) {
+      const data = {
+        host: 'coucou.com',
+        publicKey: 'mysuperpublickey'
+      }
+      requestsUtils.makePostBodyRequest(server.url, path, null, data, done, 409)
+    })
   })
 
   after(function (done) {
index b1470814d4729d25199a81d242cb415d70a24dbf..84cf3483f8dfea311487166b0a3afa2f230bd9c7 100644 (file)
@@ -36,7 +36,8 @@ function makePostUploadRequest (url, path, token, fields, attaches, done, status
     req.attach(attach, value)
   })
 
-  req.expect(statusCodeExpected, done)
+  req.expect(statusCodeExpected)
+     .end(done)
 }
 
 function makePostBodyRequest (url, path, token, fields, done, statusCodeExpected) {
@@ -48,7 +49,9 @@ function makePostBodyRequest (url, path, token, fields, done, statusCodeExpected
 
   if (token) req.set('Authorization', 'Bearer ' + token)
 
-  req.send(fields).expect(statusCodeExpected, done)
+  req.send(fields)
+     .expect(statusCodeExpected)
+     .end(done)
 }
 
 function makePutBodyRequest (url, path, token, fields, done, statusCodeExpected) {
@@ -60,7 +63,9 @@ function makePutBodyRequest (url, path, token, fields, done, statusCodeExpected)
 
   if (token) req.set('Authorization', 'Bearer ' + token)
 
-  req.send(fields).expect(statusCodeExpected, done)
+  req.send(fields)
+     .expect(statusCodeExpected)
+     .end(done)
 }
 
 // ---------------------------------------------------------------------------