commit a6bf1ee0d0e238cb13d916c019bc231986d44401
parent e4e58d22224d37b9db760eda5bb25a76c3eea5b2
Author: default <nobody@localhost>
Date: Thu, 7 Nov 2024 20:47:37 +0100
Use the raw_path for proxying (as some media may include ? arguments).
Diffstat:
3 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/html.c b/html.c
@@ -3216,7 +3216,13 @@ int html_get_handler(const xs_dict *req, const char *q_path,
status = HTTP_STATUS_UNAUTHORIZED;
}
else {
- xs *url = xs_replace(p_path, "proxy/", "https:/" "/");
+ /* pick the raw path (including optional ? arguments) */
+ const char *raw_path = xs_dict_get(req, "raw_path");
+
+ /* skip to where the proxy/ string starts */
+ raw_path += xs_str_in(raw_path, "proxy/");
+
+ xs *url = xs_replace(raw_path, "proxy/", "https:/" "/");
xs *hdrs = xs_dict_new();
hdrs = xs_dict_append(hdrs, "user-agent", USER_AGENT);
diff --git a/xs_fcgi.h b/xs_fcgi.h
@@ -179,6 +179,8 @@ xs_dict *xs_fcgi_request(FILE *f, xs_str **payload, int *p_size, int *fcgi_id)
req = xs_dict_append(req, "method", v);
else
if (strcmp(k, "REQUEST_URI") == 0) {
+ req = xs_dict_append(req, "raw_path", v);
+
xs *pnv = xs_split_n(v, "?", 1);
/* store the path */
diff --git a/xs_httpd.h b/xs_httpd.h
@@ -32,6 +32,7 @@ xs_dict *xs_httpd_request(FILE *f, xs_str **payload, int *p_size)
xs_dict *req = xs_dict_new();
req = xs_dict_append(req, "method", xs_list_get(l2, 0));
+ req = xs_dict_append(req, "raw_path", xs_list_get(l2, 1));
req = xs_dict_append(req, "proto", xs_list_get(l2, 2));
{