From b09ce6455f8e2bf9dd741532e6ad09309880ff74 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 27 Jan 2017 11:55:31 +0100 Subject: Server: error if we add a pod that already exists --- server/controllers/api/pods.js | 2 +- server/middlewares/pods.js | 4 ++++ server/middlewares/validators/pods.js | 26 +++++++++++++++++++------- server/tests/api/check-params/pods.js | 8 ++++++++ server/tests/utils/requests.js | 11 ++++++++--- 5 files changed, 40 insertions(+), 11 deletions(-) (limited to 'server') diff --git a/server/controllers/api/pods.js b/server/controllers/api/pods.js index e1fe6fb5d..da991f8d9 100644 --- a/server/controllers/api/pods.js +++ b/server/controllers/api/pods.js @@ -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', diff --git a/server/middlewares/pods.js b/server/middlewares/pods.js index e38fb341d..2647f9ff0 100644 --- a/server/middlewares/pods.js +++ b/server/middlewares/pods.js @@ -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? diff --git a/server/middlewares/validators/pods.js b/server/middlewares/validators/pods.js index 0723871b2..b9b30e7a1 100644 --- a/server/middlewares/validators/pods.js +++ b/server/middlewares/validators/pods.js @@ -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() + }) + }) } // --------------------------------------------------------------------------- diff --git a/server/tests/api/check-params/pods.js b/server/tests/api/check-params/pods.js index 2f85af644..8d52b69b1 100644 --- a/server/tests/api/check-params/pods.js +++ b/server/tests/api/check-params/pods.js @@ -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) { diff --git a/server/tests/utils/requests.js b/server/tests/utils/requests.js index b1470814d..84cf3483f 100644 --- a/server/tests/utils/requests.js +++ b/server/tests/utils/requests.js @@ -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) } // --------------------------------------------------------------------------- -- cgit v1.2.3