summaryrefslogtreecommitdiff
path: root/html.c
diff options
context:
space:
mode:
authorGravatar default2024-12-31 17:42:33 +0100
committerGravatar default2024-12-31 17:42:33 +0100
commit33b6f2af00de70a7c0eb768ea7bf815d2f124aae (patch)
tree1b418e6deb960e424bbfbd0b6b9437d6be87dc6a /html.c
parentStarted support for Mastodon-like /share endpoint. (diff)
downloadsnac2-33b6f2af00de70a7c0eb768ea7bf815d2f124aae.tar.gz
snac2-33b6f2af00de70a7c0eb768ea7bf815d2f124aae.tar.xz
snac2-33b6f2af00de70a7c0eb768ea7bf815d2f124aae.zip
More work in the Mastodon-share webpoint.
Diffstat (limited to 'html.c')
-rw-r--r--html.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/html.c b/html.c
index 409023d..f750f59 100644
--- a/html.c
+++ b/html.c
@@ -2917,6 +2917,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
2917 int proxy = 0; 2917 int proxy = 0;
2918 const char *v; 2918 const char *v;
2919 2919
2920 const xs_dict *q_vars = xs_dict_get(req, "q_vars");
2921
2920 xs *l = xs_split_n(q_path, "/", 2); 2922 xs *l = xs_split_n(q_path, "/", 2);
2921 v = xs_list_get(l, 1); 2923 v = xs_list_get(l, 1);
2922 2924
@@ -2925,6 +2927,23 @@ int html_get_handler(const xs_dict *req, const char *q_path,
2925 return HTTP_STATUS_NOT_FOUND; 2927 return HTTP_STATUS_NOT_FOUND;
2926 } 2928 }
2927 2929
2930 if (strcmp(v, "share-bridge") == 0) {
2931 /* temporary redirect for a post */
2932 const char *login = xs_dict_get(q_vars, "login");
2933 const char *content = xs_dict_get(q_vars, "content");
2934
2935 if (xs_type(login) == XSTYPE_STRING && xs_type(content) == XSTYPE_STRING) {
2936 xs *b64 = xs_base64_enc(content, strlen(content));
2937
2938 srv_log(xs_fmt("share-bridge for user '%s'", login));
2939
2940 *body = xs_fmt("%s/%s/share?content=%s", srv_baseurl, login, b64);
2941 return HTTP_STATUS_SEE_OTHER;
2942 }
2943 else
2944 return HTTP_STATUS_NOT_FOUND;
2945 }
2946
2928 uid = xs_dup(v); 2947 uid = xs_dup(v);
2929 2948
2930 /* rss extension? */ 2949 /* rss extension? */
@@ -2959,7 +2978,6 @@ int html_get_handler(const xs_dict *req, const char *q_path,
2959 int def_show = xs_number_get(xs_dict_get(srv_config, "max_timeline_entries")); 2978 int def_show = xs_number_get(xs_dict_get(srv_config, "max_timeline_entries"));
2960 int show = def_show; 2979 int show = def_show;
2961 2980
2962 const xs_dict *q_vars = xs_dict_get(req, "q_vars");
2963 if ((v = xs_dict_get(q_vars, "skip")) != NULL) 2981 if ((v = xs_dict_get(q_vars, "skip")) != NULL)
2964 skip = atoi(v), cache = 0, save = 0; 2982 skip = atoi(v), cache = 0, save = 0;
2965 if ((v = xs_dict_get(q_vars, "show")) != NULL) 2983 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,
3473 } 3491 }
3474 } 3492 }
3475 else 3493 else
3494 if (strcmp(p_path, "share") == 0) { /** direct post **/
3495 if (!login(&snac, req)) {
3496 *body = xs_dup(uid);
3497 status = HTTP_STATUS_UNAUTHORIZED;
3498 }
3499 else {
3500 const char *content = xs_dict_get(q_vars, "content");
3501
3502// srv_log(xs_fmt("---> SHARE %s", content));
3503 *body = xs_fmt("%s/admin", snac.actor);
3504 *b_size = strlen(*body);
3505 status = HTTP_STATUS_SEE_OTHER;
3506 }
3507 }
3508 else
3476 status = HTTP_STATUS_NOT_FOUND; 3509 status = HTTP_STATUS_NOT_FOUND;
3477 3510
3478 user_free(&snac); 3511 user_free(&snac);