diff --git a/apps/blagh/app.rc b/apps/blagh/app.rc index 1dad7f8..8ae26fa 100644 --- a/apps/blagh/app.rc +++ b/apps/blagh/app.rc @@ -35,10 +35,10 @@ fn blagh_init { ' } if not if(~ $req_path $blagh_uri^index.atom) - blagh_setup_feed_handlers atom.tpl + blagh_setup_feed_handlers atom.tpl 'application/atom+xml' if not if(~ $req_path $blagh_uri^index.rss) - blagh_setup_feed_handlers rss20.tpl + blagh_setup_feed_handlers rss20.tpl 'text/xml; charset=utf-8' if not if(~ $req_path $blagh_uri^new_post && ! ~ $#editor_mode 0) { handler_body_main=( tpl_handler `{get_lib_file blagh/new_post.tpl apps/blagh/new_post.tpl} ) @@ -56,6 +56,7 @@ fn blagh_init { fn blagh_setup_feed_handlers { handler_body_main=NOT_USED_by_blagh_feeds res_tail=() + http_content_type=$2 headers=() master_template=apps/blagh/$1 # Should we allow tempalte override? } diff --git a/apps/blagh/atom.tpl b/apps/blagh/atom.tpl index 85e5966..49ecbe1 100644 --- a/apps/blagh/atom.tpl +++ b/apps/blagh/atom.tpl @@ -1,5 +1,3 @@ -Content-Type: application/atom+xml - %{ diff --git a/apps/blagh/rss20.tpl b/apps/blagh/rss20.tpl index 38622d1..141e891 100644 --- a/apps/blagh/rss20.tpl +++ b/apps/blagh/rss20.tpl @@ -1,5 +1,3 @@ -Content-Type: text/xml; charset=utf-8 - %{ diff --git a/apps/dirdir/app.rc b/apps/dirdir/app.rc index 1d2a2f5..70dfc40 100644 --- a/apps/dirdir/app.rc +++ b/apps/dirdir/app.rc @@ -8,32 +8,15 @@ fn dirdir_init { if(! ~ $#enable_wiki 0 && check_user $wiki_editors_groups) { dirdir_file=$local_path.md dirdir_dir=$dirdir_file^'_werc/dirdir/' - - if(test -f $local_path.md) { - if(~ $#post_arg_dirdir_save 1 && ! ~ $"post_arg_edit_text '') - save_page + + if(~ 1 $#post_arg_dirdir_edit $#post_arg_dirdir_preview) + handler_body_main=(tpl_handler `{get_lib_file dirdir/edit.tpl apps/dirdir/edit.tpl}) - if not if(~ 1 $#post_arg_dirdir_edit $#post_arg_dirdir_preview) - handler_body_main=(tpl_handler \ - `{get_lib_file dirdir/edit.tpl apps/dirdir/edit.tpl}) - - if not if(! ~ $REQUEST_METHOD POST) - ll_add handlers_bar_left tpl_handler \ - apps/dirdir/sidebar_controls.tpl - } - - if not if(~ 1 $#post_arg_dirdir_edit) - handler_body_main=(tpl_handler \ - `{get_lib_file dirdir/edit.tpl apps/dirdir/edit.tpl}) - - if not if(~ 1 $#post_arg_dirdir_save) { - mkdir -p `{basename -d $local_path} + if not if(! ~ '' $"post_arg_dirdir_save $"post_arg_edit_text) save_page - } - if not if(~ $"handler_body_main '') - ll_add handlers_bar_left tpl_handler \ - apps/dirdir/sidebar_controls.tpl + if not if(~ $"handler_body_main '' || {~ $REQUEST_METHOD GET && test -f $local_path.md}) + ll_add handlers_bar_left tpl_handler apps/dirdir/sidebar_controls.tpl } } diff --git a/bin/cgilib.rc b/bin/cgilib.rc index eb14d12..1dfb8ca 100644 --- a/bin/cgilib.rc +++ b/bin/cgilib.rc @@ -157,6 +157,13 @@ fn ll_add { $_l=$*(2-) $1=( $$1 $_l ) } +# Add to the head: dangerous if you shrink list by hand! +fn ll_addh { + _l=$1^_^$#$1 + $_l=$*(2-) + $1=( $_l $$1 ) +} + NEW_LINE=' ' diff --git a/bin/werc.rc b/bin/werc.rc index 622695d..d1cfe6c 100755 --- a/bin/werc.rc +++ b/bin/werc.rc @@ -19,6 +19,7 @@ path=(. $PLAN9/bin ./bin /bin /usr/bin) headers=lib/headers.tpl res_tail='' +http_content_type='text/html' ll_add handlers_bar_left nav_tree werc_apps=( apps/* ) werc_root=`{pwd} @@ -88,20 +89,16 @@ fn werc_exec_request { if(~ $#perm_redir_to 1) perm_redirect $perm_redir_to - p=(); - for(i in $perm_redir_patterns) { - if(~ $#p 0) - p=$i - if not { - # If target is absolute, require patern matches whole string - if(~ $i http://* https://) - p='^'$p - t=`{ echo $req_path | sed 's!'$p'!'$i'!' } + for(l in $perm_redir_patterns) { + p=$$l + r=$p(1) + # If target is absolute, then patern must match whole string + if(~ $p(2) http://* https://) + r='^'$r + t=`{ echo $req_path | sed 's!'^$r^'!'^$p(2)^'!' } # Malicious danger! - if(! ~ $"t '' && ! ~ $t $req_path) - perm_redirect $t - p=() - } + if(! ~ $"t '' $req_path) + perm_redirect $t } # Set Page title @@ -112,9 +109,17 @@ fn werc_exec_request { setup_handlers + for(h in $extraHttpHeaders) + echo $h + echo 'Content-Type: '^$http_content_type + if(~ $REQUEST_METHOD HEAD) + exit + echo # End of HTTP headers + if(! ~ $#debug 0) dprint $"SERVER_NAME^$"REQUEST_URI - $"HTTP_USER_AGENT - $"REQUEST_METHOD - $"handler_body_main - $"master_template + template $headers $master_template | awk_buffer echo $res_tail } diff --git a/bin/wercconf.rc b/bin/wercconf.rc index ee49104..bb3422d 100644 --- a/bin/wercconf.rc +++ b/bin/wercconf.rc @@ -3,7 +3,7 @@ fn conf_perm_redirect { if(~ $#* 1) perm_redir_to=$1 if not - perm_redir_patterns=($1 $2 $perm_redir_patterns) + ll_addh perm_redir_patterns $1 $2 } fn conf_hide_paths { diff --git a/bin/werclib.rc b/bin/werclib.rc index 63bc9ba..2367dbe 100644 --- a/bin/werclib.rc +++ b/bin/werclib.rc @@ -14,6 +14,7 @@ fn get_lib_file { fn template { awk -f bin/template.awk $* | rc $rcargs } # Auth code +# TODO: check http://cookies.lcs.mit.edu/pubs/webauth:tr.pdf allowed_user_chars='[a-zA-Z0-9_]' # Cookie format: WERC_USER: name:timestamp:hash(name.timestamp.password) # login_user can't be used from a template because it sets a cookie diff --git a/lib/default_master.tpl b/lib/default_master.tpl index edd7fab..52743e8 100644 --- a/lib/default_master.tpl +++ b/lib/default_master.tpl @@ -1,4 +1,3 @@ -