diff --git a/CHANGELOG.md b/CHANGELOG.md index dfda132a4d..b03dbf9f3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,212 @@ +#### v3.12.3 (2025-01-15) + +##### Chores + +* up harmony (5120d117) +* up 2factor (c6eaea30) +* incrementing version number - v3.12.2 (a1269b39) +* update changelog for v3.12.2 (98e5d1b5) +* incrementing version number - v3.12.1 (944c4e66) +* incrementing version number - v3.12.0 (052c195e) +* incrementing version number - v3.11.1 (0c0dd480) +* incrementing version number - v3.11.0 (acf27e85) +* incrementing version number - v3.10.3 (57d54224) +* incrementing version number - v3.10.2 (2f15f464) +* incrementing version number - v3.10.1 (cca3a644) +* incrementing version number - v3.10.0 (b60a9b4e) +* incrementing version number - v3.9.1 (f120c91c) +* incrementing version number - v3.9.0 (4880f32d) +* incrementing version number - v3.8.4 (4833f9a6) +* incrementing version number - v3.8.3 (97ce2c44) +* incrementing version number - v3.8.2 (72d91251) +* incrementing version number - v3.8.1 (527326f7) +* incrementing version number - v3.8.0 (e228a6eb) +* incrementing version number - v3.7.5 (6882894d) +* incrementing version number - v3.7.4 (6678744c) +* incrementing version number - v3.7.3 (2d62b6f6) +* incrementing version number - v3.7.2 (cc257e7e) +* incrementing version number - v3.7.1 (712365a5) +* incrementing version number - v3.7.0 (9a6153d7) +* incrementing version number - v3.6.7 (86a17e38) +* incrementing version number - v3.6.6 (6604bf37) +* incrementing version number - v3.6.5 (6c653625) +* incrementing version number - v3.6.4 (83d131b4) +* incrementing version number - v3.6.3 (fc7d2bfd) +* incrementing version number - v3.6.2 (0f577a57) +* incrementing version number - v3.6.1 (f1a69468) +* incrementing version number - v3.6.0 (4cdf85f8) +* incrementing version number - v3.5.3 (ed0e8783) +* incrementing version number - v3.5.2 (52fbb2da) +* incrementing version number - v3.5.1 (4c543488) +* incrementing version number - v3.5.0 (d06fb4f0) +* incrementing version number - v3.4.3 (5c984250) +* incrementing version number - v3.4.2 (3f0dac38) +* incrementing version number - v3.4.1 (01e69574) +* incrementing version number - v3.4.0 (fd9247c5) +* incrementing version number - v3.3.9 (5805e770) +* incrementing version number - v3.3.8 (a5603565) +* incrementing version number - v3.3.7 (b26f1744) +* incrementing version number - v3.3.6 (7fb38792) +* incrementing version number - v3.3.4 (a67f84ea) +* incrementing version number - v3.3.3 (f94d239b) +* incrementing version number - v3.3.2 (ec9dac97) +* incrementing version number - v3.3.1 (151cc68f) +* incrementing version number - v3.3.0 (fc1ad70f) +* incrementing version number - v3.2.3 (b06d3e63) +* incrementing version number - v3.2.2 (758ecfcd) +* incrementing version number - v3.2.1 (20145074) +* incrementing version number - v3.2.0 (9ecac38e) +* incrementing version number - v3.1.7 (0b4e81ab) +* incrementing version number - v3.1.6 (b3a3b130) +* incrementing version number - v3.1.5 (ec19343a) +* incrementing version number - v3.1.4 (2452783c) +* incrementing version number - v3.1.3 (3b4e9d3f) +* incrementing version number - v3.1.2 (40fa3489) +* incrementing version number - v3.1.1 (40250733) +* incrementing version number - v3.1.0 (0cb386bd) +* incrementing version number - v3.0.1 (26f6ea49) +* incrementing version number - v3.0.0 (224e08cd) + +##### Bug Fixes + +* closes #13051, catch errors from widget render (168e6b2c) +* for attribute label (e89b7ec8) +* don't confirm emails on HEAD request (45eabbf5) + +##### Performance Improvements + +* closes #13052, only call loadConfig once per page (539693a4) + +#### v3.12.2 (2025-01-08) + +##### Chores + +* remove log (2f5effda) +* up markdown (0a135d88) +* up deps (48944a86) +* up composer-default (80ddc03a) +* up harmony (5b2dfd74) +* incrementing version number - v3.12.1 (944c4e66) +* update changelog for v3.12.1 (22606767) +* incrementing version number - v3.12.0 (052c195e) +* incrementing version number - v3.11.1 (0c0dd480) +* incrementing version number - v3.11.0 (acf27e85) +* incrementing version number - v3.10.3 (57d54224) +* incrementing version number - v3.10.2 (2f15f464) +* incrementing version number - v3.10.1 (cca3a644) +* incrementing version number - v3.10.0 (b60a9b4e) +* incrementing version number - v3.9.1 (f120c91c) +* incrementing version number - v3.9.0 (4880f32d) +* incrementing version number - v3.8.4 (4833f9a6) +* incrementing version number - v3.8.3 (97ce2c44) +* incrementing version number - v3.8.2 (72d91251) +* incrementing version number - v3.8.1 (527326f7) +* incrementing version number - v3.8.0 (e228a6eb) +* incrementing version number - v3.7.5 (6882894d) +* incrementing version number - v3.7.4 (6678744c) +* incrementing version number - v3.7.3 (2d62b6f6) +* incrementing version number - v3.7.2 (cc257e7e) +* incrementing version number - v3.7.1 (712365a5) +* incrementing version number - v3.7.0 (9a6153d7) +* incrementing version number - v3.6.7 (86a17e38) +* incrementing version number - v3.6.6 (6604bf37) +* incrementing version number - v3.6.5 (6c653625) +* incrementing version number - v3.6.4 (83d131b4) +* incrementing version number - v3.6.3 (fc7d2bfd) +* incrementing version number - v3.6.2 (0f577a57) +* incrementing version number - v3.6.1 (f1a69468) +* incrementing version number - v3.6.0 (4cdf85f8) +* incrementing version number - v3.5.3 (ed0e8783) +* incrementing version number - v3.5.2 (52fbb2da) +* incrementing version number - v3.5.1 (4c543488) +* incrementing version number - v3.5.0 (d06fb4f0) +* incrementing version number - v3.4.3 (5c984250) +* incrementing version number - v3.4.2 (3f0dac38) +* incrementing version number - v3.4.1 (01e69574) +* incrementing version number - v3.4.0 (fd9247c5) +* incrementing version number - v3.3.9 (5805e770) +* incrementing version number - v3.3.8 (a5603565) +* incrementing version number - v3.3.7 (b26f1744) +* incrementing version number - v3.3.6 (7fb38792) +* incrementing version number - v3.3.4 (a67f84ea) +* incrementing version number - v3.3.3 (f94d239b) +* incrementing version number - v3.3.2 (ec9dac97) +* incrementing version number - v3.3.1 (151cc68f) +* incrementing version number - v3.3.0 (fc1ad70f) +* incrementing version number - v3.2.3 (b06d3e63) +* incrementing version number - v3.2.2 (758ecfcd) +* incrementing version number - v3.2.1 (20145074) +* incrementing version number - v3.2.0 (9ecac38e) +* incrementing version number - v3.1.7 (0b4e81ab) +* incrementing version number - v3.1.6 (b3a3b130) +* incrementing version number - v3.1.5 (ec19343a) +* incrementing version number - v3.1.4 (2452783c) +* incrementing version number - v3.1.3 (3b4e9d3f) +* incrementing version number - v3.1.2 (40fa3489) +* incrementing version number - v3.1.1 (40250733) +* incrementing version number - v3.1.0 (0cb386bd) +* incrementing version number - v3.0.1 (26f6ea49) +* incrementing version number - v3.0.0 (224e08cd) + +##### New Features + +* add -y flag to upgrade, closes #13023 (4f682a31) +* add missing default notification settings (d155da3c) +* closes #13001, allow keyboard to change cover position (45c5351f) +* use displayname for user image titles (52366101) + +##### Bug Fixes + +* closes #13036, if image isn't loaded yet width is 0 (d05c203b) +* closes #13024, on register dont auto login with user doesn't have local:login privilege (238a3ed5) +* closes #13022, don't do anything if notif setting isnt set to email (fcf50a3c) +* closes #13019, use displayname in vote tooltip (dcc2342c) +* overflow on dashboard/searches (1b13cce2) +* #13011, catch errors (25655d5a) +* truncate popular search terms, closes #13010 (2f72e32d) +* #13007, replace $ with \uFF04, like . (c60cee59) +* dont stripEXIF from gifs (f478adac) +* closes #13008, catch errors in post redirect (77521494) +* test on redis (a6f0eba5) +* convert to str than filter (c69fa811) +* closes #13002, make chats keyboard focusable (e71feeec) +* js error when clicking a notification (d40762b7) +* don't close search if children have focus, closes #13004 (1cb7bb6a) +* #12991, switch to nodemailer address object (a489abc7) +* make fork/move dropdowns go up (89b8de50) + +##### Other Changes + +* whitespace (27e945fd) +* index.js (7bfca7ba) +* //github.com/NodeBB/NodeBB/issues/13018 (68f73fd0) + +##### Refactors + +* silence deprecations in prod (d75b169c) +* check if useragent exists firt (a0e66816) +* get rid of RegExp (e4dd697a) +* remove debug (646b9ea7) + +##### Tests + +* fix spec (23298060) +* remove resizeImageWidth (25f1fa67) +* editor tests (82538ca3) +* missing service worker test (e845afc1) +* add last one (54233dcd) +* custom fields tests (ae2bd5ab) +* fix controller tests (b129c6c0) +* missing translator tests (0d3a8757) +* fix relative path in tests (127e0e22) +* add translateInPlace test (225c91ed) +* subfolder in category link (407b0cc6) +* add helper tests (95b42f83) +* debounce/throttle (d5ae91a3) +* add back disabled test since node 18 is minimum (8864e658) +* fix user picture test (29804a10) +* fix thumb test (fa24f1dd) + #### v3.12.1 (2024-12-20) ##### Chores diff --git a/public/openapi/read/admin/config.yaml b/public/openapi/read/admin/config.yaml index dcfbcaffc1..e5a65fa040 100644 --- a/public/openapi/read/admin/config.yaml +++ b/public/openapi/read/admin/config.yaml @@ -122,8 +122,6 @@ get: type: array items: type: string - resizeImageWidth: - type: number cookies: type: object properties: diff --git a/src/controllers/api.js b/src/controllers/api.js index 9b85dd2d30..1cafbd0296 100644 --- a/src/controllers/api.js +++ b/src/controllers/api.js @@ -78,7 +78,6 @@ apiController.loadConfig = async function (req) { enablePostHistory: meta.config.enablePostHistory === 1, timeagoCutoff: meta.config.timeagoCutoff !== '' ? Math.max(0, parseInt(meta.config.timeagoCutoff, 10)) : meta.config.timeagoCutoff, timeagoCodes: languages.timeagoCodes, - resizeImageWidth: meta.config.resizeImageWidth, cookies: { enabled: meta.config.cookieConsentEnabled === 1, message: translator.escape(validator.escape(meta.config.cookieConsentMessage || '[[global:cookies.message]]')).replace(/\\/g, '\\\\'), diff --git a/src/controllers/index.js b/src/controllers/index.js index b76df17944..f8152a6933 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -230,6 +230,10 @@ Controllers.confirmEmail = async (req, res) => { ...opts, }); } + + if (req.method === 'HEAD') { + return renderPage(); + } try { if (req.loggedIn) { const emailValidated = await user.getUserField(req.uid, 'email:confirmed'); diff --git a/src/views/partials/acceptTos.tpl b/src/views/partials/acceptTos.tpl index 59aa2a5aa7..53e31c3aed 100644 --- a/src/views/partials/acceptTos.tpl +++ b/src/views/partials/acceptTos.tpl @@ -1,8 +1,8 @@
- +
{termsOfUse}
- +
\ No newline at end of file diff --git a/src/widgets/index.js b/src/widgets/index.js index 0478b8dc3a..2750d25232 100644 --- a/src/widgets/index.js +++ b/src/widgets/index.js @@ -22,7 +22,12 @@ widgets.render = async function (uid, options) { const locations = _.uniq(Object.keys(data.global).concat(Object.keys(data[options.template]))); - const widgetData = await Promise.all(locations.map(location => renderLocation(location, data, uid, options))); + let config = options.res.locals.config || {}; + if (options.res.locals.isAPI) { + config = await apiController.loadConfig(options.req); + } + + const widgetData = await Promise.all(locations.map(location => renderLocation(location, data, uid, options, config))); const returnData = {}; locations.forEach((location, i) => { @@ -34,7 +39,7 @@ widgets.render = async function (uid, options) { return returnData; }; -async function renderLocation(location, data, uid, options) { +async function renderLocation(location, data, uid, options, config) { const widgetsAtLocation = (data[options.template][location] || []).concat(data.global[location] || []); if (!widgetsAtLocation.length) { @@ -42,12 +47,12 @@ async function renderLocation(location, data, uid, options) { } const renderedWidgets = await Promise.all( - widgetsAtLocation.map(widget => renderWidget(widget, uid, options, location)) + widgetsAtLocation.map(widget => renderWidget(widget, uid, options, config, location)) ); return renderedWidgets; } -async function renderWidget(widget, uid, options, location) { +async function renderWidget(widget, uid, options, config, location) { if (!widget || !widget.data || (!!widget.data['hide-mobile'] && options.req.useragent.isMobile)) { return; } @@ -57,42 +62,41 @@ async function renderWidget(widget, uid, options, location) { return; } - let config = options.res.locals.config || {}; - if (options.res.locals.isAPI) { - config = await apiController.loadConfig(options.req); - } - - const userLang = config.userLang || meta.config.defaultLang || 'en-GB'; const templateData = _.assign({ }, options.templateData, { config: config }); - const data = await plugins.hooks.fire(`filter:widget.render:${widget.widget}`, { - uid: uid, - area: options, - templateData: templateData, - data: widget.data, - req: options.req, - res: options.res, - location, - }); - - if (!data) { - return; - } - - let { html } = data; - - if (widget.data.container && widget.data.container.match('{body}')) { - html = await Benchpress.compileRender(widget.data.container, { - title: widget.data.title, - body: html, - template: data.templateData && data.templateData.template, + try { + const data = await plugins.hooks.fire(`filter:widget.render:${widget.widget}`, { + uid: uid, + area: options, + templateData: templateData, + data: widget.data, + req: options.req, + res: options.res, + location, }); - } - if (html) { - html = await translator.translate(html, userLang); - } + if (!data) { + return; + } - return { html }; + let { html } = data; + + if (widget.data.container && widget.data.container.match('{body}')) { + html = await Benchpress.compileRender(widget.data.container, { + title: widget.data.title, + body: html, + template: data.templateData && data.templateData.template, + }); + } + + if (html) { + html = await translator.translate(html, config.userLang || meta.config.defaultLang || 'en-GB'); + } + + return { html }; + } catch (err) { + winston.error(err.stack); + return { html: '' }; + } } widgets.checkVisibility = async function (data, uid) {