diff options
| -rw-r--r-- | activitypub.c | 30 | ||||
| -rw-r--r-- | html.c | 17 | ||||
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | snac.h | 2 |
4 files changed, 44 insertions, 7 deletions
diff --git a/activitypub.c b/activitypub.c index 8771ee8..fb790d5 100644 --- a/activitypub.c +++ b/activitypub.c | |||
| @@ -508,7 +508,7 @@ d_char *msg_follow(snac *snac, char *actor) | |||
| 508 | } | 508 | } |
| 509 | 509 | ||
| 510 | 510 | ||
| 511 | d_char *msg_note(snac *snac, char *content, char *rcpts, char *in_reply_to) | 511 | d_char *msg_note(snac *snac, char *content, char *rcpts, char *in_reply_to, char *attach) |
| 512 | /* creates a 'Note' message */ | 512 | /* creates a 'Note' message */ |
| 513 | { | 513 | { |
| 514 | xs *ntid = tid(0); | 514 | xs *ntid = tid(0); |
| @@ -520,6 +520,7 @@ d_char *msg_note(snac *snac, char *content, char *rcpts, char *in_reply_to) | |||
| 520 | xs *cc = xs_list_new(); | 520 | xs *cc = xs_list_new(); |
| 521 | xs *irt = NULL; | 521 | xs *irt = NULL; |
| 522 | xs *tag = NULL; | 522 | xs *tag = NULL; |
| 523 | xs *atls = NULL; | ||
| 523 | d_char *msg = msg_base(snac, "Note", id, NULL, "@now", NULL); | 524 | d_char *msg = msg_base(snac, "Note", id, NULL, "@now", NULL); |
| 524 | char *p, *v; | 525 | char *p, *v; |
| 525 | 526 | ||
| @@ -561,6 +562,30 @@ d_char *msg_note(snac *snac, char *content, char *rcpts, char *in_reply_to) | |||
| 561 | else | 562 | else |
| 562 | irt = xs_val_new(XSTYPE_NULL); | 563 | irt = xs_val_new(XSTYPE_NULL); |
| 563 | 564 | ||
| 565 | /* create the attachment list, if there are any */ | ||
| 566 | if (!xs_is_null(attach) && *attach != '\0') { | ||
| 567 | xs *lsof1 = NULL; | ||
| 568 | |||
| 569 | if (xs_type(attach) == XSTYPE_STRING) { | ||
| 570 | lsof1 = xs_list_append(xs_list_new(), attach); | ||
| 571 | attach = lsof1; | ||
| 572 | } | ||
| 573 | |||
| 574 | atls = xs_list_new(); | ||
| 575 | while (xs_list_iter(&attach, &v)) { | ||
| 576 | xs *d = xs_dict_new(); | ||
| 577 | char *mime = xs_mime_by_ext(v); | ||
| 578 | |||
| 579 | d = xs_dict_append(d, "mediaType", mime); | ||
| 580 | d = xs_dict_append(d, "url", v); | ||
| 581 | d = xs_dict_append(d, "name", ""); | ||
| 582 | d = xs_dict_append(d, "type", | ||
| 583 | xs_startswith(mime, "image/") ? "Image" : "Document"); | ||
| 584 | |||
| 585 | atls = xs_list_append(atls, d); | ||
| 586 | } | ||
| 587 | } | ||
| 588 | |||
| 564 | if (tag == NULL) | 589 | if (tag == NULL) |
| 565 | tag = xs_list_new(); | 590 | tag = xs_list_new(); |
| 566 | 591 | ||
| @@ -594,6 +619,9 @@ d_char *msg_note(snac *snac, char *content, char *rcpts, char *in_reply_to) | |||
| 594 | msg = xs_dict_append(msg, "inReplyTo", irt); | 619 | msg = xs_dict_append(msg, "inReplyTo", irt); |
| 595 | msg = xs_dict_append(msg, "tag", tag); | 620 | msg = xs_dict_append(msg, "tag", tag); |
| 596 | 621 | ||
| 622 | if (atls != NULL) | ||
| 623 | msg = xs_dict_append(msg, "attachment", atls); | ||
| 624 | |||
| 597 | return msg; | 625 | return msg; |
| 598 | } | 626 | } |
| 599 | 627 | ||
| @@ -195,6 +195,7 @@ d_char *html_top_controls(snac *snac, d_char *s) | |||
| 195 | "rows=\"8\" wrap=\"virtual\" required=\"required\"></textarea>\n" | 195 | "rows=\"8\" wrap=\"virtual\" required=\"required\"></textarea>\n" |
| 196 | "<input type=\"hidden\" name=\"in_reply_to\" value=\"\">\n" | 196 | "<input type=\"hidden\" name=\"in_reply_to\" value=\"\">\n" |
| 197 | "<input type=\"submit\" class=\"button\" value=\"%s\">\n" | 197 | "<input type=\"submit\" class=\"button\" value=\"%s\">\n" |
| 198 | "<input type=\"text\" name=\"attach_url\"> Image URL<p>" | ||
| 198 | "</form><p>\n" | 199 | "</form><p>\n" |
| 199 | "</div>\n" | 200 | "</div>\n" |
| 200 | 201 | ||
| @@ -204,12 +205,12 @@ d_char *html_top_controls(snac *snac, d_char *s) | |||
| 204 | "<form method=\"post\" action=\"%s/admin/action\">\n" | 205 | "<form method=\"post\" action=\"%s/admin/action\">\n" |
| 205 | "<input type=\"text\" name=\"actor\" required=\"required\">\n" | 206 | "<input type=\"text\" name=\"actor\" required=\"required\">\n" |
| 206 | "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" | 207 | "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" |
| 207 | "</form></p>\n" | 208 | "</form><p>\n" |
| 208 | 209 | ||
| 209 | "<form method=\"post\" action=\"%s/admin/action\">\n" | 210 | "<form method=\"post\" action=\"%s/admin/action\">\n" |
| 210 | "<input type=\"text\" name=\"id\" required=\"required\">\n" | 211 | "<input type=\"text\" name=\"id\" required=\"required\">\n" |
| 211 | "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" | 212 | "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" |
| 212 | "</form></p>\n" | 213 | "</form><p>\n" |
| 213 | 214 | ||
| 214 | "<details><summary>%s</summary>\n" | 215 | "<details><summary>%s</summary>\n" |
| 215 | 216 | ||
| @@ -222,7 +223,7 @@ d_char *html_top_controls(snac *snac, d_char *s) | |||
| 222 | "<input type=\"text\" name=\"avatar\" value=\"%s\"></p>\n" | 223 | "<input type=\"text\" name=\"avatar\" value=\"%s\"></p>\n" |
| 223 | 224 | ||
| 224 | "<p>%s:<br>\n" | 225 | "<p>%s:<br>\n" |
| 225 | "<textarea name=\"bio\" cols=60 rows=4>%s</textarea></p>\n" | 226 | "<textarea name=\"bio\" cols=\"40\" rows=\"4\">%s</textarea></p>\n" |
| 226 | 227 | ||
| 227 | "<p>%s:<br>\n" | 228 | "<p>%s:<br>\n" |
| 228 | "<input type=\"password\" name=\"passwd1\" value=\"\"></p>\n" | 229 | "<input type=\"password\" name=\"passwd1\" value=\"\"></p>\n" |
| @@ -854,16 +855,24 @@ int html_post_handler(d_char *req, char *q_path, d_char *payload, int p_size, | |||
| 854 | 855 | ||
| 855 | p_vars = xs_dict_get(req, "p_vars"); | 856 | p_vars = xs_dict_get(req, "p_vars"); |
| 856 | 857 | ||
| 858 | #if 0 | ||
| 859 | { | ||
| 860 | xs *j1 = xs_json_dumps_pp(p_vars, 4); | ||
| 861 | printf("%s\n", j1); | ||
| 862 | } | ||
| 863 | #endif | ||
| 864 | |||
| 857 | if (p_path && strcmp(p_path, "admin/note") == 0) { | 865 | if (p_path && strcmp(p_path, "admin/note") == 0) { |
| 858 | /* post note */ | 866 | /* post note */ |
| 859 | char *content = xs_dict_get(p_vars, "content"); | 867 | char *content = xs_dict_get(p_vars, "content"); |
| 860 | char *in_reply_to = xs_dict_get(p_vars, "in_reply_to"); | 868 | char *in_reply_to = xs_dict_get(p_vars, "in_reply_to"); |
| 869 | char *attach_url = xs_dict_get(p_vars, "attach_url"); | ||
| 861 | 870 | ||
| 862 | if (content != NULL) { | 871 | if (content != NULL) { |
| 863 | xs *msg = NULL; | 872 | xs *msg = NULL; |
| 864 | xs *c_msg = NULL; | 873 | xs *c_msg = NULL; |
| 865 | 874 | ||
| 866 | msg = msg_note(&snac, content, NULL, in_reply_to); | 875 | msg = msg_note(&snac, content, NULL, in_reply_to, attach_url); |
| 867 | 876 | ||
| 868 | c_msg = msg_create(&snac, msg); | 877 | c_msg = msg_create(&snac, msg); |
| 869 | 878 | ||
| @@ -235,7 +235,7 @@ int main(int argc, char *argv[]) | |||
| 235 | else | 235 | else |
| 236 | content = xs_dup(url); | 236 | content = xs_dup(url); |
| 237 | 237 | ||
| 238 | msg = msg_note(&snac, content, NULL, in_reply_to); | 238 | msg = msg_note(&snac, content, NULL, in_reply_to, NULL); |
| 239 | 239 | ||
| 240 | c_msg = msg_create(&snac, msg); | 240 | c_msg = msg_create(&snac, msg); |
| 241 | 241 | ||
| @@ -111,7 +111,7 @@ int webfinger_get_handler(d_char *req, char *q_path, | |||
| 111 | d_char *msg_admiration(snac *snac, char *object, char *type); | 111 | d_char *msg_admiration(snac *snac, char *object, char *type); |
| 112 | d_char *msg_create(snac *snac, char *object); | 112 | d_char *msg_create(snac *snac, char *object); |
| 113 | d_char *msg_follow(snac *snac, char *actor); | 113 | d_char *msg_follow(snac *snac, char *actor); |
| 114 | d_char *msg_note(snac *snac, char *content, char *rcpts, char *in_reply_to); | 114 | d_char *msg_note(snac *snac, char *content, char *rcpts, char *in_reply_to, char *attach); |
| 115 | d_char *msg_undo(snac *snac, char *object); | 115 | d_char *msg_undo(snac *snac, char *object); |
| 116 | d_char *msg_delete(snac *snac, char *id); | 116 | d_char *msg_delete(snac *snac, char *id); |
| 117 | d_char *msg_actor(snac *snac); | 117 | d_char *msg_actor(snac *snac); |