fix wasm session and mysql placeholder state
This commit is contained in:
@@ -107,6 +107,14 @@ RENDER(Request& context)
|
|||||||
mysql_placeholder_error.find("positional ? placeholders are not supported") != String::npos ? "pass" : "fail",
|
mysql_placeholder_error.find("positional ? placeholders are not supported") != String::npos ? "pass" : "fail",
|
||||||
mysql_placeholder_error
|
mysql_placeholder_error
|
||||||
);
|
);
|
||||||
|
StringMap underscore_params;
|
||||||
|
underscore_params["display_name"] = "Ada";
|
||||||
|
String parsed_underscore = placeholder_guard.parse_query_parameters("select :display_name as name", underscore_params);
|
||||||
|
mark(
|
||||||
|
"mysql named placeholders accept underscores",
|
||||||
|
parsed_underscore.find("'Ada'") != String::npos && parsed_underscore.find("_name") == String::npos ? "pass" : "fail",
|
||||||
|
parsed_underscore
|
||||||
|
);
|
||||||
|
|
||||||
MySQL mysql;
|
MySQL mysql;
|
||||||
mysql.connect("127.0.0.1", "root", "");
|
mysql.connect("127.0.0.1", "root", "");
|
||||||
|
|||||||
@@ -294,7 +294,7 @@ String MySQL::parse_query_parameters(String query, StringMap map)
|
|||||||
}
|
}
|
||||||
else if(mode == 1) // identifier mode
|
else if(mode == 1) // identifier mode
|
||||||
{
|
{
|
||||||
if(isalnum(c))
|
if(isalnum(c) || c == '_')
|
||||||
{
|
{
|
||||||
identifier.append(1, c);
|
identifier.append(1, c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -133,11 +133,16 @@ String wasm_backend_serve(Request& request, const String& entry_unit, const Stri
|
|||||||
for(auto& entry : source)
|
for(auto& entry : source)
|
||||||
ctx[key][entry.first] = entry.second;
|
ctx[key][entry.first] = entry.second;
|
||||||
};
|
};
|
||||||
|
if(request.server)
|
||||||
|
copy_map(request.server->config, "server_config");
|
||||||
copy_map(request.params, "params");
|
copy_map(request.params, "params");
|
||||||
copy_map(request.get, "get");
|
copy_map(request.get, "get");
|
||||||
copy_map(request.post, "post");
|
copy_map(request.post, "post");
|
||||||
copy_map(request.cookies, "cookies");
|
copy_map(request.cookies, "cookies");
|
||||||
copy_map(request.session, "session");
|
copy_map(request.session, "session");
|
||||||
|
ctx["session_id"] = request.session_id;
|
||||||
|
ctx["session_name"] = request.session_name;
|
||||||
|
ctx["session_loaded_hash"] = request.session_loaded_hash;
|
||||||
ctx["entry_unit"] = entry_unit;
|
ctx["entry_unit"] = entry_unit;
|
||||||
// Raw request body: cli_input() parses a JSON CLI payload from context.in,
|
// Raw request body: cli_input() parses a JSON CLI payload from context.in,
|
||||||
// and serve_http handlers read it as req->in; carried into the workspace.
|
// and serve_http handlers read it as req->in; carried into the workspace.
|
||||||
@@ -233,6 +238,12 @@ String wasm_backend_serve(Request& request, const String& entry_unit, const Stri
|
|||||||
request.session[name] = value.to_string();
|
request.session[name] = value.to_string();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if(response.meta.key("session_id"))
|
||||||
|
request.session_id = response.meta["session_id"].to_string();
|
||||||
|
if(response.meta.key("session_name"))
|
||||||
|
request.session_name = response.meta["session_name"].to_string();
|
||||||
|
if(response.meta.key("session_loaded_hash"))
|
||||||
|
request.session_loaded_hash = response.meta["session_loaded_hash"].to_string();
|
||||||
|
|
||||||
// body into the request's primary output stream (ob_stack[0]); the
|
// body into the request's primary output stream (ob_stack[0]); the
|
||||||
// transport's assemble_output_buffer concatenates the stack
|
// transport's assemble_output_buffer concatenates the stack
|
||||||
|
|||||||
+15
-1
@@ -222,7 +222,7 @@ String MySQL::parse_query_parameters(String query, StringMap map)
|
|||||||
}
|
}
|
||||||
else if(mode == 1)
|
else if(mode == 1)
|
||||||
{
|
{
|
||||||
if(isalnum(c))
|
if(isalnum(c) || c == '_')
|
||||||
identifier.append(1, c);
|
identifier.append(1, c);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -761,6 +761,9 @@ void uce_wasm_core_reset_request()
|
|||||||
wasm_response_meta = "";
|
wasm_response_meta = "";
|
||||||
wasm_request.cookies.clear();
|
wasm_request.cookies.clear();
|
||||||
wasm_request.session.clear();
|
wasm_request.session.clear();
|
||||||
|
wasm_request.session_id = "";
|
||||||
|
wasm_request.session_name = "";
|
||||||
|
wasm_request.session_loaded_hash = "";
|
||||||
wasm_request.out = "";
|
wasm_request.out = "";
|
||||||
wasm_request.resources.current_unit_file = "";
|
wasm_request.resources.current_unit_file = "";
|
||||||
wasm_component_slots.clear();
|
wasm_component_slots.clear();
|
||||||
@@ -787,11 +790,19 @@ int uce_wasm_apply_context(const char* buf, size_t len)
|
|||||||
dest[key] = item.to_string();
|
dest[key] = item.to_string();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
if(decoded.key("server_config"))
|
||||||
|
apply_map(decoded.key("server_config"), wasm_server.config);
|
||||||
apply_map(decoded.key("params"), wasm_request.params);
|
apply_map(decoded.key("params"), wasm_request.params);
|
||||||
apply_map(decoded.key("get"), wasm_request.get);
|
apply_map(decoded.key("get"), wasm_request.get);
|
||||||
apply_map(decoded.key("post"), wasm_request.post);
|
apply_map(decoded.key("post"), wasm_request.post);
|
||||||
apply_map(decoded.key("cookies"), wasm_request.cookies);
|
apply_map(decoded.key("cookies"), wasm_request.cookies);
|
||||||
apply_map(decoded.key("session"), wasm_request.session);
|
apply_map(decoded.key("session"), wasm_request.session);
|
||||||
|
if(DValue* session_id = decoded.key("session_id"))
|
||||||
|
wasm_request.session_id = session_id->to_string();
|
||||||
|
if(DValue* session_name = decoded.key("session_name"))
|
||||||
|
wasm_request.session_name = session_name->to_string();
|
||||||
|
if(DValue* session_loaded_hash = decoded.key("session_loaded_hash"))
|
||||||
|
wasm_request.session_loaded_hash = session_loaded_hash->to_string();
|
||||||
DValue* entry = decoded.key("entry_unit");
|
DValue* entry = decoded.key("entry_unit");
|
||||||
if(entry)
|
if(entry)
|
||||||
wasm_request.resources.current_unit_file = entry->to_string();
|
wasm_request.resources.current_unit_file = entry->to_string();
|
||||||
@@ -847,6 +858,9 @@ void uce_wasm_finish_response_meta()
|
|||||||
}
|
}
|
||||||
for(auto& entry : wasm_request.session)
|
for(auto& entry : wasm_request.session)
|
||||||
meta["session"][entry.first] = entry.second;
|
meta["session"][entry.first] = entry.second;
|
||||||
|
meta["session_id"] = wasm_request.session_id;
|
||||||
|
meta["session_name"] = wasm_request.session_name;
|
||||||
|
meta["session_loaded_hash"] = wasm_request.session_loaded_hash;
|
||||||
bool ws_has_commands = !wasm_request.resources.websocket_dispatch_commands._map.empty();
|
bool ws_has_commands = !wasm_request.resources.websocket_dispatch_commands._map.empty();
|
||||||
bool ws_state_changed = false;
|
bool ws_state_changed = false;
|
||||||
if(wasm_request.resources.websocket_dispatch_capture)
|
if(wasm_request.resources.websocket_dispatch_capture)
|
||||||
|
|||||||
Reference in New Issue
Block a user