diff --git a/src/meta/configs.js b/src/meta/configs.js index f686b3dd72..56071868c4 100644 --- a/src/meta/configs.js +++ b/src/meta/configs.js @@ -6,6 +6,7 @@ const path = require('path'); const winston = require('winston'); const db = require('../database'); +const file = require('../file'); const pubsub = require('../pubsub'); const Meta = require('./index'); const translator = require('../translator'); @@ -212,20 +213,17 @@ async function getLogoSize(data) { if (!data['brand:logo']) { return; } + const x50Path = path.join(nconf.get('upload_path'), 'system', 'site-logo-x50.png'); let size; - try { - size = await image.size(path.join(nconf.get('upload_path'), 'system', 'site-logo-x50.png')); - } catch (err) { - if (err.code === 'ENOENT') { - // For whatever reason the x50 logo wasn't generated, gracefully error out - winston.warn('[logo] The email-safe logo doesn\'t seem to have been created, please re-upload your site logo.'); - size = { - height: 0, - width: 0, - }; - } else { - throw err; - } + if (await file.exists(x50Path)) { + size = await image.size(x50Path); + } else { + // For whatever reason the x50 logo wasn't generated, gracefully error out + winston.warn('[logo] The email-safe logo doesn\'t seem to have been created, please re-upload your site logo.'); + size = { + height: 0, + width: 0, + }; } data['brand:emailLogo'] = nconf.get('url') + path.join(nconf.get('upload_url'), 'system', 'site-logo-x50.png'); data['brand:emailLogo:height'] = size.height; diff --git a/src/meta/tags.js b/src/meta/tags.js index c68fe95327..bd5a5b613a 100644 --- a/src/meta/tags.js +++ b/src/meta/tags.js @@ -21,6 +21,7 @@ Tags.parse = async (req, data, meta, link) => { name: 'viewport', // https://stackoverflow.com/a/77815388 for resizes-content content: 'width=device-width, initial-scale=1.0, interactive-widget=resizes-content', + noEscape: true, }, { name: 'content-type', content: 'text/html; charset=UTF-8', diff --git a/src/middleware/admin.js b/src/middleware/admin.js index 84d34dfbd0..4d7aa44047 100644 --- a/src/middleware/admin.js +++ b/src/middleware/admin.js @@ -17,14 +17,23 @@ const controllers = { const middleware = module.exports; middleware.buildHeader = helpers.try(async (req, res, next) => { - res.locals.renderAdminHeader = true; + await doBuildHeader(req, res); + next(); +}); + +middleware.buildHeaderAsync = async (req, res) => { + await doBuildHeader(req, res); +}; + +async function doBuildHeader(req, res) { + res.locals.renderHeaderType = 'admin'; + res.locals.isAPI = false; if (req.method === 'GET') { await require('./index').applyCSRFasync(req, res); } - + await plugins.hooks.fire('filter:middleware.buildAdminHeader', { req: req, locals: res.locals }); res.locals.config = await controllers.admin.loadConfig(req); - next(); -}); +} middleware.checkPrivileges = helpers.try(async (req, res, next) => { // Kick out guests, obviously diff --git a/src/middleware/header.js b/src/middleware/header.js index 383ef8e94e..b462a82695 100644 --- a/src/middleware/header.js +++ b/src/middleware/header.js @@ -19,7 +19,7 @@ middleware.buildHeaderAsync = async (req, res) => { }; async function doBuildHeader(req, res) { - res.locals.renderHeader = true; + res.locals.renderHeaderType = 'client'; res.locals.isAPI = false; if (req.method === 'GET') { await require('./index').applyCSRFasync(req, res); diff --git a/src/middleware/render.js b/src/middleware/render.js index f348236884..3cbac1f22a 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -139,9 +139,9 @@ module.exports = function (middleware) { } async function loadHeaderFooterData(req, res, options) { - if (res.locals.renderHeader) { + if (res.locals.renderHeaderType === 'client') { return await loadClientHeaderFooterData(req, res, options); - } else if (res.locals.renderAdminHeader) { + } else if (res.locals.renderHeaderType === 'admin') { return await loadAdminHeaderFooterData(req, res, options); } return null; @@ -382,13 +382,13 @@ module.exports = function (middleware) { async function renderHeaderFooter(method, req, res, options, headerFooterData) { let str = ''; - if (res.locals.renderHeader) { + if (res.locals.renderHeaderType === 'client') { if (method === 'renderHeader') { str = await renderHeader(req, res, options, headerFooterData); } else if (method === 'renderFooter') { str = await renderFooter(req, res, options, headerFooterData); } - } else if (res.locals.renderAdminHeader) { + } else if (res.locals.renderHeaderType === 'admin') { if (method === 'renderHeader') { str = await renderAdminHeader(req, res, options, headerFooterData); } else if (method === 'renderFooter') { @@ -400,7 +400,7 @@ module.exports = function (middleware) { function getLang(req, res) { let language = (res.locals.config && res.locals.config.userLang) || 'en-GB'; - if (res.locals.renderAdminHeader) { + if (res.locals.renderHeaderType === 'admin') { language = (res.locals.config && res.locals.config.acpLang) || 'en-GB'; } return req.query.lang ? validator.escape(String(req.query.lang)) : language; diff --git a/src/user/picture.js b/src/user/picture.js index fe8a99c9a8..c60c95b721 100644 --- a/src/user/picture.js +++ b/src/user/picture.js @@ -144,7 +144,7 @@ module.exports = function (User) { const uploadedImage = await image.uploadImage(filename, `profile/uid-${updateUid}`, { uid: updateUid, path: normalizedPath, - name: 'profileAvatar', + name: `profileAvatar${extension}`, }); await User.updateProfile(callerUid, {