commit 75e061a

Yonle  ·  2023-07-23 16:11:02 +0000 UTC
parent 4003883
html.c & httpd.c: Fix hardlink.

Some people may still want to post in the web client with such different
way, Such as posting from Yggdrasil / SSH port forwarder, and so on.

This commit gives the workaround for that purpose, However things will
go messed up when current path were ends with / (Like: user/, admin/).

But overall, If user just uses it like normal, Then things will just
worked well as expected.

Signed-off-by: Yonle <yonle@lecturify.net>
2 files changed,  +32, -38
M html.c
M html.c
+31, -37
  1@@ -325,8 +325,8 @@ d_char *html_user_header(snac *snac, d_char *s, int local)
  2             s1 = xs_fmt(
  3                 "<a href=\"%s.rss\">%s</a> - "
  4                 "<a href=\"%s/admin\" rel=\"nofollow\">%s</a></nav>\n",
  5-                snac->actor, L("RSS"),
  6-                snac->actor, L("private"));
  7+                snac->uid, L("RSS"),
  8+                snac->uid, L("private"));
  9         else {
 10             xs *n_list = notify_list(snac, 1);
 11             int n_len  = xs_list_len(n_list);
 12@@ -340,18 +340,17 @@ d_char *html_user_header(snac *snac, d_char *s, int local)
 13                 n_str = xs_str_new("");
 14 
 15             s1 = xs_fmt(
 16-                "<a href=\"%s\">%s</a> - "
 17-                "<a href=\"%s/admin\">%s</a> - "
 18-                "<a href=\"%s/notifications\">%s</a>%s - "
 19-                "<a href=\"%s/people\">%s</a> - "
 20-                "<a href=\"%s/settings\">%s</a>"
 21-                "</nav>\n",
 22-                snac->actor, L("public"),
 23-                snac->actor, L("private"),
 24-                snac->actor, L("notifications"), n_str,
 25-                snac->actor, L("people"),
 26-                snac->actor, L("settings")
 27-            );
 28+                "<a href=\"../%s\">%s</a> - "
 29+                "<a href=\"admin\">%s</a> - "
 30+                "<a href=\"notifications\">%s</a>%s - "
 31+                "<a href=\"people\">%s</a></nav>\n"
 32+                "<a href=\"settings\">%s</a>"
 33+                "</nav>"
 34+                snac->uid, L("public"),
 35+                L("private"),
 36+                L("notifications"), n_str,
 37+                L("people"),
 38+                L("settings"));
 39         }
 40 
 41         s = xs_str_cat(s, s1);
 42@@ -398,7 +397,7 @@ xs_str *html_top_controls(snac *snac, xs_str *s, int settings)
 43         "<div class=\"snac-note\" %s>\n"
 44         "<details><summary>%s</summary>\n"
 45         "<form autocomplete=\"off\" method=\"post\" "
 46-        "action=\"%s/admin/note\" enctype=\"multipart/form-data\">\n"
 47+        "action=\"admin/note\" enctype=\"multipart/form-data\">\n"
 48         "<textarea class=\"snac-textarea\" name=\"content\" "
 49         "rows=\"8\" wrap=\"virtual\" required=\"required\" placeholder=\"What's on your mind?\"></textarea>\n"
 50         "<input type=\"hidden\" name=\"in_reply_to\" value=\"\">\n"
 51@@ -435,12 +434,12 @@ xs_str *html_top_controls(snac *snac, xs_str *s, int settings)
 52         "<div class=\"snac-top-controls-more\" %s>\n"
 53         "<p><details><summary>%s</summary>\n"
 54 
 55-        "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n" /** follow **/
 56+        "<form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" /** follow **/
 57         "<input type=\"text\" name=\"actor\" required=\"required\" placeholder=\"bob@example.com\">\n"
 58         "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n"
 59         "</form><p>\n"
 60 
 61-        "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n" /** boost **/
 62+        "<form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n" /** boost **/
 63         "<input type=\"text\" name=\"id\" required=\"required\" placeholder=\"https://fedi.example.com/bob/....\">\n"
 64         "<input type=\"submit\" name=\"action\" value=\"%s\"> %s\n"
 65         "</form><p>\n"
 66@@ -453,7 +452,7 @@ xs_str *html_top_controls(snac *snac, xs_str *s, int settings)
 67 
 68         "<div class=\"snac-user-setup\">\n" /** user setup **/
 69         "<form autocomplete=\"off\" method=\"post\" "
 70-        "action=\"%s/admin/user-setup\" enctype=\"multipart/form-data\">\n"
 71+        "action=\"admin/user-setup\" enctype=\"multipart/form-data\">\n"
 72         "<p>%s:<br>\n"
 73         "<input type=\"text\" name=\"name\" value=\"%s\" placeholder=\"Your name.\"></p>\n"
 74 
 75@@ -538,7 +537,6 @@ xs_str *html_top_controls(snac *snac, xs_str *s, int settings)
 76     xs *s1 = xs_fmt(_tmpl,
 77         settings ? "style=\"display: none\"" : "",
 78         L("New Post..."),
 79-        snac->actor,
 80         L("Sensitive content"),
 81         L("Sensitive content description"),
 82         L("Only for mentioned people"),
 83@@ -560,16 +558,12 @@ xs_str *html_top_controls(snac *snac, xs_str *s, int settings)
 84         settings ? "style=\"display: none\"" : "",
 85         L("Operations..."),
 86 
 87-        snac->actor,
 88         L("Follow"), L("(by URL or user@host)"),
 89-
 90-        snac->actor,
 91         L("Boost"), L("(by URL)"),
 92 
 93         !settings ? "style=\"display: none\"" : "",
 94 
 95         L("User Settings"),
 96-        snac->actor,
 97         L("Display name"),
 98         es1,
 99         L("Avatar"),
100@@ -673,13 +667,13 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch
101 
102     {
103         xs *s1 = xs_fmt(
104-            "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n"
105+            "<form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n"
106             "<input type=\"hidden\" name=\"id\" value=\"%s\">\n"
107             "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n"
108             "<input type=\"hidden\" name=\"redir\" value=\"%s_entry\">\n"
109             "\n",
110 
111-            snac->actor, id, actor, md5
112+            id, actor, md5
113         );
114 
115         s = xs_str_cat(s, s1);
116@@ -733,7 +727,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch
117         xs *s1 = xs_fmt(
118             "<p><details><summary>%s</summary>\n"
119             "<p><div class=\"snac-note\" id=\"%s_edit\">\n"
120-            "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/note\" "
121+            "<form autocomplete=\"off\" method=\"post\" action=\"admin/note\" "
122             "enctype=\"multipart/form-data\" id=\"%s_edit_form\">\n"
123             "<textarea class=\"snac-textarea\" name=\"content\" "
124             "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n"
125@@ -784,7 +778,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch
126         xs *s1 = xs_fmt(
127             "<p><details><summary>%s</summary>\n"
128             "<p><div class=\"snac-note\" id=\"%s_reply\">\n"
129-            "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/note\" "
130+            "<form autocomplete=\"off\" method=\"post\" action=\"admin/note\" "
131             "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n"
132             "<textarea class=\"snac-textarea\" name=\"content\" "
133             "rows=\"4\" wrap=\"virtual\" required=\"required\">%s</textarea>\n"
134@@ -807,7 +801,7 @@ xs_str *html_entry_controls(snac *snac, xs_str *os, const xs_dict *msg, const ch
135 
136             L("Reply..."),
137             md5,
138-            snac->actor, md5,
139+            md5,
140             ct,
141             id,
142             L("Sensitive content"),
143@@ -1102,10 +1096,10 @@ xs_str *html_entry(snac *snac, xs_str *os, const xs_dict *msg, int local,
144                 /* poll still active */
145                 xs *s1 = xs_fmt("<div class=\"snac-poll-form\">\n"
146                                 "<form autocomplete=\"off\" "
147-                                "method=\"post\" action=\"%s/admin/vote\">\n"
148+                                "method=\"post\" action=\"admin/vote\">\n"
149                                 "<input type=\"hidden\" name=\"actor\" value= \"%s\">\n"
150                                 "<input type=\"hidden\" name=\"irt\" value=\"%s\">\n",
151-                    snac->actor, actor, id);
152+                    actor, id);
153 
154                 while (xs_list_iter(&p, &v)) {
155                     const char *name = xs_dict_get(v, "name");
156@@ -1495,11 +1489,11 @@ d_char *html_people_list(snac *snac, d_char *os, d_char *list, const char *heade
157             s = xs_str_cat(s, "<div class=\"snac-controls\">\n");
158 
159             xs *s1 = xs_fmt(
160-                "<p><form autocomplete=\"off\" method=\"post\" action=\"%s/admin/action\">\n"
161+                "<p><form autocomplete=\"off\" method=\"post\" action=\"admin/action\">\n"
162                 "<input type=\"hidden\" name=\"actor\" value=\"%s\">\n"
163                 "<input type=\"hidden\" name=\"actor-form\" value=\"yes\">\n",
164 
165-                snac->actor, actor_id
166+                actor_id
167             );
168             s = xs_str_cat(s, s1);
169 
170@@ -1523,7 +1517,7 @@ d_char *html_people_list(snac *snac, d_char *os, d_char *list, const char *heade
171             xs *s2 = xs_fmt(
172                 "<p><details><summary>%s</summary>\n"
173                 "<p><div class=\"snac-note\" id=\"%s_%s_dm\">\n"
174-                "<form autocomplete=\"off\" method=\"post\" action=\"%s/admin/note\" "
175+                "<form autocomplete=\"off\" method=\"post\" action=\"admin/note\" "
176                 "enctype=\"multipart/form-data\" id=\"%s_reply_form\">\n"
177                 "<textarea class=\"snac-textarea\" name=\"content\" "
178                 "rows=\"4\" wrap=\"virtual\" required=\"required\"></textarea>\n"
179@@ -1535,7 +1529,7 @@ d_char *html_people_list(snac *snac, d_char *os, d_char *list, const char *heade
180 
181                 L("Direct Message..."),
182                 md5, t,
183-                snac->actor, md5,
184+                md5,
185                 actor_id,
186                 L("Post")
187             );
188@@ -1586,9 +1580,9 @@ xs_str *html_notifications(snac *snac)
189 
190     xs *s1 = xs_fmt(
191         "<form autocomplete=\"off\" "
192-        "method=\"post\" action=\"%s/admin/clear-notifications\" id=\"clear\">\n"
193+        "method=\"post\" action=\"admin/clear-notifications\" id=\"clear\">\n"
194         "<input type=\"submit\" class=\"snac-btn-like\" value=\"%s\">\n"
195-        "</form><p>\n", snac->actor, L("Clear all"));
196+        "</form><p>\n", L("Clear all"));
197     s = xs_str_cat(s, s1);
198 
199     while (xs_list_iter(&p, &v)) {
200@@ -2402,7 +2396,7 @@ int html_post_handler(const xs_dict *req, const char *q_path,
201         if (xs_is_null(redir))
202             redir = "snac-posts";
203 
204-        *body   = xs_fmt("%s/admin#%s", snac.actor, redir);
205+        *body   = xs_fmt("../admin#%s", redir);
206         *b_size = strlen(*body);
207     }
208 
+1, -1
1@@ -91,7 +91,7 @@ int server_get_handler(xs_dict *req, char *q_path,
2                     if (user_open(&snac, uid)) {
3                         xs *u = xs_fmt(
4                             "<li><a href=\"%s\">@%s@%s (%s)</a></li>\n",
5-                                snac.actor, uid, host,
6+                                uid, uid, host,
7                                 xs_dict_get(snac.config, "name"));
8 
9                         ul = xs_str_cat(ul, u);