diff options
| author | grunfink <grunfink@comam.es> | 2026-04-27 08:07:32 +0200 |
|---|---|---|
| committer | grunfink <grunfink@comam.es> | 2026-04-27 08:07:32 +0200 |
| commit | c307e99141e27b8d2bab035a08a9e7ce3af7d03f (patch) | |
| tree | 84b4edb30fdcd7b249a384bd62295555eea05751 | |
| parent | 56d7d767b99dc27ded257df4b7e182932ab626d3 (diff) | |
In URL searches, try first the ActivityPub object, then the Webfinger.
This fixes an error when searching for GotoSocial statuses,
as they are incorrectly identified as accounts.
| -rw-r--r-- | html.c | 62 |
1 files changed, 30 insertions, 32 deletions
@@ -4761,48 +4761,46 @@ int html_get_handler(const xs_dict *req, const char *q_path, /* searching for an URL? */ if (q && xs_match(q, "https://*|http://*")) { - /* may by an actor; try a webfinger */ + /* bring it to the user's timeline */ xs *actor_obj = NULL; + xs *object = NULL; + int status; - if (valid_status(webfinger_request(q, &actor_obj, &url_acct)) && xs_is_string(url_acct)) { - /* it's an actor; do the dirty trick of changing q to the account name */ - q = url_acct; - } - else { - /* bring it to the user's timeline */ - xs *object = NULL; - int status; - - status = activitypub_request(&snac, q, &object); - snac_debug(&snac, 1, xs_fmt("Request searched URL %s %d", q, status)); + status = activitypub_request(&snac, q, &object); + snac_debug(&snac, 1, xs_fmt("Request searched URL %s %d", q, status)); - if (valid_status(status)) { - /* got it; also request the actor */ - const char *attr_to = get_atto(object); + if (valid_status(status) && xs_is_dict(object)) { + /* got it; also request the actor */ + const char *attr_to = get_atto(object); - if (!xs_is_null(attr_to)) { - status = actor_request(&snac, attr_to, &actor_obj); + if (!xs_is_null(attr_to)) { + status = actor_request(&snac, attr_to, &actor_obj); - if (valid_status(status)) { - /* reset the query string to be the real id */ - url_acct = xs_dup(xs_dict_get(object, "id")); - q = url_acct; + if (valid_status(status)) { + /* reset the query string to be the real id */ + url_acct = xs_dup(xs_dict_get(object, "id")); + q = url_acct; - /* add the post to the timeline */ - if (!timeline_here(&snac, q)) - timeline_add(&snac, q, object); - } + /* add the post to the timeline */ + if (!timeline_here(&snac, q)) + timeline_add(&snac, q, object); } - else { - /* retry webfinger, this time with the 'official' id */ - const char *id = xs_dict_get(object, "id"); + } + else { + /* retry webfinger, this time with the 'official' id */ + const char *id = xs_dict_get(object, "id"); - if (xs_is_string(id) && valid_status(webfinger_request(id, &actor_obj, &url_acct)) && - xs_is_string(url_acct)) - q = url_acct; - } + if (xs_is_string(id) && valid_status(webfinger_request(id, &actor_obj, &url_acct)) && + xs_is_string(url_acct)) + q = url_acct; } } + else + /* may by an actor; try a webfinger */ + if (valid_status(webfinger_request(q, &actor_obj, &url_acct)) && xs_is_string(url_acct)) { + /* it's an actor; do the dirty trick of changing q to the account name */ + q = url_acct; + } /* fall through */ } |