Commit 9193ea964d5f2cff0b6c54234c2e4d6a534b56ee
1 parent
e15ab157
Fix the redirection handling.
Showing
1 changed file
with
23 additions
and
15 deletions
Show diff stats
calexium_lib/web/CXM_multihost_http_server.anubis
| @@ -489,7 +489,8 @@ public define One | @@ -489,7 +489,8 @@ public define One | ||
| 489 | 489 | ||
| 490 | 490 | ||
| 491 | --- That's all for the public part ! -------------------------------------------------- | 491 | --- That's all for the public part ! -------------------------------------------------- |
| 492 | - | 492 | + |
| 493 | +define Maybe(String) get_host_header_value(List(HTTP_header) headers). | ||
| 493 | 494 | ||
| 494 | define String | 495 | define String |
| 495 | utime_to_string | 496 | utime_to_string |
| @@ -2798,24 +2799,31 @@ define String | @@ -2798,24 +2799,31 @@ define String | ||
| 2798 | Finding the 'Host' header. No redirection is performed if this header is not found. | 2799 | Finding the 'Host' header. No redirection is performed if this header is not found. |
| 2799 | 2800 | ||
| 2800 | define String | 2801 | define String |
| 2801 | - handle_redirection // returns the redirected URI | ||
| 2802 | - ( | ||
| 2803 | - Redirections redirections, | ||
| 2804 | - String uri, // original URI | ||
| 2805 | - List(HTTP_header) headers | ||
| 2806 | - ) = | 2802 | + handle_redirection // returns the redirected URI |
| 2803 | + ( | ||
| 2804 | + Redirections redirections, | ||
| 2805 | + String uri, // original URI | ||
| 2806 | + List(HTTP_header) headers | ||
| 2807 | + )= | ||
| 2808 | + if get_host_header_value(headers) is | ||
| 2809 | + { | ||
| 2810 | + failure then uri, | ||
| 2811 | + success(host) then | ||
| 2812 | + if redirections is | ||
| 2813 | + { | ||
| 2814 | + redirection_list(l) then handle_redirection(uri, host, l) | ||
| 2815 | + redirection_fn(f) then f(uri, host) | ||
| 2816 | + } | ||
| 2817 | + }. | ||
| 2818 | + | ||
| 2807 | if headers is | 2819 | if headers is |
| 2808 | { | 2820 | { |
| 2809 | [ ] then uri, | 2821 | [ ] then uri, |
| 2810 | [h . t] then if h is http_header(name,value) then | 2822 | [h . t] then if h is http_header(name,value) then |
| 2811 | - if redirections is | ||
| 2812 | - { | ||
| 2813 | - redirection_list(l) then | ||
| 2814 | - if name = "host" | ||
| 2815 | - then handle_redirection(uri, strip_port(value,0), l) | ||
| 2816 | - else handle_redirection(redirections,uri,t) | ||
| 2817 | - redirection_fn(f) then f(uri, strip_port(value,0)) | ||
| 2818 | - } | 2823 | + if name = "host" then |
| 2824 | + | ||
| 2825 | + else | ||
| 2826 | + handle_redirection(redirections,uri,t) | ||
| 2819 | }. | 2827 | }. |
| 2820 | 2828 | ||
| 2821 | 2829 |