diff options
author | default <nobody@localhost> | 2023-02-24 09:00:03 +0100 |
---|---|---|
committer | default <nobody@localhost> | 2023-02-24 09:00:03 +0100 |
commit | 1d82d13d620cda7cb51da764c74ca944e9e827e5 (patch) | |
tree | 930b65f4096d5a73cf1e717c7f98cef8ed0346db /activitypub.c | |
parent | 163051906640bc401ae7aefa97c101c3696c9167 (diff) |
In activitypub_request(), retry failed signed requests as non-signed.
Diffstat (limited to 'activitypub.c')
-rw-r--r-- | activitypub.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/activitypub.c b/activitypub.c index c05c859..cef5c02 100644 --- a/activitypub.c +++ b/activitypub.c @@ -55,13 +55,23 @@ int activitypub_request(snac *snac, char *url, d_char **data) int p_size; char *ctype; - /* check if it's an url for this same site */ - /* ... */ - /* get from the net */ response = http_signed_request(snac, "GET", url, NULL, NULL, 0, &status, &payload, &p_size, 0); + if (status == 0 || (status >= 500 && status <= 599)) { + /* I found an instance running Misskey that returned + 500 on signed messages but returned the object + perfectly without signing (?), so why not try */ + xs_free(response); + + xs *hdrs = xs_dict_new(); + hdrs = xs_dict_append(hdrs, "accept", "application/activity+json"); + + response = xs_http_request("GET", url, hdrs, + NULL, 0, &status, &payload, &p_size, 0); + } + if (valid_status(status)) { /* ensure it's ActivityPub data */ ctype = xs_dict_get(response, "content-type"); |