Store incoming http request parameters properly.

This commit is contained in:
Relintai 2023-12-22 13:02:17 +01:00
parent df2859b9d0
commit e5719c991b
8 changed files with 81 additions and 21 deletions

View File

@ -328,7 +328,7 @@ int HTTPParser::on_header_value(const char *at, size_t length) {
ERR_PRINT("header_val " + s);
#endif
_request->add_post_parameter(_queued_header_field, s);
_request->add_header_parameter(_queued_header_field, s);
if (_queued_header_field == "host") {
_request->set_host(s);

View File

@ -281,6 +281,9 @@ void HTTPServerConnection::send_file(Ref<WebServerRequest> request, const String
return;
}
//String range = request->get_htt
String s = "HTTP/1.1 " + HTTPServerEnums::get_status_code_header_string(request->get_status_code()) + "\r\n";
if (!custom_headers.has("Connection")) {

View File

@ -124,6 +124,17 @@ void SimpleWebServerRequest::set_get_parameter(const String &key, const String &
_get_parameters[key] = value;
}
String SimpleWebServerRequest::get_header_parameter(const String &key) const {
if (!_header_parameters.has(key)) {
return "";
}
return _header_parameters[key];
}
void SimpleWebServerRequest::set_header_parameter(const String &key, const String &value) {
_header_parameters[key] = value;
}
void SimpleWebServerRequest::send_redirect(const String &location, const HTTPServerEnums::HTTPStatusCode status_code) {
ERR_FAIL_COND(!_server);
@ -167,6 +178,10 @@ void SimpleWebServerRequest::add_get_parameter(const String &key, const String &
_get_parameters[key] = value;
}
void SimpleWebServerRequest::add_header_parameter(const String &key, const String &value) {
_header_parameters[key] = value;
}
void SimpleWebServerRequest::set_parser_path(const String &value) {
//https://www.rfc-editor.org/rfc/rfc3986.txt
//3.4. Query

View File

@ -73,6 +73,9 @@ public:
virtual void set_post_parameter(const String &key, const String &value);
virtual void set_get_parameter(const String &key, const String &value);
virtual String get_header_parameter(const String &key) const;
virtual void set_header_parameter(const String &key, const String &value);
virtual void send_redirect(const String &location, const HTTPServerEnums::HTTPStatusCode status_code = HTTPServerEnums::HTTP_STATUS_CODE_302_FOUND);
virtual void send();
virtual void send_file(const String &p_file_path);
@ -81,6 +84,7 @@ public:
void add_post_parameter(const String &key, const String &value);
void add_get_parameter(const String &key, const String &value);
void add_header_parameter(const String &key, const String &value);
void set_parser_path(const String &value);
void set_host(const String &value);
@ -107,6 +111,7 @@ protected:
HashMap<String, String> _post_parameters;
HashMap<String, String> _get_parameters;
HashMap<String, String> _header_parameters;
String _parser_path;
String _host;

View File

@ -136,7 +136,7 @@ bool WebServerRequest::has_csrf_token() {
String WebServerRequest::get_csrf_token() {
if (!_session.is_valid()) {
return "";
return String();
}
const Variant &val = _session->get_const("csrf_token");
@ -174,7 +174,7 @@ bool WebServerRequest::validate_csrf_token() {
}
String WebServerRequest::get_cookie(const String &key) {
return "";
return String();
}
void WebServerRequest::response_add_cookie(const Ref<WebServerCookie> &cookie) {
@ -214,7 +214,7 @@ String WebServerRequest::custom_response_header_get(const StringName &key) {
String *e = _custom_response_headers.getptr(key);
if (!e) {
return "";
return String();
}
return *e;
@ -252,10 +252,10 @@ int WebServerRequest::get_file_count() const {
return 0;
}
String WebServerRequest::get_file_file_name(const int index) const {
return "";
return String();
}
String WebServerRequest::get_file_key(const int index) const {
return "";
return String();
}
int WebServerRequest::get_file_length(const int index) const {
return 0;
@ -264,19 +264,19 @@ PoolByteArray WebServerRequest::get_file_data(const int index) const {
return PoolByteArray();
}
String WebServerRequest::get_file_data_str(const int index) const {
return "";
return String();
}
String WebServerRequest::get_parameter(const String &key) const {
return "";
return String();
}
String WebServerRequest::get_post_parameter(const String &key) const {
return "";
return String();
}
String WebServerRequest::get_get_parameter(const String &key) const {
return "";
return String();
}
void WebServerRequest::set_post_parameter(const String &key, const String &value) {
@ -284,6 +284,12 @@ void WebServerRequest::set_post_parameter(const String &key, const String &value
void WebServerRequest::set_get_parameter(const String &key, const String &value) {
}
String WebServerRequest::get_header_parameter(const String &key) const {
return String();
}
void WebServerRequest::set_header_parameter(const String &key, const String &value) {
}
HTTPServerEnums::HTTPStatusCode WebServerRequest::get_status_code() const {
return _status_code;
}
@ -343,7 +349,7 @@ void WebServerRequest::send_error(int error_code) {
}
String WebServerRequest::parser_get_path() {
return "";
return String();
}
void WebServerRequest::setup_url_stack() {
@ -517,7 +523,7 @@ String WebServerRequest::get_url_site_add(const String &add) const {
}
String WebServerRequest::get_host() const {
return "";
return String();
}
void WebServerRequest::update() {
@ -642,6 +648,9 @@ void WebServerRequest::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_post_parameter", "key", "value"), &WebServerRequest::set_post_parameter);
ClassDB::bind_method(D_METHOD("set_get_parameter", "key", "value"), &WebServerRequest::set_get_parameter);
ClassDB::bind_method(D_METHOD("get_header_parameter", "key"), &WebServerRequest::get_header_parameter);
ClassDB::bind_method(D_METHOD("set_header_parameter", "key", "value"), &WebServerRequest::set_header_parameter);
ClassDB::bind_method(D_METHOD("get_status_code"), &WebServerRequest::get_status_code);
ClassDB::bind_method(D_METHOD("set_status_code", "val"), &WebServerRequest::set_status_code);
ADD_PROPERTY(PropertyInfo(Variant::INT, "status_code"), "set_status_code", "get_status_code");

View File

@ -125,6 +125,9 @@ public:
virtual void set_post_parameter(const String &key, const String &value);
virtual void set_get_parameter(const String &key, const String &value);
virtual String get_header_parameter(const String &key) const;
virtual void set_header_parameter(const String &key, const String &value);
HTTPServerEnums::HTTPStatusCode get_status_code() const;
void set_status_code(const HTTPServerEnums::HTTPStatusCode status_code);

View File

@ -85,6 +85,13 @@ void WebServerRequestScriptable::set_get_parameter(const String &key, const Stri
call("_set_get_parameter", key, value);
}
String WebServerRequestScriptable::get_header_parameter(const String &key) const {
return const_cast<WebServerRequestScriptable *>(this)->call("_get_header_parameter", key);
}
void WebServerRequestScriptable::set_header_parameter(const String &key, const String &value) {
call("_set_header_parameter", key, value);
}
void WebServerRequestScriptable::send_redirect(const String &location, const HTTPServerEnums::HTTPStatusCode status_code) {
call("_send_redirect", location, status_code);
}
@ -128,7 +135,7 @@ void WebServerRequestScriptable::update() {
// script virtuals
String WebServerRequestScriptable::_get_cookie(const String &key) {
return "";
return String();
}
HTTPServerEnums::HTTPMethod WebServerRequestScriptable::_get_method() const {
@ -141,10 +148,10 @@ int WebServerRequestScriptable::_get_file_count() const {
return 0;
}
String WebServerRequestScriptable::_get_file_file_name(const int index) const {
return "";
return String();
}
String WebServerRequestScriptable::_get_file_key(const int index) const {
return "";
return String();
}
int WebServerRequestScriptable::_get_file_length(const int index) const {
return 0;
@ -153,19 +160,19 @@ PoolByteArray WebServerRequestScriptable::_get_file_data(const int index) const
return PoolByteArray();
}
String WebServerRequestScriptable::_get_file_data_str(const int index) const {
return "";
return String();
}
String WebServerRequestScriptable::_get_parameter(const String &key) const {
return "";
return String();
}
String WebServerRequestScriptable::_get_post_parameter(const String &key) const {
return "";
return String();
}
String WebServerRequestScriptable::_get_get_parameter(const String &key) const {
return "";
return String();
}
void WebServerRequestScriptable::_set_post_parameter(const String &key, const String &value) {
@ -173,6 +180,12 @@ void WebServerRequestScriptable::_set_post_parameter(const String &key, const St
void WebServerRequestScriptable::_set_get_parameter(const String &key, const String &value) {
}
String WebServerRequestScriptable::_get_header_parameter(const String &key) const {
return String();
}
void WebServerRequestScriptable::_set_header_parameter(const String &key, const String &value) {
}
void WebServerRequestScriptable::_send_redirect(const String &location, const HTTPServerEnums::HTTPStatusCode status_code) {
}
@ -224,7 +237,7 @@ void WebServerRequestScriptable::_send_error(int error_code) {
}
String WebServerRequestScriptable::_parser_get_path() {
return "";
return String();
}
String WebServerRequestScriptable::_get_path_full() const {
@ -232,7 +245,7 @@ String WebServerRequestScriptable::_get_path_full() const {
}
String WebServerRequestScriptable::_get_host() const {
return "";
return String();
}
void WebServerRequestScriptable::_update() {
@ -271,6 +284,9 @@ void WebServerRequestScriptable::_bind_methods() {
BIND_VMETHOD(MethodInfo("_set_post_parameter", PropertyInfo(Variant::STRING, "key"), PropertyInfo(Variant::STRING, "value")));
BIND_VMETHOD(MethodInfo("_set_get_parameter", PropertyInfo(Variant::STRING, "key"), PropertyInfo(Variant::STRING, "value")));
BIND_VMETHOD(MethodInfo("_get_header_parameter", PropertyInfo(Variant::STRING, "key")));
BIND_VMETHOD(MethodInfo("_set_header_parameter", PropertyInfo(Variant::STRING, "key"), PropertyInfo(Variant::STRING, "value")));
BIND_VMETHOD(MethodInfo("_send_redirect", PropertyInfo(Variant::STRING, "location"), PropertyInfo(Variant::INT, "status_code")));
BIND_VMETHOD(MethodInfo("_compile_body"));
@ -304,6 +320,9 @@ void WebServerRequestScriptable::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_post_parameter", "key", "value"), &WebServerRequestScriptable::_set_post_parameter);
ClassDB::bind_method(D_METHOD("_set_get_parameter", "key", "value"), &WebServerRequestScriptable::_set_get_parameter);
ClassDB::bind_method(D_METHOD("_get_header_parameter", "key"), &WebServerRequestScriptable::_get_header_parameter);
ClassDB::bind_method(D_METHOD("_set_header_parameter", "key", "value"), &WebServerRequestScriptable::_set_header_parameter);
ClassDB::bind_method(D_METHOD("_send_redirect", "location", "status_code"), &WebServerRequestScriptable::_send_redirect);
ClassDB::bind_method(D_METHOD("_compile_body"), &WebServerRequestScriptable::_compile_body);

View File

@ -72,6 +72,9 @@ public:
virtual void set_post_parameter(const String &key, const String &value);
virtual void set_get_parameter(const String &key, const String &value);
virtual String get_header_parameter(const String &key) const;
virtual void set_header_parameter(const String &key, const String &value);
virtual void send_redirect(const String &location, const HTTPServerEnums::HTTPStatusCode status_code = HTTPServerEnums::HTTP_STATUS_CODE_302_FOUND);
virtual void compile_body();
virtual void compile_and_send_body();
@ -105,6 +108,9 @@ public:
virtual void _set_post_parameter(const String &key, const String &value);
virtual void _set_get_parameter(const String &key, const String &value);
virtual String _get_header_parameter(const String &key) const;
virtual void _set_header_parameter(const String &key, const String &value);
void _send_redirect(const String &location, const HTTPServerEnums::HTTPStatusCode status_code);
void _compile_body();
void _compile_and_send_body();