diff --git a/src/activitypub/actors.js b/src/activitypub/actors.js index 3c7f11d0c4..250afc4fc9 100644 --- a/src/activitypub/actors.js +++ b/src/activitypub/actors.js @@ -19,6 +19,16 @@ Actors.assert = async (ids, options = {}) => { // Filter out uids if passed in ids = ids.filter(id => !utils.isNumber(id)); + // Translate webfinger handles to uris + ids = await Promise.all(ids.map(async (id) => { + if (id.includes('@')) { + ({ actorUri: id } = await activitypub.helpers.query(id)); + } + + return id; + })); + + // Filter out existing if (!options.update) { const exists = await db.isSortedSetMembers('usersRemote:lastCrawled', ids.map(id => ((typeof id === 'object' && id.hasOwnProperty('id')) ? id.id : id))); diff --git a/src/user/index.js b/src/user/index.js index b518c78abf..971a2ab10d 100644 --- a/src/user/index.js +++ b/src/user/index.js @@ -8,6 +8,7 @@ const db = require('../database'); const privileges = require('../privileges'); const categories = require('../categories'); const meta = require('../meta'); +const activitypub = require('../activitypub'); const utils = require('../utils'); const User = module.exports; @@ -111,7 +112,8 @@ User.getUidByUserslug = async function (userslug) { } if (userslug.includes('@')) { - return (await db.getObjectField('handle:uid', userslug)) || 0; + await activitypub.actors.assert(userslug); + return (await db.getObjectField('handle:uid', userslug)) || null; } return await db.sortedSetScore('userslug:uid', userslug);