activitypub_request() may have a NULL user.

In the NULL user case, only non-signed requests will be done,
but it's probably enough for actor requests in most cases.
This commit is contained in:
default 2023-12-10 10:27:45 +01:00
parent 1c19404258
commit 90179f8459
2 changed files with 13 additions and 12 deletions

View file

@ -60,18 +60,22 @@ const char *default_avatar_base64(void)
} }
int activitypub_request(snac *snac, const char *url, xs_dict **data) int activitypub_request(snac *user, const char *url, xs_dict **data)
/* request an object */ /* request an object */
{ {
int status; int status = 0;
xs *response = NULL; xs *response = NULL;
xs *payload = NULL; xs *payload = NULL;
int p_size; int p_size;
char *ctype; char *ctype;
/* get from the net */ *data = NULL;
response = http_signed_request(snac, "GET", url,
NULL, NULL, 0, &status, &payload, &p_size, 0); if (user != NULL) {
/* get from the net */
response = http_signed_request(user, "GET", url,
NULL, NULL, 0, &status, &payload, &p_size, 0);
}
if (status == 0 || (status >= 500 && status <= 599)) { if (status == 0 || (status >= 500 && status <= 599)) {
/* I found an instance running Misskey that returned /* I found an instance running Misskey that returned
@ -107,14 +111,11 @@ int activitypub_request(snac *snac, const char *url, xs_dict **data)
status = 500; status = 500;
} }
if (!valid_status(status))
*data = NULL;
return status; return status;
} }
int actor_request(snac *snac, const char *actor, xs_dict **data) int actor_request(snac *user, const char *actor, xs_dict **data)
/* request an actor */ /* request an actor */
{ {
int status, status2; int status, status2;
@ -128,7 +129,7 @@ int actor_request(snac *snac, const char *actor, xs_dict **data)
if (status != 200) { if (status != 200) {
/* actor data non-existent or stale: get from the net */ /* actor data non-existent or stale: get from the net */
status2 = activitypub_request(snac, actor, &payload); status2 = activitypub_request(user, actor, &payload);
if (valid_status(status2)) { if (valid_status(status2)) {
/* renew data */ /* renew data */

4
http.c
View file

@ -120,7 +120,7 @@ xs_dict *http_signed_request(snac *snac, const char *method, const char *url,
} }
int check_signature(snac *snac, xs_dict *req, xs_str **err) int check_signature(snac *user, xs_dict *req, xs_str **err)
/* check the signature */ /* check the signature */
{ {
char *sig_hdr = xs_dict_get(req, "signature"); char *sig_hdr = xs_dict_get(req, "signature");
@ -173,7 +173,7 @@ int check_signature(snac *snac, xs_dict *req, xs_str **err)
xs *actor = NULL; xs *actor = NULL;
if (!valid_status(actor_request(snac, keyId, &actor))) { if (!valid_status(actor_request(user, keyId, &actor))) {
*err = xs_fmt("unknown actor %s", keyId); *err = xs_fmt("unknown actor %s", keyId);
return 0; return 0;
} }