Further cleanup and simplification of redirect code.

This commit is contained in:
Uriel 2009-03-03 13:15:46 +00:00
parent e74f2966ca
commit d12c13ee25
3 changed files with 15 additions and 15 deletions

View file

@ -6,7 +6,7 @@ fn dprintv { { for(v in $*) { echo -n $v^'#'^$#$v^'=' $$v '; ' }; echo } >[1=2]
fn escape_html { sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g' $* } fn escape_html { sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g' $* }
fn http_redirect { fn http_redirect {
if(~ $1 http:* https:*) if(~ $1 http://* https://*)
t=$1 t=$1
if not if(~ $1 /*) if not if(~ $1 /*)
t=$"base_url^$1 t=$"base_url^$1

View file

@ -40,6 +40,7 @@ fn werc_exec_request {
# Note: $REQUEST_URI is not officially in CGI 1.1, but seems to be de-facto # Note: $REQUEST_URI is not officially in CGI 1.1, but seems to be de-facto
req_path=`{echo -n $REQUEST_URI | sed 's/\?.*//; s!//+!/!g; s/'^$forbidden_uri_chars^'//g; s/\.\.*/./g; 1q'} req_path=`{echo -n $REQUEST_URI | sed 's/\?.*//; s!//+!/!g; s/'^$forbidden_uri_chars^'//g; s/\.\.*/./g; 1q'}
req_url=$base_url^$req_path
local_path=$sitedir$req_path local_path=$sitedir$req_path
ifs='/' { args=`{echo -n $req_path} } ifs='/' { args=`{echo -n $req_path} }
@ -85,18 +86,19 @@ fn werc_exec_request {
if(~ $#perm_redir_to 1) if(~ $#perm_redir_to 1)
perm_redirect $perm_redir_to perm_redirect $perm_redir_to
f=();t=() p=();
for(i in $perm_redir_patterns) { for(i in $perm_redir_patterns) {
if(~ $#f 0) if(~ $#p 0)
f=$i p=$i
if not { if not {
t=$i # If target is absolute, require patern matches whole string
# TODO: should handle absolute and relative urls differently. if(~ $i http://* https://)
from=$base_url^$req_path p='^'$p
to=`{ echo $from | sed 's!'$f'!'$t'!' } t=`{ echo $req_path | sed 's!'$p'!'$i'!' }
if(! ~ $to $from)
perm_redirect $to if(! ~ $"t '' && ! ~ $t $req_path)
f=() perm_redirect $t
p=()
} }
} }

View file

@ -2,15 +2,13 @@
fn conf_perm_redirect { fn conf_perm_redirect {
if(~ $#* 1) if(~ $#* 1)
perm_redir_to=$1 perm_redir_to=$1
if not { if not
perm_redir_patterns=($perm_redir_patterns $1 $2) perm_redir_patterns=($perm_redir_patterns $1 $2)
conf_hide_paths $1 # XXX Will hide paths even if replacement string is the same as matched sctring.
}
} }
fn conf_hide_paths { fn conf_hide_paths {
for(i in $*) for(i in $*)
dirfilter=$dirfilter^'/'^`{echo $sitedir'/'$i|sed 's!/+!\\/!g'}^'/d; ' dirfilter=$dirfilter^'/'^`{echo $sitedir$conf_wd$i|sed 's!/+!\\/!g'}^'/d; '
} }
# Usually will be called from within conf_enable_foo # Usually will be called from within conf_enable_foo