commit 9518bc664c6e2eb1d4308657797174a0f748b3af
parent dc4fcd6f6c7d69c9b2e794d3c2dfb6f75bea572a
Author: default <nobody@localhost>
Date: Tue, 31 Dec 2024 17:43:55 +0100
Merge branch 'master' of comam.es:git/snac2
Diffstat:
M | html.c | | | 35 | ++++++++++++++++++++++++++++++++++- |
M | httpd.c | | | 39 | +++++++++++++++++++++++++++++++++++++++ |
2 files changed, 73 insertions(+), 1 deletion(-)
diff --git a/html.c b/html.c
@@ -2934,6 +2934,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
int proxy = 0;
const char *v;
+ const xs_dict *q_vars = xs_dict_get(req, "q_vars");
+
xs *l = xs_split_n(q_path, "/", 2);
v = xs_list_get(l, 1);
@@ -2942,6 +2944,23 @@ int html_get_handler(const xs_dict *req, const char *q_path,
return HTTP_STATUS_NOT_FOUND;
}
+ if (strcmp(v, "share-bridge") == 0) {
+ /* temporary redirect for a post */
+ const char *login = xs_dict_get(q_vars, "login");
+ const char *content = xs_dict_get(q_vars, "content");
+
+ if (xs_type(login) == XSTYPE_STRING && xs_type(content) == XSTYPE_STRING) {
+ xs *b64 = xs_base64_enc(content, strlen(content));
+
+ srv_log(xs_fmt("share-bridge for user '%s'", login));
+
+ *body = xs_fmt("%s/%s/share?content=%s", srv_baseurl, login, b64);
+ return HTTP_STATUS_SEE_OTHER;
+ }
+ else
+ return HTTP_STATUS_NOT_FOUND;
+ }
+
uid = xs_dup(v);
/* rss extension? */
@@ -2976,7 +2995,6 @@ int html_get_handler(const xs_dict *req, const char *q_path,
int def_show = xs_number_get(xs_dict_get(srv_config, "max_timeline_entries"));
int show = def_show;
- const xs_dict *q_vars = xs_dict_get(req, "q_vars");
if ((v = xs_dict_get(q_vars, "skip")) != NULL)
skip = atoi(v), cache = 0, save = 0;
if ((v = xs_dict_get(q_vars, "show")) != NULL)
@@ -3490,6 +3508,21 @@ int html_get_handler(const xs_dict *req, const char *q_path,
}
}
else
+ if (strcmp(p_path, "share") == 0) { /** direct post **/
+ if (!login(&snac, req)) {
+ *body = xs_dup(uid);
+ status = HTTP_STATUS_UNAUTHORIZED;
+ }
+ else {
+ const char *content = xs_dict_get(q_vars, "content");
+
+// srv_log(xs_fmt("---> SHARE %s", content));
+ *body = xs_fmt("%s/admin", snac.actor);
+ *b_size = strlen(*body);
+ status = HTTP_STATUS_SEE_OTHER;
+ }
+ }
+ else
status = HTTP_STATUS_NOT_FOUND;
user_free(&snac);
diff --git a/httpd.c b/httpd.c
@@ -164,6 +164,23 @@ static xs_str *greeting_html(void)
}
+const char *share_page = ""
+"<!DOCTYPE html>\n"
+"<html>\n"
+"<head>\n"
+"<title>%s - snac</title>\n"
+"<meta content=\"width=device-width, initial-scale=1, minimum-scale=1, user-scalable=no\" name=\"viewport\">"
+"<style>:root {color-scheme: light dark}</style>\n"
+"</head>\n"
+"<body><h1>%s link share</h1>\n"
+"<form method=\"get\" action=\"%s/share-bridge\">\n"
+"<textarea name=\"content\" rows=\"6\" wrap=\"virtual\" required=\"required\" style=\"width: 50em\">%s</textarea>\n"
+"<p>Login: <input type=\"text\" name=\"login\" autocapitalize=\"off\" required=\"required\"></p>\n"
+"<input type=\"submit\" value=\"OK\">\n"
+"</form><p>%s</p></body></html>\n"
+"";
+
+
int server_get_handler(xs_dict *req, const char *q_path,
char **body, int *b_size, char **ctype)
/* basic server services */
@@ -257,6 +274,28 @@ int server_get_handler(xs_dict *req, const char *q_path,
*body = xs_str_new("User-agent: *\n"
"Disallow: /\n");
}
+ else
+ if (strcmp(q_path, "/share") == 0) {
+ const xs_dict *q_vars = xs_dict_get(req, "q_vars");
+ const char *url = xs_dict_get(q_vars, "url");
+ const char *text = xs_dict_get(q_vars, "text");
+ xs *s = NULL;
+
+ if (xs_type(text) == XSTYPE_STRING)
+ s = xs_fmt("%s\n\n%s\n", text, url);
+ else
+ s = xs_fmt("%s\n", url);
+
+ status = HTTP_STATUS_OK;
+ *ctype = "text/html";
+ *body = xs_fmt(share_page,
+ xs_dict_get(srv_config, "host"),
+ xs_dict_get(srv_config, "host"),
+ srv_baseurl,
+ s,
+ USER_AGENT
+ );
+ }
if (status != 0)
srv_debug(1, xs_fmt("server_get_handler serving '%s' %d", q_path, status));