commit 33b6f2a

default  ·  2024-12-31 16:42:33 +0000 UTC
parent 5c33066
More work in the Mastodon-share webpoint.
2 files changed,  +35, -2
M html.c
M html.c
+34, -1
 1@@ -2917,6 +2917,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
 2     int proxy = 0;
 3     const char *v;
 4 
 5+    const xs_dict *q_vars = xs_dict_get(req, "q_vars");
 6+
 7     xs *l = xs_split_n(q_path, "/", 2);
 8     v = xs_list_get(l, 1);
 9 
10@@ -2925,6 +2927,23 @@ int html_get_handler(const xs_dict *req, const char *q_path,
11         return HTTP_STATUS_NOT_FOUND;
12     }
13 
14+    if (strcmp(v, "share-bridge") == 0) {
15+        /* temporary redirect for a post */
16+        const char *login = xs_dict_get(q_vars, "login");
17+        const char *content = xs_dict_get(q_vars, "content");
18+
19+        if (xs_type(login) == XSTYPE_STRING && xs_type(content) == XSTYPE_STRING) {
20+            xs *b64 = xs_base64_enc(content, strlen(content));
21+
22+            srv_log(xs_fmt("share-bridge for user '%s'", login));
23+
24+            *body = xs_fmt("%s/%s/share?content=%s", srv_baseurl, login, b64);
25+            return HTTP_STATUS_SEE_OTHER;
26+        }
27+        else
28+            return HTTP_STATUS_NOT_FOUND;
29+    }
30+
31     uid = xs_dup(v);
32 
33     /* rss extension? */
34@@ -2959,7 +2978,6 @@ int html_get_handler(const xs_dict *req, const char *q_path,
35     int def_show = xs_number_get(xs_dict_get(srv_config, "max_timeline_entries"));
36     int show = def_show;
37 
38-    const xs_dict *q_vars = xs_dict_get(req, "q_vars");
39     if ((v = xs_dict_get(q_vars, "skip")) != NULL)
40         skip = atoi(v), cache = 0, save = 0;
41     if ((v = xs_dict_get(q_vars, "show")) != NULL)
42@@ -3472,6 +3490,21 @@ int html_get_handler(const xs_dict *req, const char *q_path,
43             snac_debug(&snac, 1, xs_fmt("Proxy for %s %d", url, status));
44         }
45     }
46+    else
47+    if (strcmp(p_path, "share") == 0) { /** direct post **/
48+        if (!login(&snac, req)) {
49+            *body  = xs_dup(uid);
50+            status = HTTP_STATUS_UNAUTHORIZED;
51+        }
52+        else {
53+            const char *content = xs_dict_get(q_vars, "content");
54+
55+//            srv_log(xs_fmt("---> SHARE %s", content));
56+            *body   = xs_fmt("%s/admin", snac.actor);
57+            *b_size = strlen(*body);
58+            status  = HTTP_STATUS_SEE_OTHER;
59+        }
60+    }
61     else
62         status = HTTP_STATUS_NOT_FOUND;
63 
+1, -1
1@@ -173,7 +173,7 @@ const char *share_page = ""
2 "<style>:root {color-scheme: light dark}</style>\n"
3 "</head>\n"
4 "<body><h1>%s link share</h1>\n"
5-"<form method=\"post\" action=\"%s/share-bridge\">\n"
6+"<form method=\"get\" action=\"%s/share-bridge\">\n"
7 "<textarea name=\"content\" rows=\"6\" wrap=\"virtual\" required=\"required\" style=\"width: 50em\">%s</textarea>\n"
8 "<p>Login: <input type=\"text\" name=\"login\" autocapitalize=\"off\" required=\"required\"></p>\n"
9 "<input type=\"submit\" value=\"OK\">\n"