diff options
| -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, | |||
| 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); |
| @@ -173,7 +173,7 @@ const char *share_page = "" | |||
| 173 | "<style>:root {color-scheme: light dark}</style>\n" | 173 | "<style>:root {color-scheme: light dark}</style>\n" |
| 174 | "</head>\n" | 174 | "</head>\n" |
| 175 | "<body><h1>%s link share</h1>\n" | 175 | "<body><h1>%s link share</h1>\n" |
| 176 | "<form method=\"post\" action=\"%s/share-bridge\">\n" | 176 | "<form method=\"get\" action=\"%s/share-bridge\">\n" |
| 177 | "<textarea name=\"content\" rows=\"6\" wrap=\"virtual\" required=\"required\" style=\"width: 50em\">%s</textarea>\n" | 177 | "<textarea name=\"content\" rows=\"6\" wrap=\"virtual\" required=\"required\" style=\"width: 50em\">%s</textarea>\n" |
| 178 | "<p>Login: <input type=\"text\" name=\"login\" autocapitalize=\"off\" required=\"required\"></p>\n" | 178 | "<p>Login: <input type=\"text\" name=\"login\" autocapitalize=\"off\" required=\"required\"></p>\n" |
| 179 | "<input type=\"submit\" value=\"OK\">\n" | 179 | "<input type=\"submit\" value=\"OK\">\n" |