From 8d0a69cd759813b1304605d1676fbca063f0ccdc Mon Sep 17 00:00:00 2001 From: default Date: Mon, 11 Dec 2023 08:00:49 +0100 Subject: [PATCH] Reverted actor_request() without user. Some sites require even Person requests to be signed. --- activitypub.c | 16 ++++++++-------- http.c | 4 ++-- main.c | 6 +++--- mastoapi.c | 2 +- snac.h | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/activitypub.c b/activitypub.c index 5afe304..129148d 100644 --- a/activitypub.c +++ b/activitypub.c @@ -115,7 +115,7 @@ int activitypub_request(snac *user, const char *url, xs_dict **data) } -int actor_request(const char *actor, xs_dict **data) +int actor_request(snac *user, const char *actor, xs_dict **data) /* request an actor */ { int status, status2; @@ -129,7 +129,7 @@ int actor_request(const char *actor, xs_dict **data) if (status != 200) { /* actor data non-existent or stale: get from the net */ - status2 = activitypub_request(NULL, actor, &payload); + status2 = activitypub_request(user, actor, &payload); if (valid_status(status2)) { /* renew data */ @@ -207,7 +207,7 @@ int timeline_request(snac *snac, char **id, xs_str **wrk, int level) /* request (and drop) the actor for this entry */ if (!xs_is_null(actor)) - actor_request(actor, NULL); + actor_request(snac, actor, NULL); /* does it have an ancestor? */ char *in_reply_to = xs_dict_get(object, "inReplyTo"); @@ -331,7 +331,7 @@ xs_str *get_actor_inbox(const char *actor) xs *data = NULL; char *v = NULL; - if (valid_status(actor_request(actor, &data))) { + if (valid_status(actor_request(NULL, actor, &data))) { /* try first endpoints/sharedInbox */ if ((v = xs_dict_get(data, "endpoints"))) v = xs_dict_get(v, "sharedInbox"); @@ -1095,7 +1095,7 @@ xs_dict *msg_follow(snac *snac, const char *q) } /* request the actor */ - status = actor_request(actor, &actor_o); + status = actor_request(snac, actor, &actor_o); if (valid_status(status)) { /* check if the actor is an alias */ @@ -1501,7 +1501,7 @@ int process_input_message(snac *snac, xs_dict *msg, xs_dict *req) utype = "(null)"; /* bring the actor */ - a_status = actor_request(actor, &actor_o); + a_status = actor_request(snac, actor, &actor_o); /* do not retry permanent failures */ if (a_status == 404 || a_status == 410 || a_status < 0) { @@ -1520,7 +1520,7 @@ int process_input_message(snac *snac, xs_dict *msg, xs_dict *req) /* check the signature */ xs *sig_err = NULL; - if (!check_signature(req, &sig_err)) { + if (!check_signature(snac, req, &sig_err)) { srv_log(xs_fmt("bad signature %s (%s)", actor, sig_err)); srv_archive_error("check_signature", sig_err, req, msg); @@ -1683,7 +1683,7 @@ int process_input_message(snac *snac, xs_dict *msg, xs_dict *req) /* bring the actor */ xs *who_o = NULL; - if (valid_status(actor_request(who, &who_o))) { + if (valid_status(actor_request(snac, who, &who_o))) { timeline_admire(snac, object, actor, 0); snac_log(snac, xs_fmt("new 'Announce' %s %s", actor, object)); do_notify = 1; diff --git a/http.c b/http.c index 33ed53d..d7f1629 100644 --- a/http.c +++ b/http.c @@ -120,7 +120,7 @@ xs_dict *http_signed_request(snac *snac, const char *method, const char *url, } -int check_signature(xs_dict *req, xs_str **err) +int check_signature(snac *user, xs_dict *req, xs_str **err) /* check the signature */ { char *sig_hdr = xs_dict_get(req, "signature"); @@ -173,7 +173,7 @@ int check_signature(xs_dict *req, xs_str **err) xs *actor = NULL; - if (!valid_status(actor_request(keyId, &actor))) { + if (!valid_status(actor_request(user, keyId, &actor))) { *err = xs_fmt("unknown actor %s", keyId); return 0; } diff --git a/main.c b/main.c index 1e30ace..4ad1b4f 100644 --- a/main.c +++ b/main.c @@ -184,7 +184,7 @@ int main(int argc, char *argv[]) xs *actor = NULL; int status; - status = actor_request(user, &actor); + status = actor_request(NULL, user, &actor); printf("status: %d\n", status); if (valid_status(status)) { @@ -334,7 +334,7 @@ int main(int argc, char *argv[]) if (strcmp(cmd, "ping") == 0) { /** **/ xs *actor_o = NULL; - if (valid_status(actor_request(url, &actor_o))) { + if (valid_status(actor_request(&snac, url, &actor_o))) { xs *msg = msg_ping(&snac, url); enqueue_output_by_actor(&snac, msg, url, 0); @@ -409,7 +409,7 @@ int main(int argc, char *argv[]) int status; xs *data = NULL; - status = actor_request(url, &data); + status = actor_request(&snac, url, &data); printf("status: %d\n", status); diff --git a/mastoapi.c b/mastoapi.c index bf5f071..426e692 100644 --- a/mastoapi.c +++ b/mastoapi.c @@ -1944,7 +1944,7 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, if (valid_status(webfinger_request(q, &actor, &user))) { xs *actor_o = NULL; - if (valid_status(actor_request(actor, &actor_o))) { + if (valid_status(actor_request(&snac1, actor, &actor_o))) { xs *acct = mastoapi_account(actor_o); acl = xs_list_append(acl, acct); diff --git a/snac.h b/snac.h index 020aaa5..93a2e8f 100644 --- a/snac.h +++ b/snac.h @@ -212,7 +212,7 @@ xs_dict *http_signed_request(snac *snac, const char *method, const char *url, const char *body, int b_size, int *status, xs_str **payload, int *p_size, int timeout); -int check_signature(xs_dict *req, xs_str **err); +int check_signature(snac *user, xs_dict *req, xs_str **err); void httpd(void); @@ -242,7 +242,7 @@ xs_dict *msg_question(snac *user, const char *content, xs_list *attach, const xs_list *opts, int multiple, int end_secs); int activitypub_request(snac *snac, const char *url, xs_dict **data); -int actor_request(const char *actor, xs_dict **data); +int actor_request(snac *user, const char *actor, xs_dict **data); void timeline_request_replies(snac *user, const char *id); int send_to_inbox_raw(const char *keyid, const char *seckey, const xs_str *inbox, const xs_dict *msg,