summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar grunfink2023-07-24 16:16:14 +0000
committerGravatar grunfink2023-07-24 16:16:14 +0000
commit1882c25a179273510312b2341dbdff8b74df5e3c (patch)
treea9d4cb2f7f7d38bb71efcbde78de9bed8ef79eaa
parentMerge pull request 'Web Client: Do not hard link on <a> element' (#75) from y... (diff)
parenthtml.c: Put "User Settings" outside of "Operations". (diff)
downloadsnac2-1882c25a179273510312b2341dbdff8b74df5e3c.tar.gz
snac2-1882c25a179273510312b2341dbdff8b74df5e3c.tar.xz
snac2-1882c25a179273510312b2341dbdff8b74df5e3c.zip
Merge pull request 'Major rollback & Put "User Settings" outside of "Operations...."' (#76) from yonle/snac2:master into master
Reviewed-on: https://codeberg.org/grunfink/snac2/pulls/76
-rw-r--r--RELEASE_NOTES.md4
-rw-r--r--html.c68
-rw-r--r--httpd.c2
-rw-r--r--snac.h2
4 files changed, 39 insertions, 37 deletions
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 9d387f3..f7e281c 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,9 +1,5 @@
1# Release Notes 1# Release Notes
2 2
3## 2.39
4
5User settings have been moved to their own page.
6
7## 2.38 3## 2.38
8 4
9More vulnerability fixes (contributed by yonle). 5More vulnerability fixes (contributed by yonle).
diff --git a/html.c b/html.c
index 725c064..7ce94f2 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
1 /* snac - A simple, minimalistic ActivityPub instance */ 1/* snac - A simple, minimalistic ActivityPub instance */
2/* copyright (c) 2022 - 2023 grunfink / MIT license */ 2/* copyright (c) 2022 - 2023 grunfink / MIT license */
3 3
4#include "xs.h" 4#include "xs.h"
@@ -325,8 +325,8 @@ d_char *html_user_header(snac *snac, d_char *s, int local)
325 s1 = xs_fmt( 325 s1 = xs_fmt(
326 "<a href=\"%s.rss\">%s</a> - " 326 "<a href=\"%s.rss\">%s</a> - "
327 "<a href=\"%s/admin\" rel=\"nofollow\">%s</a></nav>\n", 327 "<a href=\"%s/admin\" rel=\"nofollow\">%s</a></nav>\n",
328 snac->uid, L("RSS"), 328 snac->actor, L("RSS"),
329 snac->uid, L("private")); 329 snac->actor, L("private"));
330 else { 330 else {
331 xs *n_list = notify_list(snac, 1); 331 xs *n_list = notify_list(snac, 1);
332 int n_len = xs_list_len(n_list); 332 int n_len = xs_list_len(n_list);
@@ -340,14 +340,14 @@ d_char *html_user_header(snac *snac, d_char *s, int local)
340 n_str = xs_str_new(""); 340 n_str = xs_str_new("");
341 341
342 s1 = xs_fmt( 342 s1 = xs_fmt(
343 "<a href=\"../%s\">%s</a> - " 343 "<a href=\"%s\">%s</a> - "
344 "<a href=\"admin\">%s</a> - " 344 "<a href=\"%s/admin\">%s</a> - "
345 "<a href=\"notifications\">%s</a>%s - " 345 "<a href=\"%s/notifications\">%s</a>%s - "
346 "<a href=\"people\">%s</a></nav>\n", 346 "<a href=\"%s/people\">%s</a></nav>\n",
347 snac->uid, L("public"), 347 snac->actor, L("public"),
348 L("private"), 348 snac->actor, L("private"),
349 L("notifications"), n_str, 349 snac->actor, L("notifications"), n_str,
350 L("people")); 350 snac->actor, L("people"));
351 } 351 }
352 352
353 s = xs_str_cat(s, s1); 353 s = xs_str_cat(s, s1);
@@ -394,7 +394,7 @@ d_char *html_top_controls(snac *snac, d_char *s)
394 "<div class=\"snac-note\">\n" 394 "<div class=\"snac-note\">\n"
395 "<details><summary>%s</summary>\n" 395 "<details><summary>%s</summary>\n"
396 "<form autocomplete=\"off\" method=\"post\" " 396 "<form autocomplete=\"off\" method=\"post\" "
397 "action=\"admin/note\" enctype=\"multipart/form-data\">\n" 397 "action=\"%s/admin/note\" enctype=\"multipart/form-data\">\n"
398 "<textarea class=\"snac-textarea\" name=\"content\" " 398 "<textarea class=\"snac-textarea\" name=\"content\" "
399 "rows=\"8\" wrap=\"virtual\" required=\"required\" placeholder=\"What's on your mind?\"></textarea>\n" 399 "rows=\"8\" wrap=\"virtual\" required=\"required\" placeholder=\"What's on your mind?\"></textarea>\n"
400 "<input type=\"hidden\" name=\"in_reply_to\" value=\"\">\n" 400 "<input type=\"hidden\" name=\"in_reply_to\" value=\"\">\n"
@@ -431,12 +431,12 @@ d_char *html_top_controls(snac *snac, d_char *s)
431 "<div class=\"snac-top-controls-more\">\n" 431 "<div class=\"snac-top-controls-more\">\n"
432 "<details><summary>%s</summary>\n" 432 "<details><summary>%s</summary>\n"
433 433
434 "<form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" /** follow **/ 434 "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n" /** follow **/
435 "<input type=\"text\" name=\"actor\" required=\"required\" placeholder=\"bob@example.com\">\n" 435 "<input type=\"text\" name=\"actor\" required=\"required\" placeholder=\"bob@example.com\">\n"
436 "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" 436 "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n"
437 "</form><p>\n" 437 "</form><p>\n"
438 438
439 "<form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" /** boost **/ 439 "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n" /** boost **/
440 "<input type=\"text\" name=\"id\" required=\"required\" placeholder=\"https://fedi.example.com/bob/....\">\n" 440 "<input type=\"text\" name=\"id\" required=\"required\" placeholder=\"https://fedi.example.com/bob/....\">\n"
441 "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n" 441 "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n"
442 "</form><p>\n" 442 "</form><p>\n"
@@ -446,7 +446,7 @@ d_char *html_top_controls(snac *snac, d_char *s)
446 446
447 "<div class=\"snac-user-setup\">\n" /** user setup **/ 447 "<div class=\"snac-user-setup\">\n" /** user setup **/
448 "<form autocomplete=\"off\" method=\"post\" " 448 "<form autocomplete=\"off\" method=\"post\" "
449 "action=\"admin/user-setup\" enctype=\"multipart/form-data\">\n" 449 "action=\"%s/admin/user-setup\" enctype=\"multipart/form-data\">\n"
450 "<p>%s:<br>\n" 450 "<p>%s:<br>\n"
451 "<input type=\"text\" name=\"name\" value=\"%s\" placeholder=\"Your name.\"></p>\n" 451 "<input type=\"text\" name=\"name\" value=\"%s\" placeholder=\"Your name.\"></p>\n"
452 452
@@ -531,6 +531,7 @@ d_char *html_top_controls(snac *snac, d_char *s)
531 531
532 xs *s1 = xs_fmt(_tmpl, 532 xs *s1 = xs_fmt(_tmpl,
533 L("New Post..."), 533 L("New Post..."),
534 snac->actor,
534 L("Sensitive content"), 535 L("Sensitive content"),
535 L("Sensitive content description"), 536 L("Sensitive content description"),
536 L("Only for mentioned people"), 537 L("Only for mentioned people"),
@@ -550,10 +551,15 @@ d_char *html_top_controls(snac *snac, d_char *s)
550 L("Post"), 551 L("Post"),
551 552
552 L("Operations..."), 553 L("Operations..."),
554
555 snac->actor,
553 L("Follow"), L("(by URL or user@host)"), 556 L("Follow"), L("(by URL or user@host)"),
557
558 snac->actor,
554 L("Boost"), L("(by URL)"), 559 L("Boost"), L("(by URL)"),
555 560
556 L("User Settings..."), 561 L("User Settings..."),
562 snac->actor,
557 L("Display name"), 563 L("Display name"),
558 es1, 564 es1,
559 L("Avatar"), 565 L("Avatar"),
@@ -657,13 +663,13 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch
657 663
658 { 664 {
659 xs *s1 = xs_fmt( 665 xs *s1 = xs_fmt(
660 "<form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" 666 "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n"
661 "<input type=\"hidden\" name=\"id\" value=\"%s\">\n" 667 "<input type=\"hidden\" name=\"id\" value=\"%s\">\n"
662 "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n" 668 "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n"
663 "<input type=\"hidden\" name=\"redir\" value=\"%s_entry\">\n" 669 "<input type=\"hidden\" name=\"redir\" value=\"%s_entry\">\n"
664 "\n", 670 "\n",
665 671
666 id, actor, md5 672 snac->actor, id, actor, md5
667 ); 673 );
668 674
669 s = xs_str_cat(s, s1); 675 s = xs_str_cat(s, s1);
@@ -717,7 +723,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch
717 xs *s1 = xs_fmt( 723 xs *s1 = xs_fmt(
718 "<p><details><summary>%s</summary>\n" 724 "<p><details><summary>%s</summary>\n"
719 "<p><div class=\"snac-note\" id=\"%s_edit\">\n" 725 "<p><div class=\"snac-note\" id=\"%s_edit\">\n"
720 "<form autocomplete=\"off\" method=\"post\" action=\"admin/note\" " 726 "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/note\" "
721 "enctype=\"multipart/form-data\" id=\"%s_edit_form\">\n" 727 "enctype=\"multipart/form-data\" id=\"%s_edit_form\">\n"
722 "<textarea class=\"snac-textarea\" name=\"content\" " 728 "<textarea class=\"snac-textarea\" name=\"content\" "
723 "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n" 729 "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n"
@@ -740,7 +746,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch
740 746
741 L("Edit..."), 747 L("Edit..."),
742 md5, 748 md5,
743 md5, 749 snac->actor, md5,
744 prev_src, 750 prev_src,
745 id, 751 id,
746 L("Sensitive content"), 752 L("Sensitive content"),
@@ -768,7 +774,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch
768 xs *s1 = xs_fmt( 774 xs *s1 = xs_fmt(
769 "<p><details><summary>%s</summary>\n" 775 "<p><details><summary>%s</summary>\n"
770 "<p><div class=\"snac-note\" id=\"%s_reply\">\n" 776 "<p><div class=\"snac-note\" id=\"%s_reply\">\n"
771 "<form autocomplete=\"off\" method=\"post\" action=\"admin/note\" " 777 "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/note\" "
772 "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n" 778 "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n"
773 "<textarea class=\"snac-textarea\" name=\"content\" " 779 "<textarea class=\"snac-textarea\" name=\"content\" "
774 "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n" 780 "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n"
@@ -791,7 +797,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch
791 797
792 L("Reply..."), 798 L("Reply..."),
793 md5, 799 md5,
794 md5, 800 snac->actor, md5,
795 ct, 801 ct,
796 id, 802 id,
797 L("Sensitive content"), 803 L("Sensitive content"),
@@ -1086,10 +1092,10 @@ xs_str *html_entry(snac *snac, xs_str *os, const xs_dict *msg, int local,
1086 /* poll still active */ 1092 /* poll still active */
1087 xs *s1 = xs_fmt("<div class=\"snac-poll-form\">\n" 1093 xs *s1 = xs_fmt("<div class=\"snac-poll-form\">\n"
1088 "<form autocomplete=\"off\" " 1094 "<form autocomplete=\"off\" "
1089 "method=\"post\" action=\"admin/vote\">\n" 1095 "method=\"post\" action=\"%s/admin/vote\">\n"
1090 "<input type=\"hidden\" name=\"actor\" value= \"%s\">\n" 1096 "<input type=\"hidden\" name=\"actor\" value= \"%s\">\n"
1091 "<input type=\"hidden\" name=\"irt\" value=\"%s\">\n", 1097 "<input type=\"hidden\" name=\"irt\" value=\"%s\">\n",
1092 actor, id); 1098 snac->actor, actor, id);
1093 1099
1094 while (xs_list_iter(&p, &v)) { 1100 while (xs_list_iter(&p, &v)) {
1095 const char *name = xs_dict_get(v, "name"); 1101 const char *name = xs_dict_get(v, "name");
@@ -1479,11 +1485,11 @@ d_char *html_people_list(snac *snac, d_char *os, d_char *list, const char *heade
1479 s = xs_str_cat(s, "<div class=\"snac-controls\">\n"); 1485 s = xs_str_cat(s, "<div class=\"snac-controls\">\n");
1480 1486
1481 xs *s1 = xs_fmt( 1487 xs *s1 = xs_fmt(
1482 "<p><form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" 1488 "<p><form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n"
1483 "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n" 1489 "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n"
1484 "<input type=\"hidden\" name=\"actor-form\" value=\"yes\">\n", 1490 "<input type=\"hidden\" name=\"actor-form\" value=\"yes\">\n",
1485 1491
1486 actor_id 1492 snac->actor, actor_id
1487 ); 1493 );
1488 s = xs_str_cat(s, s1); 1494 s = xs_str_cat(s, s1);
1489 1495
@@ -1507,7 +1513,7 @@ d_char *html_people_list(snac *snac, d_char *os, d_char *list, const char *heade
1507 xs *s2 = xs_fmt( 1513 xs *s2 = xs_fmt(
1508 "<p><details><summary>%s</summary>\n" 1514 "<p><details><summary>%s</summary>\n"
1509 "<p><div class=\"snac-note\" id=\"%s_%s_dm\">\n" 1515 "<p><div class=\"snac-note\" id=\"%s_%s_dm\">\n"
1510 "<form autocomplete=\"off\" method=\"post\" action=\"admin/note\" " 1516 "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/note\" "
1511 "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n" 1517 "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n"
1512 "<textarea class=\"snac-textarea\" name=\"content\" " 1518 "<textarea class=\"snac-textarea\" name=\"content\" "
1513 "rows=\"4\" wrap=\"virtual\" required=\"required\"></textarea>\n" 1519 "rows=\"4\" wrap=\"virtual\" required=\"required\"></textarea>\n"
@@ -1519,7 +1525,7 @@ d_char *html_people_list(snac *snac, d_char *os, d_char *list, const char *heade
1519 1525
1520 L("Direct Message..."), 1526 L("Direct Message..."),
1521 md5, t, 1527 md5, t,
1522 md5, 1528 snac->actor, md5,
1523 actor_id, 1529 actor_id,
1524 L("Post") 1530 L("Post")
1525 ); 1531 );
@@ -1570,9 +1576,9 @@ xs_str *html_notifications(snac *snac)
1570 1576
1571 xs *s1 = xs_fmt( 1577 xs *s1 = xs_fmt(
1572 "<form autocomplete=\"off\" " 1578 "<form autocomplete=\"off\" "
1573 "method=\"post\" action=\"admin/clear-notifications\" id=\"clear\">\n" 1579 "method=\"post\" action=\"%s/admin/clear-notifications\" id=\"clear\">\n"
1574 "<input type=\"submit\" class=\"snac-btn-like\" value=\"%s\">\n" 1580 "<input type=\"submit\" class=\"snac-btn-like\" value=\"%s\">\n"
1575 "</form><p>\n", L("Clear all")); 1581 "</form><p>\n", snac->actor, L("Clear all"));
1576 s = xs_str_cat(s, s1); 1582 s = xs_str_cat(s, s1);
1577 1583
1578 while (xs_list_iter(&p, &v)) { 1584 while (xs_list_iter(&p, &v)) {
@@ -2372,9 +2378,9 @@ int html_post_handler(const xs_dict *req, const char *q_path,
2372 char *redir = xs_dict_get(p_vars, "redir"); 2378 char *redir = xs_dict_get(p_vars, "redir");
2373 2379
2374 if (xs_is_null(redir)) 2380 if (xs_is_null(redir))
2375 redir = ""; 2381 redir = "snac-posts";
2376 2382
2377 *body = xs_fmt("../admin#%s", redir); 2383 *body = xs_fmt("%s/admin#%s", snac.actor, redir);
2378 *b_size = strlen(*body); 2384 *b_size = strlen(*body);
2379 } 2385 }
2380 2386
diff --git a/httpd.c b/httpd.c
index 1d2200e..9aac3b5 100644
--- a/httpd.c
+++ b/httpd.c
@@ -91,7 +91,7 @@ int server_get_handler(xs_dict *req, char *q_path,
91 if (user_open(&snac, uid)) { 91 if (user_open(&snac, uid)) {
92 xs *u = xs_fmt( 92 xs *u = xs_fmt(
93 "<li><a href=\"%s\">@%s@%s (%s)</a></li>\n", 93 "<li><a href=\"%s\">@%s@%s (%s)</a></li>\n",
94 uid, uid, host, 94 snac.actor, uid, host,
95 xs_dict_get(snac.config, "name")); 95 xs_dict_get(snac.config, "name"));
96 96
97 ul = xs_str_cat(ul, u); 97 ul = xs_str_cat(ul, u);
diff --git a/snac.h b/snac.h
index 2fd0fce..df13ddd 100644
--- a/snac.h
+++ b/snac.h
@@ -1,7 +1,7 @@
1/* snac - A simple, minimalistic ActivityPub instance */ 1/* snac - A simple, minimalistic ActivityPub instance */
2/* copyright (c) 2022 - 2023 grunfink / MIT license */ 2/* copyright (c) 2022 - 2023 grunfink / MIT license */
3 3
4#define VERSION "2.39-dev" 4#define VERSION "2.38"
5 5
6#define USER_AGENT "snac/" VERSION 6#define USER_AGENT "snac/" VERSION
7 7