From d15d9e44929763c12c00116a1c1ac3904e69ffcf Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 30 Mar 2020 13:16:29 -0400 Subject: [PATCH] fix(refactor): patching helpers.tryRoute for API routes, some re-org Thanks @barisusakli for the tip --- src/controllers/index.js | 2 ++ src/controllers/write/index.js | 5 +++++ src/controllers/write/users.js | 11 +++++++++++ src/routes/helpers.js | 13 ++++++++++++- src/routes/write/users.js | 19 ++++++------------- 5 files changed, 36 insertions(+), 14 deletions(-) create mode 100644 src/controllers/write/index.js create mode 100644 src/controllers/write/users.js diff --git a/src/controllers/index.js b/src/controllers/index.js index 7d080b11b1..285ac8d78b 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -38,6 +38,8 @@ Controllers['404'] = require('./404'); Controllers.errors = require('./errors'); Controllers.composer = require('./composer'); +Controllers.write = require('./write'); + Controllers.reset = function (req, res, next) { if (meta.config['password:disableEdit']) { return helpers.notAllowed(req, res); diff --git a/src/controllers/write/index.js b/src/controllers/write/index.js new file mode 100644 index 0000000000..b7a4f0f50b --- /dev/null +++ b/src/controllers/write/index.js @@ -0,0 +1,5 @@ +'use strict'; + +const Write = module.exports; + +Write.users = require('./users'); diff --git a/src/controllers/write/users.js b/src/controllers/write/users.js new file mode 100644 index 0000000000..f98fd73573 --- /dev/null +++ b/src/controllers/write/users.js @@ -0,0 +1,11 @@ +'use strict'; + +const users = require('../../user'); +const helpers = require('../helpers'); + +const Users = module.exports; + +Users.create = async (req, res) => { + const uid = await users.create(req.body); + helpers.formatApiResponse(200, res, await users.getUserData(uid)); +}; diff --git a/src/routes/helpers.js b/src/routes/helpers.js index 8c2085d42d..7310037c2c 100644 --- a/src/routes/helpers.js +++ b/src/routes/helpers.js @@ -14,12 +14,23 @@ helpers.setupAdminPageRoute = function (router, name, middleware, middlewares, c router.get('/api' + name, middlewares, helpers.tryRoute(controller)); }; -helpers.tryRoute = function (controller) { +helpers.setupApiRoute = function (router, name, middleware, middlewares, verb, controller) { + router[verb](name, middleware.authenticate, middlewares, helpers.tryRoute(controller, (err, res) => { + helpers.formatApiResponse(400, res, err); + })); +}; + +helpers.tryRoute = function (controller, handler) { + // `handler` is optional if (controller && controller.constructor && controller.constructor.name === 'AsyncFunction') { return async function (req, res, next) { try { await controller(req, res, next); } catch (err) { + if (handler) { + return handler(err, res); + } + next(err); } }; diff --git a/src/routes/write/users.js b/src/routes/write/users.js index 9428e1027f..dddcf977e8 100644 --- a/src/routes/write/users.js +++ b/src/routes/write/users.js @@ -1,9 +1,8 @@ 'use strict'; -const users = require('../../user'); - const middleware = require('../../middleware'); -const helpers = require('../../controllers/helpers'); +const controllers = require('../../controllers'); +const routeHelpers = require('../../routes/helpers'); // Messaging = require.main.require('./src/messaging'), // apiMiddleware = require('./middleware'), // errorHandler = require('../../lib/errorHandler'), @@ -13,16 +12,10 @@ const helpers = require('../../controllers/helpers'); module.exports = function () { - var app = require('express').Router(); + const router = require('express').Router(); + const setupApiRoute = routeHelpers.setupApiRoute; - app.post('/', middleware.checkRequired.bind(null, ['username']), middleware.authenticate, middleware.isAdmin, async (req, res) => { - try { - const uid = await users.create(req.body); - helpers.formatApiResponse(200, res, await users.getUserData(uid)); - } catch (err) { - helpers.formatApiResponse(400, res, err); - } - }); + setupApiRoute(router, '/', middleware, [middleware.checkRequired.bind(null, ['username']), middleware.isAdmin], 'post', controllers.write.users.create); // app.route('/:uid') // .put(apiMiddleware.requireUser, apiMiddleware.exposeAdmin, function(req, res) { @@ -170,5 +163,5 @@ module.exports = function () { // }); // }); - return app; + return router; };