From de116e9d178764e5cd2c1ba461502b86e0324e07 Mon Sep 17 00:00:00 2001 From: totoro Date: Sat, 6 Jul 2019 13:31:48 +0200 Subject: [PATCH] Add draw_web_request in WEB_Session to allows to store the web request which return full draw html. When we need to redraw the html content in case of language change we can redirect to that draw_web_request. Since we have an heavy use of load content redirect to previous can cause a drawing of the content of the ajax return during the load content. This fix that behavior. --- web/CXM_making_a_web_site.anubis | 50 +++++++++++++++++++++++++++++++++++++------------- web/CXM_web_session.anubis | 29 ++++++++++++++++++++--------- 2 files changed, 57 insertions(+), 22 deletions(-) diff --git a/web/CXM_making_a_web_site.anubis b/web/CXM_making_a_web_site.anubis index cf91800..639bec8 100644 --- a/web/CXM_making_a_web_site.anubis +++ b/web/CXM_making_a_web_site.anubis @@ -3361,11 +3361,27 @@ define (Maybe(WEB_Session), HTTP_Answer) success(new_controller) then apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, new_session, failure, initial_session, logger), }, success(action_name) then - logger(logInfo, "ACTION_NAME ["+action_name+"]"); + logger(logInfo, "ACTION_NAME ["+action_name+"] from IP "+get_String(_session.fields, "IP", "")); if apply_action(_session, action_name, *controller.controller_actions) is { - http_answer(session, answer) then (success(session), answer), - http_answer(answer) then (success(_session), answer), + http_answer(session, answer) then + since session is web_session(id, lang, entries, current, previous, _), + with new_web_session = web_session(id, lang, entries, current, previous, current), +// println("***** http_answer(session, answer) record new draw point to *****"); +// println("web arguments:"+ +// dump_web_arg_values(*current.lwa)); +// println("************************************"); + (success(new_web_session), answer), + + http_answer(answer) then + since _session is web_session(id, lang, entries, current, previous, _), + with new_web_session = web_session(id, lang, entries, current, previous, current), +// println("***** http_answer(answer) record new draw point to *****"); +// println("web arguments:"+ +// dump_web_arg_values(*current.lwa)); +// println("************************************"); + (success(new_web_session), answer), + redirect(new_session) then if get_controller(get_String(*new_session.web_request.lwa, "aws_controller", "root"), controllers, logger) is { @@ -3386,16 +3402,16 @@ define (Maybe(WEB_Session), HTTP_Answer) { failure then (failure, error_page(http_not_found, "Redirect to previous Controller not found", _session)), success(new_controller) then - since _session is web_session(id, lang, entries, _, previous), - apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous), failure, initial_session, logger), + since _session is web_session(id, lang, entries, _, previous, draw), + apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous, draw), failure, initial_session, logger), }, redirect_to_previous(entries) then if get_controller(get_String(*_session.previous_web_request.lwa, "aws_controller", "root"), controllers, logger) is { failure then (failure, error_page(http_not_found, "Redirect to previous Controller not found", _session)), success(new_controller) then - since _session is web_session(id, lang, _, _, previous), - apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous), failure, initial_session, logger), + since _session is web_session(id, lang, _, _, previous, draw), + apply_controller_action(new_controller, plugins, controllers, _current_page_renderer, page_renderers, cinfo, web_session(id, lang, entries, previous, previous, draw), failure, initial_session, logger), }, //ajax(answer) then (failure, answer), //ajax with modified session that must be saved @@ -3408,8 +3424,14 @@ define (Maybe(WEB_Session), HTTP_Answer) send_file(file_path, c_disposition) then (failure, send_file(file_path, c_disposition)), renderer_content(session, content) then with the_session = if session is {failure then _session, success(__session) then __session}, - with page_renderer = get_page_renderer(the_session, _current_page_renderer, page_renderers, logger), - (session, page_renderer.page_layout(the_session, plugins, content)) + since the_session is web_session(id, lang, entries, current, previous, _), + with new_web_session = web_session(id, lang, entries, current, previous, current), +// println("***** renderer_content(session, content) record new draw point to *****"); +// println("web arguments:"+ +// dump_web_arg_values(*current.lwa)); +// println("************************************"); + with page_renderer = get_page_renderer(new_web_session, _current_page_renderer, page_renderers, logger), + (success(new_web_session), page_renderer.page_layout(new_web_session, plugins, content)) } } . @@ -3493,12 +3515,14 @@ public define Web_Site out_of_date(previous_session) then logger(logInfo, "previous out_of_date"); //expired_session(previous_session, http_info, var(_lwa), is_https), - since previous_session is web_session(id, lang, entries, previous, _), - web_session(id, lang, entries, web_request(http_info, var(_lwa), is_https), previous) + since previous_session is web_session(id, lang, entries, previous, _, draw), + replace_String(entries, "IP", get_String(_lwa, "x-forwarded-for", ip_addr_to_string(http_info.ip_address))); + web_session(id, lang, entries, web_request(http_info, var(_lwa), is_https), previous, draw) still_valid(previous_session) then - since previous_session is web_session(id, lang, entries, previous, _), - web_session(id, lang, entries, web_request(http_info, var(_lwa), is_https), previous) + since previous_session is web_session(id, lang, entries, previous, _, draw), + replace_String(entries, "IP", get_String(_lwa, "x-forwarded-for", ip_addr_to_string(http_info.ip_address))); + web_session(id, lang, entries, web_request(http_info, var(_lwa), is_https), previous, draw) }, diff --git a/web/CXM_web_session.anubis b/web/CXM_web_session.anubis index abf8cab..3d2d230 100644 --- a/web/CXM_web_session.anubis +++ b/web/CXM_web_session.anubis @@ -92,7 +92,8 @@ public type WEB_Session: String language, Var(List(WEB_Session_Field)) fields, WEB_Request web_request, - WEB_Request previous_web_request + WEB_Request previous_web_request, + WEB_Request draw_web_request ). public type WEB_Session_No_Var: @@ -101,7 +102,8 @@ public type WEB_Session_No_Var: String language, List(WEB_Session_Field_No_Var) fields, WEB_Request_No_Var web_request, - WEB_Request_No_Var previous_web_request + WEB_Request_No_Var previous_web_request, + WEB_Request_No_Var draw_web_request, ). public define Var(List(WEB_Session_Field)) @@ -148,10 +150,11 @@ public define WEB_Session ( WEB_Session_No_Var _session )= - since _session is web_session(id, language, fields, c_web_request, p_web_request), + since _session is web_session(id, language, fields, c_web_request, p_web_request, d_web_request), web_session(id, language, to_WEB_Session_Field(fields), web_request(c_web_request.http_info, var(c_web_request.lwa), c_web_request.is_https), - web_request(p_web_request.http_info, var(p_web_request.lwa), p_web_request.is_https) + web_request(p_web_request.http_info, var(p_web_request.lwa), p_web_request.is_https), + web_request(d_web_request.http_info, var(d_web_request.lwa), d_web_request.is_https), ) . @@ -160,10 +163,11 @@ public define WEB_Session_No_Var ( WEB_Session _session )= - since _session is web_session(id, language, fields, c_web_request, p_web_request), + since _session is web_session(id, language, fields, c_web_request, p_web_request, d_web_request), web_session(id, language, to_WEB_Session_Field_No_Var(*fields), web_request(c_web_request.http_info, *c_web_request.lwa, c_web_request.is_https), - web_request(p_web_request.http_info, *p_web_request.lwa, p_web_request.is_https) + web_request(p_web_request.http_info, *p_web_request.lwa, p_web_request.is_https), + web_request(d_web_request.http_info, *d_web_request.lwa, d_web_request.is_https), ) . @@ -1175,7 +1179,7 @@ public define String ( WEB_Session _session )= - since _session is web_session(id, language, fields, web_request, previous_web_request), + since _session is web_session(id, language, fields, web_request, previous_web_request, draw_web_request), "WEB Session Dump: \n"+ "----------------- \n"+ "Session ID : ["+id+"]\n"+ @@ -1195,6 +1199,13 @@ public define String "http_info:\n"+ dump_http_info(previous_web_request.http_info)+"\n"+ "web arguments:"+ - dump_web_arg_values(*previous_web_request.lwa)+"\n" - + dump_web_arg_values(*previous_web_request.lwa)+"\n\n"+ + "-----------------------------------------------------------------------------\n"+ + "Draw WEB REQUEST:\n"+ + "-----------------------------------------------------------------------------\n"+ + "is https "+to_String(draw_web_request.is_https)+"\n"+ + "http_info:\n"+ + dump_http_info(draw_web_request.http_info)+"\n"+ + "web arguments:"+ + dump_web_arg_values(*draw_web_request.lwa)+"\n" . -- libgit2 0.21.4