diff options
author | Chocobozzz <florian.bigard@gmail.com> | 2017-01-27 11:55:31 +0100 |
---|---|---|
committer | Chocobozzz <florian.bigard@gmail.com> | 2017-01-27 11:55:31 +0100 |
commit | b09ce6455f8e2bf9dd741532e6ad09309880ff74 (patch) | |
tree | 7d2ec942e50b8f3347ed4287e07e2bc88619e585 | |
parent | 0d4fb7e6d482635cd725cd2f09cf981f82cbd92c (diff) | |
download | PeerTube-b09ce6455f8e2bf9dd741532e6ad09309880ff74.tar.gz PeerTube-b09ce6455f8e2bf9dd741532e6ad09309880ff74.tar.zst PeerTube-b09ce6455f8e2bf9dd741532e6ad09309880ff74.zip |
Server: error if we add a pod that already exists
-rw-r--r-- | server/controllers/api/pods.js | 2 | ||||
-rw-r--r-- | server/middlewares/pods.js | 4 | ||||
-rw-r--r-- | server/middlewares/validators/pods.js | 26 | ||||
-rw-r--r-- | server/tests/api/check-params/pods.js | 8 | ||||
-rw-r--r-- | server/tests/utils/requests.js | 11 |
5 files changed, 40 insertions, 11 deletions
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() | |||
20 | 20 | ||
21 | router.get('/', listPods) | 21 | router.get('/', listPods) |
22 | router.post('/', | 22 | router.post('/', |
23 | podsMiddleware.setBodyHostPort, // We need to modify the host before running the validator! | ||
23 | validators.podsAdd, | 24 | validators.podsAdd, |
24 | podsMiddleware.setBodyHostPort, | ||
25 | addPods | 25 | addPods |
26 | ) | 26 | ) |
27 | router.post('/makefriends', | 27 | 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 = { | |||
8 | } | 8 | } |
9 | 9 | ||
10 | function setBodyHostsPort (req, res, next) { | 10 | function setBodyHostsPort (req, res, next) { |
11 | if (!req.body.hosts) return next() | ||
12 | |||
11 | for (let i = 0; i < req.body.hosts.length; i++) { | 13 | for (let i = 0; i < req.body.hosts.length; i++) { |
12 | const hostWithPort = getHostWithPort(req.body.hosts[i]) | 14 | const hostWithPort = getHostWithPort(req.body.hosts[i]) |
13 | 15 | ||
@@ -23,6 +25,8 @@ function setBodyHostsPort (req, res, next) { | |||
23 | } | 25 | } |
24 | 26 | ||
25 | function setBodyHostPort (req, res, next) { | 27 | function setBodyHostPort (req, res, next) { |
28 | if (!req.body.host) return next() | ||
29 | |||
26 | const hostWithPort = getHostWithPort(req.body.host) | 30 | const hostWithPort = getHostWithPort(req.body.host) |
27 | 31 | ||
28 | // Problem with the url parsing? | 32 | // 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 @@ | |||
2 | 2 | ||
3 | const checkErrors = require('./utils').checkErrors | 3 | const checkErrors = require('./utils').checkErrors |
4 | const constants = require('../../initializers/constants') | 4 | const constants = require('../../initializers/constants') |
5 | const db = require('../../initializers/database') | ||
5 | const friends = require('../../lib/friends') | 6 | const friends = require('../../lib/friends') |
6 | const logger = require('../../helpers/logger') | 7 | const logger = require('../../helpers/logger') |
7 | const utils = require('../../helpers/utils') | 8 | const utils = require('../../helpers/utils') |
@@ -30,23 +31,34 @@ function makeFriends (req, res, next) { | |||
30 | 31 | ||
31 | if (hasFriends === true) { | 32 | if (hasFriends === true) { |
32 | // We need to quit our friends before make new ones | 33 | // We need to quit our friends before make new ones |
33 | res.sendStatus(409) | 34 | return res.sendStatus(409) |
34 | } else { | ||
35 | return next() | ||
36 | } | 35 | } |
36 | |||
37 | return next() | ||
37 | }) | 38 | }) |
38 | }) | 39 | }) |
39 | } | 40 | } |
40 | 41 | ||
41 | function podsAdd (req, res, next) { | 42 | function podsAdd (req, res, next) { |
42 | req.checkBody('host', 'Should have an host').notEmpty().isURL() | 43 | req.checkBody('host', 'Should have an host').isHostValid() |
43 | req.checkBody('publicKey', 'Should have a public key').notEmpty() | 44 | req.checkBody('publicKey', 'Should have a public key').notEmpty() |
45 | logger.debug('Checking podsAdd parameters', { parameters: req.body }) | ||
44 | 46 | ||
45 | // TODO: check we don't have it already | 47 | checkErrors(req, res, function () { |
48 | db.Pod.loadByHost(req.body.host, function (err, pod) { | ||
49 | if (err) { | ||
50 | logger.error('Cannot load pod by host.', { error: err }) | ||
51 | res.sendStatus(500) | ||
52 | } | ||
46 | 53 | ||
47 | logger.debug('Checking podsAdd parameters', { parameters: req.body }) | 54 | // Pod with this host already exists |
55 | if (pod) { | ||
56 | return res.sendStatus(409) | ||
57 | } | ||
48 | 58 | ||
49 | checkErrors(req, res, next) | 59 | return next() |
60 | }) | ||
61 | }) | ||
50 | } | 62 | } |
51 | 63 | ||
52 | // --------------------------------------------------------------------------- | 64 | // --------------------------------------------------------------------------- |
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 () { | |||
189 | } | 189 | } |
190 | requestsUtils.makePostBodyRequest(server.url, path, null, data, done, 200) | 190 | requestsUtils.makePostBodyRequest(server.url, path, null, data, done, 200) |
191 | }) | 191 | }) |
192 | |||
193 | it('Should fail with a host that already exists', function (done) { | ||
194 | const data = { | ||
195 | host: 'coucou.com', | ||
196 | publicKey: 'mysuperpublickey' | ||
197 | } | ||
198 | requestsUtils.makePostBodyRequest(server.url, path, null, data, done, 409) | ||
199 | }) | ||
192 | }) | 200 | }) |
193 | 201 | ||
194 | after(function (done) { | 202 | 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 | |||
36 | req.attach(attach, value) | 36 | req.attach(attach, value) |
37 | }) | 37 | }) |
38 | 38 | ||
39 | req.expect(statusCodeExpected, done) | 39 | req.expect(statusCodeExpected) |
40 | .end(done) | ||
40 | } | 41 | } |
41 | 42 | ||
42 | function makePostBodyRequest (url, path, token, fields, done, statusCodeExpected) { | 43 | function makePostBodyRequest (url, path, token, fields, done, statusCodeExpected) { |
@@ -48,7 +49,9 @@ function makePostBodyRequest (url, path, token, fields, done, statusCodeExpected | |||
48 | 49 | ||
49 | if (token) req.set('Authorization', 'Bearer ' + token) | 50 | if (token) req.set('Authorization', 'Bearer ' + token) |
50 | 51 | ||
51 | req.send(fields).expect(statusCodeExpected, done) | 52 | req.send(fields) |
53 | .expect(statusCodeExpected) | ||
54 | .end(done) | ||
52 | } | 55 | } |
53 | 56 | ||
54 | function makePutBodyRequest (url, path, token, fields, done, statusCodeExpected) { | 57 | function makePutBodyRequest (url, path, token, fields, done, statusCodeExpected) { |
@@ -60,7 +63,9 @@ function makePutBodyRequest (url, path, token, fields, done, statusCodeExpected) | |||
60 | 63 | ||
61 | if (token) req.set('Authorization', 'Bearer ' + token) | 64 | if (token) req.set('Authorization', 'Bearer ' + token) |
62 | 65 | ||
63 | req.send(fields).expect(statusCodeExpected, done) | 66 | req.send(fields) |
67 | .expect(statusCodeExpected) | ||
68 | .end(done) | ||
64 | } | 69 | } |
65 | 70 | ||
66 | // --------------------------------------------------------------------------- | 71 | // --------------------------------------------------------------------------- |