diff --git a/server/controllers/api/v1/pods.js b/server/controllers/api/v1/pods.js index d509db964..8ffade578 100644 --- a/server/controllers/api/v1/pods.js +++ b/server/controllers/api/v1/pods.js @@ -10,6 +10,7 @@ const friends = require('../../../lib/friends') const middlewares = require('../../../middlewares') const admin = middlewares.admin const oAuth = middlewares.oauth +const podsMiddleware = middlewares.pods const checkSignature = middlewares.secure.checkSignature const validators = middlewares.validators.pods const signatureValidator = middlewares.validators.remote.signature @@ -19,11 +20,16 @@ const Pod = mongoose.model('Pod') const Video = mongoose.model('Video') router.get('/', listPods) -router.post('/', validators.podsAdd, addPods) +router.post('/', + validators.podsAdd, + podsMiddleware.setBodyUrlPort, + addPods +) router.post('/makefriends', oAuth.authenticate, admin.ensureIsAdmin, validators.makeFriends, + podsMiddleware.setBodyUrlsPort, makeFriends ) router.get('/quitfriends', diff --git a/server/middlewares/index.js b/server/middlewares/index.js index 1e294de5f..3f253e31b 100644 --- a/server/middlewares/index.js +++ b/server/middlewares/index.js @@ -3,6 +3,7 @@ const adminMiddleware = require('./admin') const oauthMiddleware = require('./oauth') const paginationMiddleware = require('./pagination') +const podsMiddleware = require('./pods') const validatorsMiddleware = require('./validators') const searchMiddleware = require('./search') const sortMiddleware = require('./sort') @@ -12,6 +13,7 @@ const middlewares = { admin: adminMiddleware, oauth: oauthMiddleware, pagination: paginationMiddleware, + pods: podsMiddleware, search: searchMiddleware, secure: secureMiddleware, sort: sortMiddleware, diff --git a/server/middlewares/pods.js b/server/middlewares/pods.js new file mode 100644 index 000000000..116b02b3c --- /dev/null +++ b/server/middlewares/pods.js @@ -0,0 +1,62 @@ +'use strict' + +const urlModule = require('url') + +const logger = require('../helpers/logger') + +const podsMiddleware = { + setBodyUrlsPort: setBodyUrlsPort, + setBodyUrlPort: setBodyUrlPort +} + +function setBodyUrlsPort (req, res, next) { + for (let i = 0; i < req.body.urls.length; i++) { + const urlWithPort = getUrlWithPort(req.body.urls[i]) + + // Problem with the url parsing? + if (urlWithPort === null) { + return res.sendStatus(500) + } + + req.body.urls[i] = urlWithPort + } + + return next() +} + +function setBodyUrlPort (req, res, next) { + const urlWithPort = getUrlWithPort(req.body.url) + + // Problem with the url parsing? + if (urlWithPort === null) { + return res.sendStatus(500) + } + + req.body.url = urlWithPort + + return next() +} + +// --------------------------------------------------------------------------- + +module.exports = podsMiddleware + +// --------------------------------------------------------------------------- + +function getUrlWithPort (url) { + const urlObj = urlModule.parse(url) + + // Add the port if it is not specified + if (urlObj.port === null) { + if (urlObj.protocol === 'http:') { + return url + ':80' + } else if (urlObj.protocol === 'https:') { + return url + ':443' + } else { + logger.error('Unknown url protocol: ' + urlObj.protocol) + return null + } + } + + return url +}