diff options
| author | default <nobody@localhost> | 2024-12-31 17:42:33 +0100 |
|---|---|---|
| committer | default <nobody@localhost> | 2024-12-31 17:42:33 +0100 |
| commit | 33b6f2af00de70a7c0eb768ea7bf815d2f124aae (patch) | |
| tree | 1b418e6deb960e424bbfbd0b6b9437d6be87dc6a | |
| parent | 5c330660cda0bb7423d7e3f07924e56941455599 (diff) | |
More work in the Mastodon-share webpoint.
| -rw-r--r-- | html.c | 35 | ||||
| -rw-r--r-- | httpd.c | 2 |
2 files changed, 35 insertions, 2 deletions
@@ -2917,6 +2917,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); @@ -2925,6 +2927,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? */ @@ -2959,7 +2978,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) @@ -3473,6 +3491,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); @@ -173,7 +173,7 @@ const char *share_page = "" "<style>:root {color-scheme: light dark}</style>\n" "</head>\n" "<body><h1>%s link share</h1>\n" -"<form method=\"post\" action=\"%s/share-bridge\">\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" |