From 84d3fe796961ba8058c4844f3a29c525e7f85035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 7 Mar 2025 10:21:59 -0500 Subject: [PATCH 1/3] refactor: show warning if there is no email for validation --- src/user/email.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/user/email.js b/src/user/email.js index c14c9c93fc..9535d87415 100644 --- a/src/user/email.js +++ b/src/user/email.js @@ -134,6 +134,7 @@ UserEmail.sendValidationEmail = async function (uid, options) { options.email = await user.getUserField(uid, 'email'); } if (!options.email) { + winston.warn(`[user/email] No email found for uid ${uid}`); return; } From c83f91bd122d292ff7ea2f2d0437c58fd00ece78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 7 Mar 2025 10:23:55 -0500 Subject: [PATCH 2/3] refactor: dont generate UUID if no email --- src/user/email.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/user/email.js b/src/user/email.js index 9535d87415..b485081713 100644 --- a/src/user/email.js +++ b/src/user/email.js @@ -124,11 +124,6 @@ UserEmail.sendValidationEmail = async function (uid, options) { }; } - const confirm_code = utils.generateUUID(); - const confirm_link = `${nconf.get('url')}/confirm/${confirm_code}`; - - const { emailConfirmInterval, emailConfirmExpiry } = meta.config; - // If no email passed in (default), retrieve email from uid if (!options.email || !options.email.length) { options.email = await user.getUserField(uid, 'email'); @@ -138,10 +133,13 @@ UserEmail.sendValidationEmail = async function (uid, options) { return; } + const { emailConfirmInterval, emailConfirmExpiry } = meta.config; if (!options.force && !await UserEmail.canSendValidation(uid, options.email)) { throw new Error(`[[error:confirm-email-already-sent, ${emailConfirmInterval}]]`); } + const confirm_code = utils.generateUUID(); + const confirm_link = `${nconf.get('url')}/confirm/${confirm_code}`; const username = await user.getUserField(uid, 'username'); const data = await plugins.hooks.fire('filter:user.verify', { uid, From bef17920860fe4e11ef6a0b588e830492349b245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sat, 8 Mar 2025 00:09:41 -0500 Subject: [PATCH 3/3] fix: closes #13078, toggle /world navItem when AP is toggled --- src/meta/configs.js | 8 ++++++++ src/navigation/admin.js | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/meta/configs.js b/src/meta/configs.js index 80159490c4..f5adf5b000 100644 --- a/src/meta/configs.js +++ b/src/meta/configs.js @@ -132,6 +132,7 @@ Configs.setMultiple = async function (data) { await processConfig(data); data = serialize(data); await db.setObject('config', data); + await updateNavItems(data); updateConfig(deserialize(data)); }; @@ -228,6 +229,13 @@ async function getLogoSize(data) { data['brand:emailLogo:width'] = size.width; } +async function updateNavItems(data) { + if (data.hasOwnProperty('activitypubEnabled')) { + const navAdmin = require('../navigation/admin'); + await navAdmin.update('/world', { enabled: data.activitypubEnabled ? 'on' : '' }); + } +} + function updateConfig(config) { updateLocalConfig(config); pubsub.publish('config:update', config); diff --git a/src/navigation/admin.js b/src/navigation/admin.js index df8241c8ba..f944918371 100644 --- a/src/navigation/admin.js +++ b/src/navigation/admin.js @@ -85,6 +85,19 @@ admin.get = async function () { return cache.map(item => ({ ...item })); }; +admin.update = async function (route, data) { + const ids = await db.getSortedSetRange('navigation:enabled', 0, -1); + const navItems = await db.getObjects(ids.map(id => `navigation:enabled:${id}`)); + const matchedRoutes = navItems.filter(item => item && item.route === route); + if (matchedRoutes.length) { + await db.setObjectBulk( + matchedRoutes.map(item => [`navigation:enabled:${item.order}`, data]) + ); + cache = null; + pubsub.publish('admin:navigation:save'); + } +}; + async function getAvailable() { const core = require('../../install/data/navigation.json').map((item) => { item.core = true;