summaryrefslogtreecommitdiff
path: root/activitypub.c
diff options
context:
space:
mode:
Diffstat (limited to 'activitypub.c')
-rw-r--r--activitypub.c56
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
440d_char *msg_base(snac *snac, char *type, char *id, char *actor, char *date, char *object) 440xs_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
849xs_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
860xs_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
848void notify(snac *snac, xs_str *type, xs_str *utype, xs_str *actor, xs_dict *msg) 871void 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
1429int activitypub_get_handler(d_char *req, char *q_path, 1465int 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
1522int activitypub_post_handler(d_char *req, char *q_path, 1558int 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;