Commit 0e2959c0dc05c7ceb4ac98c02262cd2c4567240a
1 parent
09aeddee
Change the cookie name for state hash from 's' to 'state'.
Fix a very serious bug introduced with new html_page alternative html_page(status, head_tags, body). This new alternative result returned the html body only. All http_header (http status, cookies, etc.) was forgotten.
Showing
1 changed file
with
37 additions
and
21 deletions
Show diff stats
web/CXM_making_a_web_site.anubis
| ... | ... | @@ -1836,6 +1836,7 @@ define (String state_name) -> PreviousState($State) |
| 1836 | 1836 | ) = |
| 1837 | 1837 | (String state_name) |-> |
| 1838 | 1838 | with file_path = state_directory+"/s"+state_name, |
| 1839 | + //println("Retreive state ["+file_path+"]"); | |
| 1839 | 1840 | if (RetrieveResult((Int,$State)))retrieve(file_path) is ok(d) |
| 1840 | 1841 | then ( |
| 1841 | 1842 | if d is (time_stamp,s) then |
| ... | ... | @@ -2098,7 +2099,7 @@ define (List(Web_arg) lwa, HTTP_Info info) -> Separated_Web_Args($State) |
| 2098 | 2099 | // |
| 2099 | 2100 | // no web arg found => no previous state and no action |
| 2100 | 2101 | // |
| 2101 | - if find_cookie("s", server_get_cookies(http_headers(info))) is | |
| 2102 | + if find_cookie("state", server_get_cookies(http_headers(info))) is | |
| 2102 | 2103 | { |
| 2103 | 2104 | failure then swa(not_found,failure,[]), |
| 2104 | 2105 | success(cookie) then swa(retrieve_state(value(cookie)),failure,[]) |
| ... | ... | @@ -2163,7 +2164,8 @@ define ($State previous, |
| 2163 | 2164 | HTTP_Info http_info, |
| 2164 | 2165 | List(Web_arg) lwa, |
| 2165 | 2166 | Bool is_https, |
| 2166 | - List(Web_Action($State)) actions) |-f-> | |
| 2167 | + List(Web_Action($State)) actions) |-f-> | |
| 2168 | + //println("Looking for action ["+action_name+"]"); | |
| 2167 | 2169 | if actions is |
| 2168 | 2170 | { |
| 2169 | 2171 | [ ] then print("action '"+action_name+ |
| ... | ... | @@ -2194,7 +2196,9 @@ define ($State previous, |
| 2194 | 2196 | |
| 2195 | 2197 | http_https_action(an,allow,do_it) then |
| 2196 | 2198 | if an = action_name |
| 2197 | - then if allow(previous) | |
| 2199 | + then | |
| 2200 | + //println("Action ["+action_name+"] found"); | |
| 2201 | + if allow(previous) | |
| 2198 | 2202 | then do_it(http_info,lwa,previous) |
| 2199 | 2203 | else previous |
| 2200 | 2204 | else f(previous,action_name,http_info,lwa,is_https,others), |
| ... | ... | @@ -2277,7 +2281,7 @@ define List(HTTP_header) |
| 2277 | 2281 | ) |
| 2278 | 2282 | = |
| 2279 | 2283 | [ |
| 2280 | - http_header("Set-Cookie", "s="+state_name) | |
| 2284 | + http_header("Set-Cookie", "state="+state_name) | |
| 2281 | 2285 | ] |
| 2282 | 2286 | . |
| 2283 | 2287 | |
| ... | ... | @@ -2361,9 +2365,9 @@ public define Web_Site |
| 2361 | 2365 | // |
| 2362 | 2366 | // construct tool functions |
| 2363 | 2367 | // TODO 'make_separate_web_args_function' must retrieve state_cookies before parsing web_args if using_state_cookies is true |
| 2364 | - with save_state = make_save_state_function(timeout,state_directory), | |
| 2368 | + with save_state = make_save_state_function(timeout, state_directory), | |
| 2365 | 2369 | retrieve_state = make_retrieve_state_function(state_directory), |
| 2366 | - separate_web_args = make_separate_web_args_function(state_directory,retrieve_state), | |
| 2370 | + separate_web_args = make_separate_web_args_function(state_directory, retrieve_state), | |
| 2367 | 2371 | apply_action = make_apply_action_function(actions), |
| 2368 | 2372 | // |
| 2369 | 2373 | // construct the site handler |
| ... | ... | @@ -2376,10 +2380,11 @@ public define Web_Site |
| 2376 | 2380 | //(Printable_tree) |
| 2377 | 2381 | if separate_web_args(lwa, http_info) is |
| 2378 | 2382 | { |
| 2379 | - swa(mb_previous_state,mb_action_name,operands) then | |
| 2383 | + swa(mb_previous_state, mb_action_name, operands) then | |
| 2380 | 2384 | with new_state = if mb_previous_state is |
| 2381 | 2385 | { |
| 2382 | 2386 | not_found then |
| 2387 | + //println("previous state not found"); | |
| 2383 | 2388 | if mb_action_name is |
| 2384 | 2389 | { |
| 2385 | 2390 | failure then initial_state(http_info, operands, is_https), |
| ... | ... | @@ -2400,6 +2405,7 @@ public define Web_Site |
| 2400 | 2405 | }, |
| 2401 | 2406 | //if state_and_headers is (session_ticket, mb_new_state, headers) then |
| 2402 | 2407 | with state_name = save_state(new_state), |
| 2408 | + //println("Cookie new STATE NAME "+state_name); | |
| 2403 | 2409 | with cookie_headers = /* if using_state_cookies then */ make_state_cookie_headers(state_name) /*else [] */, |
| 2404 | 2410 | format(info(host_name, http_port, https_port, site_directory, secret), |
| 2405 | 2411 | state_name, |
| ... | ... | @@ -4391,15 +4397,15 @@ define Printable_tree |
| 4391 | 4397 | meta(meta) then |
| 4392 | 4398 | [format(meta) . _format_html_head(t, so_far)], |
| 4393 | 4399 | title(title) then |
| 4394 | - ["<title>"+title+"</title>" . _format_html_head(t, so_far)], | |
| 4400 | + ["<title>"+title+"</title>\n" . _format_html_head(t, so_far)], | |
| 4395 | 4401 | js(jsf) then |
| 4396 | 4402 | [add_js_files([jsf]) . _format_html_head(t, so_far)], |
| 4397 | 4403 | js_inline(jsi) then |
| 4398 | - ["<script>"+content(jsi)+"</script>" . _format_html_head(t, so_far)], | |
| 4404 | + ["<script>"+content(jsi)+"</script>\n" . _format_html_head(t, so_far)], | |
| 4399 | 4405 | css(cssf) then |
| 4400 | - ["<link rel=\"stylesheet\" type=\"text/css\" href=\""+file_name(cssf)+"\">" . _format_html_head(t, so_far)], | |
| 4406 | + ["<link rel=\"stylesheet\" type=\"text/css\" href=\""+file_name(cssf)+"\" />\n" . _format_html_head(t, so_far)], | |
| 4401 | 4407 | css_inline(cssi) then |
| 4402 | - ["<style>"+cssi+"</style>" . _format_html_head(t, so_far)] | |
| 4408 | + ["<style>"+cssi+"</style>\n" . _format_html_head(t, so_far)] | |
| 4403 | 4409 | } |
| 4404 | 4410 | } |
| 4405 | 4411 | . |
| ... | ... | @@ -4438,16 +4444,26 @@ define Printable_tree |
| 4438 | 4444 | html_page(status, head_tags, body) then |
| 4439 | 4445 | if body is body(options,element) then |
| 4440 | 4446 | if format(status) is (status_string, status_headers) then |
| 4441 | - [doctype_w3c_header, | |
| 4442 | - html_header, | |
| 4443 | - | |
| 4444 | - format_html_head(head_tags, charset), | |
| 4445 | - | |
| 4446 | - "<body ", format(options), ">", // format body options | |
| 4447 | - format(cinfo,state_name,ic_v,element,is_https), | |
| 4448 | - "</body>\n", | |
| 4449 | - | |
| 4450 | - "</html>"], | |
| 4447 | + with answer_body = | |
| 4448 | + [doctype_w3c_header, | |
| 4449 | + html_header, | |
| 4450 | + | |
| 4451 | + "<head>\n", format_html_head(head_tags, charset),"</head>\n", | |
| 4452 | + | |
| 4453 | + "<body ", format(options), ">", // format body options | |
| 4454 | + format(cinfo,state_name,ic_v,element,is_https), | |
| 4455 | + "</body>\n", | |
| 4456 | + | |
| 4457 | + "</html>"], | |
| 4458 | + [ "HTTP/1.1 " + status_string, crlf, | |
| 4459 | + format_headers(standard_headers), | |
| 4460 | + format_headers(standard_headers_for("text/html", length(answer_body), success(charset))), | |
| 4461 | + format_headers(status_headers), | |
| 4462 | + format_headers(additional_headers), | |
| 4463 | + crlf | |
| 4464 | + . answer_body | |
| 4465 | + ] | |
| 4466 | + | |
| 4451 | 4467 | html_page(status, title, metas, css_styles, css_files, js_files, script, body) then |
| 4452 | 4468 | if body is body(options,element) then |
| 4453 | 4469 | if format(status) is (status_string, status_headers) then | ... | ... |