Commit c8a2ef78e6cbbfa1faeea06e72c5b0d7d9bb8a25
1 parent
daef9747
http_action, https_action and http_https_action now return $State instead of (Ma…
…ybe($SessionTicket, Maybe($Sate), List(HTTP_header))
Showing
2 changed files
with
66 additions
and
90 deletions
Show diff stats
web/CXM_making_a_web_site.anubis
| @@ -230,22 +230,22 @@ read CXM_cookies.anubis | @@ -230,22 +230,22 @@ read CXM_cookies.anubis | ||
| 230 | sub-boxes as there are actions. For this reason, we define the following type for | 230 | sub-boxes as there are actions. For this reason, we define the following type for |
| 231 | representing actions (where '$State' is the type representing session informations): | 231 | representing actions (where '$State' is the type representing session informations): |
| 232 | 232 | ||
| 233 | -public type Web_Action($SessionTicket, $State): | 233 | +public type Web_Action($State): |
| 234 | http_action (String name, // name of action | 234 | http_action (String name, // name of action |
| 235 | - (Maybe($State)) -> Bool allow, // true if action allowed | 235 | + ($State) -> Bool allow, // true if action allowed |
| 236 | (HTTP_Info http_info, | 236 | (HTTP_Info http_info, |
| 237 | List(Web_arg) web_args, // actually only 'operands' web arguments | 237 | List(Web_arg) web_args, // actually only 'operands' web arguments |
| 238 | - Maybe($State) state) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) do_it), | 238 | + $State state) -> $State do_it), |
| 239 | https_action (String name, // name of action | 239 | https_action (String name, // name of action |
| 240 | - (Maybe($State)) -> Bool allow, // true if action allowed | 240 | + ($State) -> Bool allow, // true if action allowed |
| 241 | (HTTP_Info http_info, | 241 | (HTTP_Info http_info, |
| 242 | List(Web_arg) web_args, // actually only 'operands' web arguments | 242 | List(Web_arg) web_args, // actually only 'operands' web arguments |
| 243 | - Maybe($State) state) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) do_it), | 243 | + $State state) -> $State do_it), |
| 244 | http_https_action (String name, | 244 | http_https_action (String name, |
| 245 | - (Maybe($State)) -> Bool allow, // true if action allowed | 245 | + ($State) -> Bool allow, |
| 246 | (HTTP_Info http_info, | 246 | (HTTP_Info http_info, |
| 247 | List(Web_arg) web_args, | 247 | List(Web_arg) web_args, |
| 248 | - Maybe($State) state) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) do_it). | 248 | + $State state) -> $State do_it). |
| 249 | 249 | ||
| 250 | 'http_action's are executed only under HTTP, and 'https_action's are executed only | 250 | 'http_action's are executed only under HTTP, and 'https_action's are executed only |
| 251 | under HTTPS. 'http_https_action's may be executed under both types of connections. | 251 | under HTTPS. 'http_https_action's may be executed under both types of connections. |
| @@ -431,17 +431,18 @@ public define Web_Site | @@ -431,17 +431,18 @@ public define Web_Site | ||
| 431 | String site_directory, // where 'public' and other directories are | 431 | String site_directory, // where 'public' and other directories are |
| 432 | // located (should NOT end with '/') | 432 | // located (should NOT end with '/') |
| 433 | One -> One init, | 433 | One -> One init, |
| 434 | - (HTTP_Info) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) initial_state, | 434 | + (HTTP_Info) -> $State initial_state, |
| 435 | ($State expired, | 435 | ($State expired, |
| 436 | HTTP_Info, | 436 | HTTP_Info, |
| 437 | List(Web_arg), | 437 | List(Web_arg), |
| 438 | - Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) ticket_expired_state, | 438 | + Bool is_https) -> $State ticket_expired_state, |
| 439 | (HTTP_Info, | 439 | (HTTP_Info, |
| 440 | List(Web_arg), | 440 | List(Web_arg), |
| 441 | - Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) ticket_lost_state, | ||
| 442 | - List(Web_Action($SessionTicket, $State)) actions, | ||
| 443 | - (Maybe($SessionTicket), Maybe($State), String state_name, List(Web_arg) lwa) -> HTTP_Answer compute_page, | ||
| 444 | - Int timeout, // seconds (todo: minutes) | 441 | + Bool is_https) -> $State ticket_lost_state, |
| 442 | + List(Web_Action($State)) actions, | ||
| 443 | + $State -> HTTP_Answer compute_page, | ||
| 444 | + $State -> List(HTTP_header) additional_headers, | ||
| 445 | + Int timeout, // seconds (todo: minutes) | ||
| 445 | List(Redirection) redirections, | 446 | List(Redirection) redirections, |
| 446 | String charset, | 447 | String charset, |
| 447 | List(String) journal_extensions, | 448 | List(String) journal_extensions, |
| @@ -512,7 +513,7 @@ public define Web_Site | @@ -512,7 +513,7 @@ public define Web_Site | ||
| 512 | 513 | ||
| 513 | ** (2.2) Directories on the server's disk. | 514 | ** (2.2) Directories on the server's disk. |
| 514 | 515 | ||
| 515 | - The description of you site contains the name of the directory within which the | 516 | + The description of your site contains the name of the directory within which the |
| 516 | required files are located. This may be for example: | 517 | required files are located. This may be for example: |
| 517 | 518 | ||
| 518 | my_anubis/web_sites/www.our-business.com/ | 519 | my_anubis/web_sites/www.our-business.com/ |
| @@ -1799,24 +1800,19 @@ read CXM_web_arg_encode.anubis | @@ -1799,24 +1800,19 @@ read CXM_web_arg_encode.anubis | ||
| 1799 | The tool below constructs the function which is able to save a state on the server's | 1800 | The tool below constructs the function which is able to save a state on the server's |
| 1800 | disk. | 1801 | disk. |
| 1801 | 1802 | ||
| 1802 | -define (Maybe($State) s) -> String // the function constructed returns the name of the state | 1803 | +define ($State s) -> String // the function constructed returns the name of the state |
| 1803 | make_save_state_function | 1804 | make_save_state_function |
| 1804 | ( | 1805 | ( |
| 1805 | Int timeout, | 1806 | Int timeout, |
| 1806 | String state_directory | 1807 | String state_directory |
| 1807 | ) = | 1808 | ) = |
| 1808 | - (Maybe($State) mbs) |-> | ||
| 1809 | - if mbs is | ||
| 1810 | - { | ||
| 1811 | - failure then "", | ||
| 1812 | - success(s) then | 1809 | + ($State s) |-> |
| 1813 | with time_stamp = now+timeout, | 1810 | with time_stamp = now+timeout, |
| 1814 | to_be_saved = (time_stamp,s), | 1811 | to_be_saved = (time_stamp,s), |
| 1815 | state_name = web_arg_encode(sha1(s)), | 1812 | state_name = web_arg_encode(sha1(s)), |
| 1816 | if save(to_be_saved,state_directory+"/s"+state_name) is ok | 1813 | if save(to_be_saved,state_directory+"/s"+state_name) is ok |
| 1817 | then state_name | 1814 | then state_name |
| 1818 | - else (print("Cannot create state file in '"+state_directory+"'.\n"); "") | ||
| 1819 | - }. | 1815 | + else (print("Cannot create state file in '"+state_directory+"'.\n"); ""). |
| 1820 | 1816 | ||
| 1821 | 1817 | ||
| 1822 | When a request arrives, we need to retrieve the previous state from the server's | 1818 | When a request arrives, we need to retrieve the previous state from the server's |
| @@ -2076,9 +2072,9 @@ define Int | @@ -2076,9 +2072,9 @@ define Int | ||
| 2076 | The result of the separation of the web arguments is of type: | 2072 | The result of the separation of the web arguments is of type: |
| 2077 | 2073 | ||
| 2078 | type Separated_Web_Args($State): | 2074 | type Separated_Web_Args($State): |
| 2079 | - swa(Maybe(PreviousState($State)) previous_state, | ||
| 2080 | - Maybe(String) action_name, | ||
| 2081 | - List(Web_arg) operands). | 2075 | + swa(PreviousState($State) previous_state, |
| 2076 | + Maybe(String) action_name, | ||
| 2077 | + List(Web_arg) operands). | ||
| 2082 | 2078 | ||
| 2083 | 2079 | ||
| 2084 | 2080 | ||
| @@ -2099,8 +2095,8 @@ define (List(Web_arg) lwa, HTTP_Info info) -> Separated_Web_Args($State) | @@ -2099,8 +2095,8 @@ define (List(Web_arg) lwa, HTTP_Info info) -> Separated_Web_Args($State) | ||
| 2099 | // | 2095 | // |
| 2100 | if find_cookie("s", server_get_cookies(http_headers(info))) is | 2096 | if find_cookie("s", server_get_cookies(http_headers(info))) is |
| 2101 | { | 2097 | { |
| 2102 | - failure then swa(failure,failure,[]), | ||
| 2103 | - success(cookie) then swa(success(retrieve_state(value(cookie))),failure,[]) | 2098 | + failure then swa(not_found,failure,[]), |
| 2099 | + success(cookie) then swa(retrieve_state(value(cookie)),failure,[]) | ||
| 2104 | }, | 2100 | }, |
| 2105 | 2101 | ||
| 2106 | //swa(failure,failure,[]), | 2102 | //swa(failure,failure,[]), |
| @@ -2147,26 +2143,26 @@ define (List(Web_arg) lwa, HTTP_Info info) -> Separated_Web_Args($State) | @@ -2147,26 +2143,26 @@ define (List(Web_arg) lwa, HTTP_Info info) -> Separated_Web_Args($State) | ||
| 2147 | arrives through the HTTPS channel and conversely. | 2143 | arrives through the HTTPS channel and conversely. |
| 2148 | 2144 | ||
| 2149 | 2145 | ||
| 2150 | -define (Maybe($State) previous, | ||
| 2151 | - String action_name, | ||
| 2152 | - HTTP_Info http_info, | ||
| 2153 | - List(Web_arg) lwa, | ||
| 2154 | - Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) | 2146 | +define ($State previous, |
| 2147 | + String action_name, | ||
| 2148 | + HTTP_Info http_info, | ||
| 2149 | + List(Web_arg) lwa, | ||
| 2150 | + Bool is_https) -> $State | ||
| 2155 | make_apply_action_function | 2151 | make_apply_action_function |
| 2156 | ( | 2152 | ( |
| 2157 | - List(Web_Action($SessionTicket, $State)) actions_list | 2153 | + List(Web_Action($State)) actions_list |
| 2158 | ) = | 2154 | ) = |
| 2159 | with f = | 2155 | with f = |
| 2160 | - (Maybe($State) previous, | 2156 | + ($State previous, |
| 2161 | String action_name, | 2157 | String action_name, |
| 2162 | HTTP_Info http_info, | 2158 | HTTP_Info http_info, |
| 2163 | List(Web_arg) lwa, | 2159 | List(Web_arg) lwa, |
| 2164 | Bool is_https, | 2160 | Bool is_https, |
| 2165 | - List(Web_Action($SessionTicket, $State)) actions) |-f-> | 2161 | + List(Web_Action($State)) actions) |-f-> |
| 2166 | if actions is | 2162 | if actions is |
| 2167 | { | 2163 | { |
| 2168 | - [ ] then (print("action '"+action_name+ | ||
| 2169 | - "' not found.\n"); (failure, previous, [])), | 2164 | + [ ] then print("action '"+action_name+ |
| 2165 | + "' not found.\n"); previous, | ||
| 2170 | [ac1 . others] then if ac1 is | 2166 | [ac1 . others] then if ac1 is |
| 2171 | { | 2167 | { |
| 2172 | http_action(an,allow,do_it) then | 2168 | http_action(an,allow,do_it) then |
| @@ -2174,10 +2170,10 @@ define (Maybe($State) previous, | @@ -2174,10 +2170,10 @@ define (Maybe($State) previous, | ||
| 2174 | then if is_https | 2170 | then if is_https |
| 2175 | then (print("HTTP action '"+an+ | 2171 | then (print("HTTP action '"+an+ |
| 2176 | "' called through HTTPS (denied).\n"); | 2172 | "' called through HTTPS (denied).\n"); |
| 2177 | - (failure, previous, [])) | 2173 | + previous) |
| 2178 | else if allow(previous) | 2174 | else if allow(previous) |
| 2179 | then do_it(http_info,lwa,previous) | 2175 | then do_it(http_info,lwa,previous) |
| 2180 | - else (failure, previous, []) | 2176 | + else previous |
| 2181 | else f(previous,action_name,http_info,lwa,is_https,others), | 2177 | else f(previous,action_name,http_info,lwa,is_https,others), |
| 2182 | 2178 | ||
| 2183 | https_action(an,allow,do_it) then | 2179 | https_action(an,allow,do_it) then |
| @@ -2185,26 +2181,26 @@ define (Maybe($State) previous, | @@ -2185,26 +2181,26 @@ define (Maybe($State) previous, | ||
| 2185 | then if is_https | 2181 | then if is_https |
| 2186 | then if allow(previous) | 2182 | then if allow(previous) |
| 2187 | then do_it(http_info,lwa,previous) | 2183 | then do_it(http_info,lwa,previous) |
| 2188 | - else (failure, previous, []) | 2184 | + else previous |
| 2189 | else (print("HTTPS action '"+an+ | 2185 | else (print("HTTPS action '"+an+ |
| 2190 | "' called through HTTP (denied).\n"); | 2186 | "' called through HTTP (denied).\n"); |
| 2191 | - (failure, previous, [])) | 2187 | + previous) |
| 2192 | else f(previous,action_name,http_info,lwa,is_https,others), | 2188 | else f(previous,action_name,http_info,lwa,is_https,others), |
| 2193 | 2189 | ||
| 2194 | http_https_action(an,allow,do_it) then | 2190 | http_https_action(an,allow,do_it) then |
| 2195 | if an = action_name | 2191 | if an = action_name |
| 2196 | then if allow(previous) | 2192 | then if allow(previous) |
| 2197 | then do_it(http_info,lwa,previous) | 2193 | then do_it(http_info,lwa,previous) |
| 2198 | - else (failure, previous, []) | 2194 | + else previous |
| 2199 | else f(previous,action_name,http_info,lwa,is_https,others), | 2195 | else f(previous,action_name,http_info,lwa,is_https,others), |
| 2200 | 2196 | ||
| 2201 | } | 2197 | } |
| 2202 | }, | 2198 | }, |
| 2203 | - (Maybe($State) previous, | ||
| 2204 | - String action_name, | ||
| 2205 | - HTTP_Info http_info, | ||
| 2206 | - List(Web_arg) lwa, | ||
| 2207 | - Bool is_https) |-> | 2199 | + ($State previous, |
| 2200 | + String action_name, | ||
| 2201 | + HTTP_Info http_info, | ||
| 2202 | + List(Web_arg) lwa, | ||
| 2203 | + Bool is_https) |-> | ||
| 2208 | f(previous, action_name, http_info, lwa, is_https, actions_list). | 2204 | f(previous, action_name, http_info, lwa, is_https, actions_list). |
| 2209 | 2205 | ||
| 2210 | 2206 | ||
| @@ -2289,20 +2285,21 @@ public define Web_Site | @@ -2289,20 +2285,21 @@ public define Web_Site | ||
| 2289 | One -> One init, | 2285 | One -> One init, |
| 2290 | (HTTP_Info, | 2286 | (HTTP_Info, |
| 2291 | List(Web_arg), | 2287 | List(Web_arg), |
| 2292 | - Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) initial_state, | 2288 | + Bool is_https) -> $State initial_state, |
| 2293 | ($State expired, | 2289 | ($State expired, |
| 2294 | Maybe(String), | 2290 | Maybe(String), |
| 2295 | HTTP_Info, | 2291 | HTTP_Info, |
| 2296 | List(Web_arg), | 2292 | List(Web_arg), |
| 2297 | - Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) ticket_expired_state, | 2293 | + Bool is_https) -> $State ticket_expired_state, |
| 2298 | (Maybe(String), | 2294 | (Maybe(String), |
| 2299 | HTTP_Info, | 2295 | HTTP_Info, |
| 2300 | List(Web_arg), | 2296 | List(Web_arg), |
| 2301 | - Bool is_https) -> (Maybe($SessionTicket), Maybe($State), List(HTTP_header)) ticket_lost_state, | ||
| 2302 | - List(Web_Action($SessionTicket, $State)) actions, | ||
| 2303 | - (Maybe($SessionTicket), Maybe($State), String state_name, List(Web_arg) lwa) -> HTTP_Answer compute_page, | ||
| 2304 | - Int timeout, | ||
| 2305 | - Redirections redirections, | 2297 | + Bool is_https) -> $State ticket_lost_state, |
| 2298 | + List(Web_Action($State)) actions, | ||
| 2299 | + $State -> HTTP_Answer compute_page, | ||
| 2300 | + $State -> List(HTTP_header) additional_headers, | ||
| 2301 | + Int timeout, | ||
| 2302 | + Redirections redirections, | ||
| 2306 | String charset, | 2303 | String charset, |
| 2307 | List(String) journal_extensions, | 2304 | List(String) journal_extensions, |
| 2308 | List(String) journal_headers, | 2305 | List(String) journal_headers, |
| @@ -2337,21 +2334,12 @@ public define Web_Site | @@ -2337,21 +2334,12 @@ public define Web_Site | ||
| 2337 | HTTP_Info http_info, | 2334 | HTTP_Info http_info, |
| 2338 | List(Web_arg) lwa, | 2335 | List(Web_arg) lwa, |
| 2339 | Bool is_https) |-> | 2336 | Bool is_https) |-> |
| 2340 | - (Printable_tree) | 2337 | + //(Printable_tree) |
| 2341 | if separate_web_args(lwa, http_info) is | 2338 | if separate_web_args(lwa, http_info) is |
| 2342 | { | 2339 | { |
| 2343 | swa(mb_previous_state,mb_action_name,operands) then | 2340 | swa(mb_previous_state,mb_action_name,operands) then |
| 2344 | - with state_and_headers = if mb_previous_state is | 2341 | + with new_state = if mb_previous_state is |
| 2345 | { | 2342 | { |
| 2346 | - failure then | ||
| 2347 | - if mb_action_name is | ||
| 2348 | - { | ||
| 2349 | - failure then initial_state(http_info, operands, is_https), | ||
| 2350 | - success(action_name) then | ||
| 2351 | - apply_action(failure,action_name,http_info,operands,is_https) | ||
| 2352 | - }, | ||
| 2353 | - success(previous_state) then if previous_state is | ||
| 2354 | - { | ||
| 2355 | not_found then | 2343 | not_found then |
| 2356 | if mb_action_name is | 2344 | if mb_action_name is |
| 2357 | { | 2345 | { |
| @@ -2366,19 +2354,18 @@ public define Web_Site | @@ -2366,19 +2354,18 @@ public define Web_Site | ||
| 2366 | still_valid(state) then | 2354 | still_valid(state) then |
| 2367 | if mb_action_name is | 2355 | if mb_action_name is |
| 2368 | { | 2356 | { |
| 2369 | - failure then (failure, success(state), []), | 2357 | + failure then state, |
| 2370 | success(action_name) then | 2358 | success(action_name) then |
| 2371 | - apply_action(success(state),action_name,http_info,operands,is_https) | 2359 | + apply_action(state,action_name,http_info,operands,is_https) |
| 2372 | } | 2360 | } |
| 2373 | - } | ||
| 2374 | - }, | ||
| 2375 | - if state_and_headers is (session_ticket, mb_new_state, headers) then | ||
| 2376 | - with state_name = save_state(mb_new_state), | 2361 | + }, |
| 2362 | + //if state_and_headers is (session_ticket, mb_new_state, headers) then | ||
| 2363 | + with state_name = save_state(new_state), | ||
| 2377 | with cookie_headers = /* if using_state_cookies then */ make_state_cookie_headers(state_name) /*else [] */, | 2364 | with cookie_headers = /* if using_state_cookies then */ make_state_cookie_headers(state_name) /*else [] */, |
| 2378 | - format(info(host_name, http_port, https_port, site_directory, secret), | 2365 | + format(info(host_name, http_port, https_port, site_directory, secret), |
| 2379 | state_name, | 2366 | state_name, |
| 2380 | - headers + cookie_headers, | ||
| 2381 | - compute_page(session_ticket, mb_new_state, state_name, operands), | 2367 | + additional_headers(new_state) + cookie_headers, |
| 2368 | + compute_page(new_state), | ||
| 2382 | is_https, | 2369 | is_https, |
| 2383 | charset) | 2370 | charset) |
| 2384 | }), | 2371 | }), |
| @@ -3525,19 +3512,7 @@ define String | @@ -3525,19 +3512,7 @@ define String | ||
| 3525 | 3512 | ||
| 3526 | 3513 | ||
| 3527 | Normalizing a list of cell options (horizontal position must be specified; the default | 3514 | Normalizing a list of cell options (horizontal position must be specified; the default |
| 3528 | - is 'left'). | ||
| 3529 | - | ||
| 3530 | -define List(Cell_Option) | ||
| 3531 | - normalize | ||
| 3532 | - ( | ||
| 3533 | - List(Cell_Option) l | ||
| 3534 | - ) = | ||
| 3535 | - if member(l,left) then l else | ||
| 3536 | - if member(l,h_center) then l else | ||
| 3537 | - if member(l,right) then l else | ||
| 3538 | - //[left . l]. CR: why ? there is no default because we can use CSS | ||
| 3539 | - l. | ||
| 3540 | - | 3515 | + is 'left'). |
| 3541 | 3516 | ||
| 3542 | Formating cells in a row. | 3517 | Formating cells in a row. |
| 3543 | 3518 | ||
| @@ -3551,7 +3526,7 @@ define Printable_tree | @@ -3551,7 +3526,7 @@ define Printable_tree | ||
| 3551 | { | 3526 | { |
| 3552 | [ ] then [ ], | 3527 | [ ] then [ ], |
| 3553 | [h . t] then if h is cell(options,element) then | 3528 | [h . t] then if h is cell(options,element) then |
| 3554 | - ["<td",format(reverse(normalize(options))),">", | 3529 | + ["<td",format(reverse(options)),">", |
| 3555 | format_element(element), | 3530 | format_element(element), |
| 3556 | "</td>" | 3531 | "</td>" |
| 3557 | . format(t,format_element)] | 3532 | . format(t,format_element)] |
| @@ -3567,7 +3542,7 @@ define Printable_tree | @@ -3567,7 +3542,7 @@ define Printable_tree | ||
| 3567 | { | 3542 | { |
| 3568 | [ ] then [ ], | 3543 | [ ] then [ ], |
| 3569 | [h . t] then if h is header_cell(options,element) then | 3544 | [h . t] then if h is header_cell(options,element) then |
| 3570 | - ["<th ",format(reverse(normalize(options))),">", | 3545 | + ["<th ",format(reverse(options)),">", |
| 3571 | format_element(element), | 3546 | format_element(element), |
| 3572 | "</th>" | 3547 | "</th>" |
| 3573 | . format(t,format_element)] | 3548 | . format(t,format_element)] |
web/CXM_multihost_http_server.anubis
| @@ -209,7 +209,8 @@ public type Web_Site_Description: | @@ -209,7 +209,8 @@ public type Web_Site_Description: | ||
| 209 | (String host_name, | 209 | (String host_name, |
| 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) -> (//List(HTTP_header), |
| 213 | + Printable_tree) awp_handler, | ||
| 213 | (HTTP_Info http_info, | 214 | (HTTP_Info http_info, |
| 214 | List(Web_arg) lwa) -> One before_send_file | 215 | List(Web_arg) lwa) -> One before_send_file |
| 215 | //Bool using_state_cookies, | 216 | //Bool using_state_cookies, |