diff --git a/src/activitypub/index.js b/src/activitypub/index.js index 767c88ce23..343c0bc778 100644 --- a/src/activitypub/index.js +++ b/src/activitypub/index.js @@ -120,8 +120,13 @@ ActivityPub.resolveInboxes = async (ids) => { if (!meta.config.activitypubAllowLoopback) { ids = ids.filter((id) => { - const { hostname } = new URL(id); - return hostname !== nconf.get('url_parsed').hostname; + try { + const { hostname } = new URL(id); + return hostname !== nconf.get('url_parsed').hostname; + } catch (err) { + winston.error(`[activitypub/resolveInboxes] Invalid id: ${id}`); + return false; + } }); } diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js index 581f7d931c..162bea8ecd 100644 --- a/src/controllers/authentication.js +++ b/src/controllers/authentication.js @@ -490,7 +490,7 @@ authenticationController.logout = async function (req, res) { }; await plugins.hooks.fire('filter:user.logout', payload); - if (req.body?.noscript === 'true') { + if (req.body?.noscript === 'true' || res.locals.logoutRedirect === true) { return res.redirect(payload.next); } res.status(200).send(payload); diff --git a/src/middleware/user.js b/src/middleware/user.js index c49481e625..620c4bad9c 100644 --- a/src/middleware/user.js +++ b/src/middleware/user.js @@ -53,6 +53,12 @@ module.exports = function (middleware) { } if (req.loggedIn) { + const exists = await user.exists(req.uid); + if (!exists) { + res.locals.logoutRedirect = true; + return controllers.authentication.logout(req, res); + } + return true; } else if (req.headers.hasOwnProperty('authorization')) { const user = await passportAuthenticateAsync(req, res); diff --git a/test/i18n.js b/test/i18n.js index 5798f3d12f..f2abe4f17a 100644 --- a/test/i18n.js +++ b/test/i18n.js @@ -163,7 +163,7 @@ describe('i18n', () => { assert.strictEqual( sourceKeys.length, translationKeys.length, - `Extra keys found in namespace ${namespace.slice(1, -5)} for language "${language}"` + `Extra keys found in namespace "${namespace.slice(1, -5)}" for language "${language}"` ); }); });