diff options
| author | 2023-05-07 07:27:24 +0000 | |
|---|---|---|
| committer | 2023-05-07 07:27:24 +0000 | |
| commit | e65760a349112abce39404ca50f6bc2f1301bed9 (patch) | |
| tree | c2484af8006961d95dcf39cf16c3749100a713c9 /activitypub.c | |
| parent | Fixed webfinger and curl issues (diff) | |
| parent | Version 2.30 RELEASED. (diff) | |
| download | snac2-e65760a349112abce39404ca50f6bc2f1301bed9.tar.gz snac2-e65760a349112abce39404ca50f6bc2f1301bed9.tar.xz snac2-e65760a349112abce39404ca50f6bc2f1301bed9.zip | |
Merge pull request 'master' (#1) from grunfink/snac2:master into master
Reviewed-on: https://codeberg.org/poesty/snac2/pulls/1
Diffstat (limited to 'activitypub.c')
| -rw-r--r-- | activitypub.c | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/activitypub.c b/activitypub.c index c8c166d..9069d03 100644 --- a/activitypub.c +++ b/activitypub.c | |||
| @@ -109,7 +109,7 @@ int actor_request(snac *snac, const char *actor, xs_dict **data) | |||
| 109 | 109 | ||
| 110 | if (valid_status(status2)) { | 110 | if (valid_status(status2)) { |
| 111 | /* renew data */ | 111 | /* renew data */ |
| 112 | status = actor_add(snac, actor, payload); | 112 | status = actor_add(actor, payload); |
| 113 | 113 | ||
| 114 | if (data != NULL) { | 114 | if (data != NULL) { |
| 115 | *data = payload; | 115 | *data = payload; |
| @@ -437,7 +437,8 @@ void process_tags(snac *snac, const char *content, d_char **n_content, d_char ** | |||
| 437 | 437 | ||
| 438 | /** messages **/ | 438 | /** messages **/ |
| 439 | 439 | ||
| 440 | d_char *msg_base(snac *snac, char *type, char *id, char *actor, char *date, char *object) | 440 | xs_dict *msg_base(snac *snac, const char *type, const char *id, |
| 441 | const char *actor, const char *date, const char *object) | ||
| 441 | /* creates a base ActivityPub message */ | 442 | /* creates a base ActivityPub message */ |
| 442 | { | 443 | { |
| 443 | xs *did = NULL; | 444 | xs *did = NULL; |
| @@ -467,7 +468,7 @@ d_char *msg_base(snac *snac, char *type, char *id, char *actor, char *date, char | |||
| 467 | } | 468 | } |
| 468 | } | 469 | } |
| 469 | 470 | ||
| 470 | d_char *msg = xs_dict_new(); | 471 | xs_dict *msg = xs_dict_new(); |
| 471 | 472 | ||
| 472 | msg = xs_dict_append(msg, "@context", "https:/" "/www.w3.org/ns/activitystreams"); | 473 | msg = xs_dict_append(msg, "@context", "https:/" "/www.w3.org/ns/activitystreams"); |
| 473 | msg = xs_dict_append(msg, "type", type); | 474 | msg = xs_dict_append(msg, "type", type); |
| @@ -845,6 +846,28 @@ xs_dict *msg_note(snac *snac, const xs_str *content, const xs_val *rcpts, | |||
| 845 | } | 846 | } |
| 846 | 847 | ||
| 847 | 848 | ||
| 849 | xs_dict *msg_ping(snac *user, const char *rcpt) | ||
| 850 | /* creates a Ping message (https://humungus.tedunangst.com/r/honk/v/tip/f/docs/ping.txt) */ | ||
| 851 | { | ||
| 852 | xs_dict *msg = msg_base(user, "Ping", "@dummy", user->actor, NULL, NULL); | ||
| 853 | |||
| 854 | msg = xs_dict_append(msg, "to", rcpt); | ||
| 855 | |||
| 856 | return msg; | ||
| 857 | } | ||
| 858 | |||
| 859 | |||
| 860 | xs_dict *msg_pong(snac *user, const char *rcpt, const char *object) | ||
| 861 | /* creates a Pong message (https://humungus.tedunangst.com/r/honk/v/tip/f/docs/ping.txt) */ | ||
| 862 | { | ||
| 863 | xs_dict *msg = msg_base(user, "Pong", "@dummy", user->actor, NULL, object); | ||
| 864 | |||
| 865 | msg = xs_dict_append(msg, "to", rcpt); | ||
| 866 | |||
| 867 | return msg; | ||
| 868 | } | ||
| 869 | |||
| 870 | |||
| 848 | void notify(snac *snac, xs_str *type, xs_str *utype, xs_str *actor, xs_dict *msg) | 871 | void notify(snac *snac, xs_str *type, xs_str *utype, xs_str *actor, xs_dict *msg) |
| 849 | /* notifies the user of relevant events */ | 872 | /* notifies the user of relevant events */ |
| 850 | { | 873 | { |
| @@ -1121,7 +1144,7 @@ int process_input_message(snac *snac, xs_dict *msg, xs_dict *req) | |||
| 1121 | else | 1144 | else |
| 1122 | if (strcmp(type, "Update") == 0) { | 1145 | if (strcmp(type, "Update") == 0) { |
| 1123 | if (strcmp(utype, "Person") == 0) { | 1146 | if (strcmp(utype, "Person") == 0) { |
| 1124 | actor_add(snac, actor, xs_dict_get(msg, "object")); | 1147 | actor_add(actor, xs_dict_get(msg, "object")); |
| 1125 | 1148 | ||
| 1126 | snac_log(snac, xs_fmt("updated actor %s", actor)); | 1149 | snac_log(snac, xs_fmt("updated actor %s", actor)); |
| 1127 | } | 1150 | } |
| @@ -1147,7 +1170,19 @@ int process_input_message(snac *snac, xs_dict *msg, xs_dict *req) | |||
| 1147 | snac_debug(snac, 1, xs_fmt("ignored 'Delete' for unknown object %s", object)); | 1170 | snac_debug(snac, 1, xs_fmt("ignored 'Delete' for unknown object %s", object)); |
| 1148 | } | 1171 | } |
| 1149 | else | 1172 | else |
| 1150 | snac_debug(snac, 1, xs_fmt("process_message type '%s' ignored", type)); | 1173 | if (strcmp(type, "Pong") == 0) { |
| 1174 | snac_log(snac, xs_fmt("'Pong' received from %s", actor)); | ||
| 1175 | } | ||
| 1176 | else | ||
| 1177 | if (strcmp(type, "Ping") == 0) { | ||
| 1178 | snac_log(snac, xs_fmt("'Ping' requested from %s", actor)); | ||
| 1179 | |||
| 1180 | xs *rsp = msg_pong(snac, actor, xs_dict_get(msg, "id")); | ||
| 1181 | |||
| 1182 | enqueue_output_by_actor(snac, rsp, actor, 0); | ||
| 1183 | } | ||
| 1184 | else | ||
| 1185 | snac_debug(snac, 1, xs_fmt("process_input_message type '%s' ignored", type)); | ||
| 1151 | 1186 | ||
| 1152 | if (do_notify) { | 1187 | if (do_notify) { |
| 1153 | notify(snac, type, utype, actor, msg); | 1188 | notify(snac, type, utype, actor, msg); |
| @@ -1384,8 +1419,9 @@ void process_queue_item(xs_dict *q_item) | |||
| 1384 | xs *headers = xs_dict_new(); | 1419 | xs *headers = xs_dict_new(); |
| 1385 | headers = xs_dict_append(headers, "content-type", "application/json"); | 1420 | headers = xs_dict_append(headers, "content-type", "application/json"); |
| 1386 | 1421 | ||
| 1387 | xs *rsp = xs_http_request("POST", url, headers, | 1422 | xs *rsp = xs_http_request("POST", url, headers, |
| 1388 | body, strlen(body), &status, NULL, NULL, 0); | 1423 | body, strlen(body), &status, NULL, NULL, 0); |
| 1424 | rsp = xs_free(rsp); | ||
| 1389 | 1425 | ||
| 1390 | srv_debug(0, xs_fmt("telegram post %d", status)); | 1426 | srv_debug(0, xs_fmt("telegram post %d", status)); |
| 1391 | } | 1427 | } |
| @@ -1426,7 +1462,7 @@ int process_queue(void) | |||
| 1426 | 1462 | ||
| 1427 | /** HTTP handlers */ | 1463 | /** HTTP handlers */ |
| 1428 | 1464 | ||
| 1429 | int activitypub_get_handler(d_char *req, char *q_path, | 1465 | int activitypub_get_handler(const xs_dict *req, const char *q_path, |
| 1430 | char **body, int *b_size, char **ctype) | 1466 | char **body, int *b_size, char **ctype) |
| 1431 | { | 1467 | { |
| 1432 | int status = 200; | 1468 | int status = 200; |
| @@ -1519,11 +1555,13 @@ int activitypub_get_handler(d_char *req, char *q_path, | |||
| 1519 | } | 1555 | } |
| 1520 | 1556 | ||
| 1521 | 1557 | ||
| 1522 | int activitypub_post_handler(d_char *req, char *q_path, | 1558 | int activitypub_post_handler(const xs_dict *req, const char *q_path, |
| 1523 | d_char *payload, int p_size, | 1559 | char *payload, int p_size, |
| 1524 | char **body, int *b_size, char **ctype) | 1560 | char **body, int *b_size, char **ctype) |
| 1525 | /* processes an input message */ | 1561 | /* processes an input message */ |
| 1526 | { | 1562 | { |
| 1563 | (void)b_size; | ||
| 1564 | |||
| 1527 | int status = 202; /* accepted */ | 1565 | int status = 202; /* accepted */ |
| 1528 | char *i_ctype = xs_dict_get(req, "content-type"); | 1566 | char *i_ctype = xs_dict_get(req, "content-type"); |
| 1529 | snac snac; | 1567 | snac snac; |