commit 9518bc6
Merge branch 'master' of comam.es:git/snac2
M
html.c
+34,
-1
1@@ -2934,6 +2934,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@@ -2942,6 +2944,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@@ -2976,7 +2995,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@@ -3489,6 +3507,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
M
httpd.c
+39,
-0
1@@ -164,6 +164,23 @@ static xs_str *greeting_html(void)
2 }
3
4
5+const char *share_page = ""
6+"<!DOCTYPE html>\n"
7+"<html>\n"
8+"<head>\n"
9+"<title>%s - snac</title>\n"
10+"<meta content=\"width=device-width, initial-scale=1, minimum-scale=1, user-scalable=no\" name=\"viewport\">"
11+"<style>:root {color-scheme: light dark}</style>\n"
12+"</head>\n"
13+"<body><h1>%s link share</h1>\n"
14+"<form method=\"get\" action=\"%s/share-bridge\">\n"
15+"<textarea name=\"content\" rows=\"6\" wrap=\"virtual\" required=\"required\" style=\"width: 50em\">%s</textarea>\n"
16+"<p>Login: <input type=\"text\" name=\"login\" autocapitalize=\"off\" required=\"required\"></p>\n"
17+"<input type=\"submit\" value=\"OK\">\n"
18+"</form><p>%s</p></body></html>\n"
19+"";
20+
21+
22 int server_get_handler(xs_dict *req, const char *q_path,
23 char **body, int *b_size, char **ctype)
24 /* basic server services */
25@@ -257,6 +274,28 @@ int server_get_handler(xs_dict *req, const char *q_path,
26 *body = xs_str_new("User-agent: *\n"
27 "Disallow: /\n");
28 }
29+ else
30+ if (strcmp(q_path, "/share") == 0) {
31+ const xs_dict *q_vars = xs_dict_get(req, "q_vars");
32+ const char *url = xs_dict_get(q_vars, "url");
33+ const char *text = xs_dict_get(q_vars, "text");
34+ xs *s = NULL;
35+
36+ if (xs_type(text) == XSTYPE_STRING)
37+ s = xs_fmt("%s\n\n%s\n", text, url);
38+ else
39+ s = xs_fmt("%s\n", url);
40+
41+ status = HTTP_STATUS_OK;
42+ *ctype = "text/html";
43+ *body = xs_fmt(share_page,
44+ xs_dict_get(srv_config, "host"),
45+ xs_dict_get(srv_config, "host"),
46+ srv_baseurl,
47+ s,
48+ USER_AGENT
49+ );
50+ }
51
52 if (status != 0)
53 srv_debug(1, xs_fmt("server_get_handler serving '%s' %d", q_path, status));