Commit 451b436d52605ee1f22916baf870e448f79f1d67
1 parent
1b48e26b
finish the management of state by cookie: #827
CXM_cookies.anubis : server_get_cookies. Needs because HTTP header must be start by "Cookie" (server side) CXM_making_a_web_site.anubis : Separated_Web_Args now handle state name by cookie. using_state_cookies has been definitively removed
Showing
4 changed files
with
84 additions
and
49 deletions
Show diff stats
calexium_lib/web/CXM_cookies.anubis
| @@ -474,8 +474,8 @@ define List(Cookie) | @@ -474,8 +474,8 @@ define List(Cookie) | ||
| 474 | ) = | 474 | ) = |
| 475 | if read_cookie is | 475 | if read_cookie is |
| 476 | { | 476 | { |
| 477 | - failure then so_far, | ||
| 478 | - success(c) then read_cookies([c . so_far]) | 477 | + failure then so_far, |
| 478 | + success(c) then read_cookies([c . so_far]) | ||
| 479 | }. | 479 | }. |
| 480 | 480 | ||
| 481 | 481 | ||
| @@ -508,8 +508,36 @@ public define List(Cookie) | @@ -508,8 +508,36 @@ public define List(Cookie) | ||
| 508 | [h . t] then | 508 | [h . t] then |
| 509 | append(get_cookies(server_name,h),get_cookies(server_name,t)) | 509 | append(get_cookies(server_name,h),get_cookies(server_name,t)) |
| 510 | }. | 510 | }. |
| 511 | + | ||
| 512 | +define List(Cookie) | ||
| 513 | + server_get_cookies | ||
| 514 | + ( | ||
| 515 | + HTTP_header h | ||
| 516 | + ) = | ||
| 517 | + if h is http_header(n,v) then | ||
| 518 | + if to_lower(n) = "cookie" | ||
| 519 | + then ( | ||
| 520 | + unput_atoms <- []; | ||
| 521 | + input <- v; | ||
| 522 | + index <- 0; | ||
| 523 | + server_name <- ""; | ||
| 524 | + read_cookies([]) | ||
| 525 | + ) | ||
| 526 | + else []. | ||
| 511 | 527 | ||
| 512 | - | 528 | +public define List(Cookie) |
| 529 | + server_get_cookies | ||
| 530 | + ( | ||
| 531 | + // String server_name, | ||
| 532 | + List(HTTP_header) headers | ||
| 533 | + ) = | ||
| 534 | + if headers is | ||
| 535 | + { | ||
| 536 | + [ ] then [ ], | ||
| 537 | + [h . t] then | ||
| 538 | + append(server_get_cookies(h), server_get_cookies(t)) | ||
| 539 | + }. | ||
| 540 | + | ||
| 513 | public define Maybe(Cookie) | 541 | public define Maybe(Cookie) |
| 514 | find_cookie | 542 | find_cookie |
| 515 | ( | 543 | ( |
calexium_lib/web/CXM_html.anubis
| @@ -6,7 +6,7 @@ | @@ -6,7 +6,7 @@ | ||
| 6 | 6 | ||
| 7 | read tools/basis.anubis | 7 | read tools/basis.anubis |
| 8 | read system/string.anubis | 8 | read system/string.anubis |
| 9 | - | 9 | +read tools/printable_tree.anubis |
| 10 | 10 | ||
| 11 | 11 | ||
| 12 | *** Managing Web Arguments. | 12 | *** Managing Web Arguments. |
| @@ -837,7 +837,7 @@ define Printable_tree | @@ -837,7 +837,7 @@ define Printable_tree | ||
| 837 | ) = [(String)format_without_sharp(c)]. | 837 | ) = [(String)format_without_sharp(c)]. |
| 838 | 838 | ||
| 839 | 839 | ||
| 840 | -define Printable_tree | 840 | + define Printable_tree |
| 841 | [Word32 x . Printable_tree t] | 841 | [Word32 x . Printable_tree t] |
| 842 | = | 842 | = |
| 843 | [to_Int(x) . t]. | 843 | [to_Int(x) . t]. |
calexium_lib/web/CXM_making_a_web_site.anubis
| @@ -51,7 +51,7 @@ read system/logger.anubis | @@ -51,7 +51,7 @@ read system/logger.anubis | ||
| 51 | read CXM_common.anubis | 51 | read CXM_common.anubis |
| 52 | read CXM_multihost_http_server.anubis | 52 | read CXM_multihost_http_server.anubis |
| 53 | read CXM_mime.anubis | 53 | read CXM_mime.anubis |
| 54 | - | 54 | +read CXM_cookies.anubis |
| 55 | 55 | ||
| 56 | 56 | ||
| 57 | * (1) Structure of a web site. | 57 | * (1) Structure of a web site. |
| @@ -2057,49 +2057,54 @@ type Separated_Web_Args($State): | @@ -2057,49 +2057,54 @@ type Separated_Web_Args($State): | ||
| 2057 | 2057 | ||
| 2058 | The next function constructs the function which separates the web arguments. | 2058 | The next function constructs the function which separates the web arguments. |
| 2059 | 2059 | ||
| 2060 | -define (List(Web_arg) lwa) -> Separated_Web_Args($State) | 2060 | +define (List(Web_arg) lwa, HTTP_Info info) -> Separated_Web_Args($State) |
| 2061 | make_separate_web_args_function | 2061 | make_separate_web_args_function |
| 2062 | ( | 2062 | ( |
| 2063 | String state_directory, | 2063 | String state_directory, |
| 2064 | String -> PreviousState($State) retrieve_state | 2064 | String -> PreviousState($State) retrieve_state |
| 2065 | ) = | 2065 | ) = |
| 2066 | - (List(Web_arg) lwa) |-swaf-> | ||
| 2067 | - if lwa is | ||
| 2068 | - { | ||
| 2069 | - [ ] then | 2066 | + (List(Web_arg) lwa, HTTP_Info info) |-swaf-> |
| 2067 | + if lwa is | ||
| 2068 | + { | ||
| 2069 | + [ ] then | ||
| 2070 | // | 2070 | // |
| 2071 | // no web arg found => no previous state and no action | 2071 | // no web arg found => no previous state and no action |
| 2072 | // | 2072 | // |
| 2073 | - swa(failure,failure,[]), | 2073 | + if find_cookie("s", server_get_cookies(http_headers(info))) is |
| 2074 | + { | ||
| 2075 | + failure then swa(failure,failure,[]), | ||
| 2076 | + success(cookie) then swa(success(retrieve_state(value(cookie))),failure,[]) | ||
| 2077 | + }, | ||
| 2078 | + | ||
| 2079 | + //swa(failure,failure,[]), | ||
| 2074 | 2080 | ||
| 2075 | - [wa_1 . wa_others] then | 2081 | + [wa_1 . wa_others] then |
| 2076 | // | 2082 | // |
| 2077 | // at least one web arg => | 2083 | // at least one web arg => |
| 2078 | // separate other web args, and insert the first one as needed | 2084 | // separate other web args, and insert the first one as needed |
| 2079 | // | 2085 | // |
| 2080 | - if (Separated_Web_Args($State))swaf(wa_others) is | ||
| 2081 | - { | ||
| 2082 | - swa(ps1, // possible previous state | ||
| 2083 | - an1, // maybe an action name | ||
| 2084 | - op1) // operands so far | ||
| 2085 | - then | ||
| 2086 | - if wa_1 is | ||
| 2087 | - { | ||
| 2088 | - web_arg(n, value) then | ||
| 2089 | - with name = if substr(n,0,4) = "amp;" then substr(n, 4, length(n) - 4) else n, | ||
| 2090 | - if name = "s" then | ||
| 2091 | - swa(success(retrieve_state(value)),an1,op1) | ||
| 2092 | - else if name = "a" then | ||
| 2093 | - swa(ps1,success(value),op1) | ||
| 2094 | - else if name = "t" then | ||
| 2095 | - swa(ps1,an1,[web_arg("target",value) . op1]) | ||
| 2096 | - else | ||
| 2097 | - swa(ps1,an1,[web_arg(name,value) . op1]), | ||
| 2098 | - | ||
| 2099 | - upload(n,v,t) then | ||
| 2100 | - swa(ps1,an1,[wa_1 . op1]) | ||
| 2101 | - }} | ||
| 2102 | - }. | 2086 | + if (Separated_Web_Args($State))swaf(wa_others, info) is |
| 2087 | + { | ||
| 2088 | + swa(ps1, // possible previous state | ||
| 2089 | + an1, // maybe an action name | ||
| 2090 | + op1) // operands so far | ||
| 2091 | + then | ||
| 2092 | + if wa_1 is | ||
| 2093 | + { | ||
| 2094 | + web_arg(n, value) then | ||
| 2095 | + with name = if substr(n,0,4) = "amp;" then substr(n, 4, length(n) - 4) else n, | ||
| 2096 | + if name = "a" then | ||
| 2097 | + swa(ps1,success(value),op1) | ||
| 2098 | + else if name = "t" then | ||
| 2099 | + swa(ps1,an1,[web_arg("target",value) . op1]) | ||
| 2100 | + else | ||
| 2101 | + swa(ps1,an1,[web_arg(name,value) . op1]), | ||
| 2102 | + | ||
| 2103 | + upload(n,v,t) then | ||
| 2104 | + swa(ps1,an1,[wa_1 . op1]) | ||
| 2105 | + } | ||
| 2106 | + } | ||
| 2107 | + }. | ||
| 2103 | 2108 | ||
| 2104 | 2109 | ||
| 2105 | 2110 | ||
| @@ -2277,8 +2282,8 @@ public define Web_Site | @@ -2277,8 +2282,8 @@ public define Web_Site | ||
| 2277 | String secret, | 2282 | String secret, |
| 2278 | List(MIME) known_mime_types, | 2283 | List(MIME) known_mime_types, |
| 2279 | (String action_name, | 2284 | (String action_name, |
| 2280 | - List(Web_arg) args) -> One before_send_file, | ||
| 2281 | - Bool using_state_cookies | 2285 | + List(Web_arg) args) -> One before_send_file |
| 2286 | + //Bool using_state_cookies | ||
| 2282 | ) = | 2287 | ) = |
| 2283 | init(unique); | 2288 | init(unique); |
| 2284 | 2289 | ||
| @@ -2306,7 +2311,7 @@ public define Web_Site | @@ -2306,7 +2311,7 @@ public define Web_Site | ||
| 2306 | List(Web_arg) lwa, | 2311 | List(Web_arg) lwa, |
| 2307 | Bool is_https) |-> | 2312 | Bool is_https) |-> |
| 2308 | (Printable_tree) | 2313 | (Printable_tree) |
| 2309 | - if separate_web_args(lwa) is | 2314 | + if separate_web_args(lwa, http_info) is |
| 2310 | { | 2315 | { |
| 2311 | swa(mb_previous_state,mb_action_name,operands) then | 2316 | swa(mb_previous_state,mb_action_name,operands) then |
| 2312 | with state_and_headers = if mb_previous_state is | 2317 | with state_and_headers = if mb_previous_state is |
| @@ -2342,7 +2347,7 @@ public define Web_Site | @@ -2342,7 +2347,7 @@ public define Web_Site | ||
| 2342 | }, | 2347 | }, |
| 2343 | if state_and_headers is (session_ticket, mb_new_state, headers) then | 2348 | if state_and_headers is (session_ticket, mb_new_state, headers) then |
| 2344 | with state_name = save_state(mb_new_state), | 2349 | with state_name = save_state(mb_new_state), |
| 2345 | - with cookie_headers = if using_state_cookies then make_state_cookie_headers(state_name) else [], | 2350 | + with cookie_headers = /* if using_state_cookies then */ make_state_cookie_headers(state_name) /*else [] */, |
| 2346 | format(info(host_name, http_port, https_port, site_directory, secret), | 2351 | format(info(host_name, http_port, https_port, site_directory, secret), |
| 2347 | state_name, | 2352 | state_name, |
| 2348 | headers + cookie_headers, | 2353 | headers + cookie_headers, |
| @@ -2369,14 +2374,14 @@ public define Web_Site | @@ -2369,14 +2374,14 @@ public define Web_Site | ||
| 2369 | secret, | 2374 | secret, |
| 2370 | known_mime_types, | 2375 | known_mime_types, |
| 2371 | site_handler(http_port,https_port), | 2376 | site_handler(http_port,https_port), |
| 2372 | - (List(Web_arg) lwa) |-> if separate_web_args(lwa) is | 2377 | + (HTTP_Info http_info, List(Web_arg) lwa) |-> if separate_web_args(lwa, http_info ) is |
| 2373 | swa(mb_previous_state,mb_action_name,operands) then | 2378 | swa(mb_previous_state,mb_action_name,operands) then |
| 2374 | if mb_action_name is | 2379 | if mb_action_name is |
| 2375 | { | 2380 | { |
| 2376 | failure then unique | 2381 | failure then unique |
| 2377 | success(an) then before_send_file(an,operands) | 2382 | success(an) then before_send_file(an,operands) |
| 2378 | - }, | ||
| 2379 | - using_state_cookies | 2383 | + } |
| 2384 | + //using_state_cookies | ||
| 2380 | ), | 2385 | ), |
| 2381 | delete_out_of_date). | 2386 | delete_out_of_date). |
| 2382 | 2387 | ||
| @@ -2886,7 +2891,7 @@ define String | @@ -2886,7 +2891,7 @@ define String | ||
| 2886 | http then "http://"+common_name+":"+http_port+"/", | 2891 | http then "http://"+common_name+":"+http_port+"/", |
| 2887 | https then "https://"+common_name+":"+https_port+"/", | 2892 | https then "https://"+common_name+":"+https_port+"/", |
| 2888 | } + | 2893 | } + |
| 2889 | - "?s=" + state_name + "&a=" + action_name + | 2894 | + "?a=" + action_name + |
| 2890 | format_extra_operands(extra_ops), | 2895 | format_extra_operands(extra_ops), |
| 2891 | if target is | 2896 | if target is |
| 2892 | { | 2897 | { |
calexium_lib/web/CXM_multihost_http_server.anubis
| @@ -210,8 +210,9 @@ public type Web_Site_Description: | @@ -210,8 +210,9 @@ public type Web_Site_Description: | ||
| 210 | HTTP_Info http_info, | 210 | HTTP_Info http_info, |
| 211 | List(Web_arg) lwa, | 211 | List(Web_arg) lwa, |
| 212 | Bool is_https) -> (Printable_tree) awp_handler, | 212 | Bool is_https) -> (Printable_tree) awp_handler, |
| 213 | - (List(Web_arg) lwa) -> One before_send_file, | ||
| 214 | - Bool using_state_cookies, | 213 | + (HTTP_Info http_info, |
| 214 | + List(Web_arg) lwa) -> One before_send_file | ||
| 215 | + //Bool using_state_cookies, | ||
| 215 | ). | 216 | ). |
| 216 | 217 | ||
| 217 | The component 'common_names' is the list of names of the site, like for example | 218 | The component 'common_names' is the list of names of the site, like for example |
| @@ -2353,6 +2354,7 @@ define One | @@ -2353,6 +2354,7 @@ define One | ||
| 2353 | read_www_url_encoded_web_args(to_string(body),0), | 2354 | read_www_url_encoded_web_args(to_string(body),0), |
| 2354 | uri = uri(request_line), | 2355 | uri = uri(request_line), |
| 2355 | ext = get_uri_extension(uri), | 2356 | ext = get_uri_extension(uri), |
| 2357 | + http_inf = http_info(ip_addr, host_name, uri, headers, is_SSL(connection), generate_tt), | ||
| 2356 | (if member(journal_extensions(desc),ext) | 2358 | (if member(journal_extensions(desc),ext) |
| 2357 | then log_journal_msg(desc, | 2359 | then log_journal_msg(desc, |
| 2358 | format_request(desc,connection,request_line,headers,all_web_args)) | 2360 | format_request(desc,connection,request_line,headers,all_web_args)) |
| @@ -2361,7 +2363,7 @@ define One | @@ -2361,7 +2363,7 @@ define One | ||
| 2361 | then log_journal_msg(desc,"Received illegal URI: "+uri+"\n") | 2363 | then log_journal_msg(desc,"Received illegal URI: "+uri+"\n") |
| 2362 | else (if (ext = ".awp" | ext = "") | 2364 | else (if (ext = ".awp" | ext = "") |
| 2363 | then (with answer_headers_body = awp_handler(desc)(host_name, | 2365 | then (with answer_headers_body = awp_handler(desc)(host_name, |
| 2364 | - http_info(ip_addr, host_name, uri, headers, is_SSL(connection), generate_tt), | 2366 | + http_inf, |
| 2365 | all_web_args, | 2367 | all_web_args, |
| 2366 | is_SSL(connection)), | 2368 | is_SSL(connection)), |
| 2367 | //print_delta("After page generation"); | 2369 | //print_delta("After page generation"); |
| @@ -2378,7 +2380,7 @@ define One | @@ -2378,7 +2380,7 @@ define One | ||
| 2378 | not_found then failure, | 2380 | not_found then failure, |
| 2379 | found(v) then success(v) | 2381 | found(v) then success(v) |
| 2380 | }, | 2382 | }, |
| 2381 | - (One u) |-> before_send_file(desc)(all_web_args)) | 2383 | + (One u) |-> before_send_file(desc)(http_inf, all_web_args)) |
| 2382 | //print_delta("After sending file") | 2384 | //print_delta("After sending file") |
| 2383 | )). | 2385 | )). |
| 2384 | 2386 | ||
| @@ -3005,7 +3007,7 @@ define Maybe((String,Web_Site_Description)) | @@ -3005,7 +3007,7 @@ define Maybe((String,Web_Site_Description)) | ||
| 3005 | { | 3007 | { |
| 3006 | [ ] then print("Requested host '"+requested_host+"' does not exist.\n"); failure, | 3008 | [ ] then print("Requested host '"+requested_host+"' does not exist.\n"); failure, |
| 3007 | [site1 . others] then | 3009 | [site1 . others] then |
| 3008 | - if site1 is web_site_description(common_names,_,_,_,_,_,_,_,_,_,_) then | 3010 | + if site1 is web_site_description(common_names,_,_,_,_,_,_,_,_,_) then |
| 3009 | if member(common_names,requested_host) | 3011 | if member(common_names,requested_host) |
| 3010 | then success((requested_host,site1)) | 3012 | then success((requested_host,site1)) |
| 3011 | else get_site(requested_host,others) | 3013 | else get_site(requested_host,others) |