mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-29 18:16:17 +01:00
fix: bugs in user searching causing remote lookups to fail
This commit is contained in:
@@ -39,7 +39,7 @@ Actors.assert = async (ids, options = {}) => {
|
|||||||
ids = (await Promise.all(ids.map(async (id) => {
|
ids = (await Promise.all(ids.map(async (id) => {
|
||||||
const originalId = id;
|
const originalId = id;
|
||||||
if (activitypub.helpers.isWebfinger(id)) {
|
if (activitypub.helpers.isWebfinger(id)) {
|
||||||
const host = id.split('@')[1];
|
const host = id.replace(/^(acct:|@)/, '').split('@')[1];
|
||||||
if (host === nconf.get('url_parsed').host) { // do not assert loopback ids
|
if (host === nconf.get('url_parsed').host) { // do not assert loopback ids
|
||||||
return 'loopback';
|
return 'loopback';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,10 +58,12 @@ Helpers.query = async (id) => {
|
|||||||
// username@host ids use acct: URI schema
|
// username@host ids use acct: URI schema
|
||||||
const uri = isUri ? new URL(id) : new URL(`acct:${id}`);
|
const uri = isUri ? new URL(id) : new URL(`acct:${id}`);
|
||||||
// JS doesn't parse anything other than protocol and pathname from acct: URIs, so we need to just split id manually
|
// JS doesn't parse anything other than protocol and pathname from acct: URIs, so we need to just split id manually
|
||||||
const [username, hostname] = isUri ? [uri.pathname || uri.href, uri.host] : id.split('@');
|
let [username, hostname] = isUri ? [uri.pathname || uri.href, uri.host] : id.split('@');
|
||||||
if (!username || !hostname) {
|
if (!username || !hostname) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
username = username.trim();
|
||||||
|
hostname = hostname.trim();
|
||||||
|
|
||||||
const cached = webfingerCache.get(id);
|
const cached = webfingerCache.get(id);
|
||||||
if (cached !== undefined) {
|
if (cached !== undefined) {
|
||||||
@@ -159,7 +161,7 @@ Helpers.resolveLocalId = async (input) => {
|
|||||||
return { type: null, id: null };
|
return { type: null, id: null };
|
||||||
} else if (String(input).indexOf('@') !== -1) { // Webfinger
|
} else if (String(input).indexOf('@') !== -1) { // Webfinger
|
||||||
input = decodeURIComponent(input);
|
input = decodeURIComponent(input);
|
||||||
const [slug] = input.replace(/^acct:/, '').split('@');
|
const [slug] = input.replace(/^(acct:|@)/, '').split('@');
|
||||||
const uid = await user.getUidByUserslug(slug);
|
const uid = await user.getUidByUserslug(slug);
|
||||||
return { type: 'user', id: uid };
|
return { type: 'user', id: uid };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ module.exports = function (User) {
|
|||||||
const handle = activitypub.helpers.isWebfinger(data.query);
|
const handle = activitypub.helpers.isWebfinger(data.query);
|
||||||
if (handle || activitypub.helpers.isUri(data.query)) {
|
if (handle || activitypub.helpers.isUri(data.query)) {
|
||||||
const local = await activitypub.helpers.resolveLocalId(data.query);
|
const local = await activitypub.helpers.resolveLocalId(data.query);
|
||||||
if (local.type === 'user') {
|
if (local.type === 'user' && utils.isNumber(local.id)) {
|
||||||
uids = [local.id];
|
uids = [local.id];
|
||||||
} else {
|
} else {
|
||||||
const assertion = await activitypub.actors.assert([handle || data.query]);
|
const assertion = await activitypub.actors.assert([handle || data.query]);
|
||||||
|
|||||||
Reference in New Issue
Block a user