'use strict'; const CdbRequest = require('../models/cartodb_request'); module.exports = function user(metadataBackend) { const cdbRequest = new CdbRequest(); return function userMiddleware (req, res, next) { res.locals.user = getUserNameFromRequest(req, cdbRequest); checkUserExists(metadataBackend, res.locals.user, function(err, userExists) { if (err || !userExists) { const error = new Error('Unauthorized'); error.type = 'auth'; error.subtype = 'user-not-found'; error.http_status = 404; error.message = errorUserNotFoundMessageTemplate(res.locals.user); next(error); } return next(); }); }; }; function getUserNameFromRequest(req, cdbRequest) { return cdbRequest.userByReq(req); } function checkUserExists(metadataBackend, userName, callback) { metadataBackend.getUserId(userName, function(err) { callback(err, !err); }); } function errorUserNotFoundMessageTemplate(user) { return `Sorry, we can't find CARTO user '${user}'. Please check that you have entered the correct domain.`; }