commit ee293798c5af8461f2ff9f35f278092ed1038425
parent 43b7ac0606570b80f16420ea5ab217f2dc9c309a
Author: anselm@garbe.us <unknown>
Date:   Sun, 12 Feb 2012 18:14:45 +0100
removed another bunch of useless crap
Diffstat:
10 files changed, 6 insertions(+), 404 deletions(-)
diff --git a/bin/cgilib.rc b/bin/cgilib.rc
@@ -1,9 +1,6 @@
 # Useful CGI stuff
 
 fn dprint { echo $* >[1=2] }
-fn dprintv { { for(v in $*) { echo -n $v^'#'^$#$v^'=' $$v '; '  }; echo } >[1=2] }
-
-fn escape_html { sed 's/&/\&/g; s/</\</g; s/>/\>/g' $* }
 
 fn http_redirect {
     if(~ $1 http://* https://*)
@@ -19,38 +16,6 @@ Location: '^$t^'
     exit
 }
 fn perm_redirect { http_redirect $1 '301 Moved Permanantly' }
-fn post_redirect { http_redirect $1 '303 See Other' }
-
-
-# Note: should check if content type is application/x-www-form-urlencoded?
-# Should compare with http://www.shelldorado.com/scripts/cmds/urlgetopt.txt
-fn load_post_args {
-    if(~ $REQUEST_METHOD POST && ~ $#post_args 0) {
-        ifs='&
-'       for(pair in `{cat}) {
-            ifs='=' { pair=`{echo -n $pair} }
-            n='post_arg_'^`{echo $pair(1)|tr -cd 'a-zA-Z0-9_'}
-            post_args=( $post_args $n )
-            ifs=() { $n=`{echo -n $pair(2)|urldecode|tr -d ''} }
-        }
-        pair=()
-    }
-    if not
-        status='No POST or post args already loaded'
-}
-# Status is () if at least one arg is found. DEPRECATED: access vars directly.
-fn get_post_args {
-    load_post_args
-    _status='No post arg matches'
-    for(n in $*) {
-        v=post_arg_$n
-        if(! ~ $#$v 0) {
-            $n=$$v
-            _status=()
-        }
-    }
-    status=$_status
-}
 
 # This seems slightly improve performance, but might depend on httpd buffering behavior.
 fn awk_buffer {
@@ -64,97 +29,7 @@ fn awk_buffer {
     END { printf "%s", buf }'
 }
 
-fn urldecode {
-awk '
-BEGIN {
-    hextab ["0"] = 0; hextab ["8"] = 8;
-    hextab ["1"] = 1; hextab ["9"] = 9;
-    hextab ["2"] = 2; hextab ["A"] = hextab ["a"] = 10
-    hextab ["3"] = 3; hextab ["B"] = hextab ["b"] = 11;
-    hextab ["4"] = 4; hextab ["C"] = hextab ["c"] = 12;
-    hextab ["5"] = 5; hextab ["D"] = hextab ["d"] = 13;
-    hextab ["6"] = 6; hextab ["E"] = hextab ["e"] = 14;
-    hextab ["7"] = 7; hextab ["F"] = hextab ["f"] = 15;
-}
-{
-    decoded = ""
-    i = 1
-    len = length ($0)
-    while ( i <= len ) {
-        c = substr ($0, i, 1)
-        if ( c == "%" ) {
-            if ( i+2 <= len ) {
-                c1 = substr ($0, i+1, 1)
-                c2 = substr ($0, i+2, 1)
-                if ( hextab [c1] == "" || hextab [c2] == "" ) {
-                    print "WARNING: invalid hex encoding: %" c1 c2 | "cat >&2"
-                } else {
-                    code = 0 + hextab [c1] * 16 + hextab [c2] + 0
-                    c = sprintf ("%c", code)
-                    i = i + 2
-                }
-            } else {
-                print "WARNING: invalid % encoding: " substr ($0, i, len - i)
-            }
-        } else if ( c == "+" ) {
-            c = " "
-        }
-        decoded = decoded c
-        ++i
-    }
-    printf "%s", decoded
-}
-'
-}
-
-fn url_encode {
-    awk '
-    BEGIN {
-    # We assume an awk implementation that is just plain dumb.
-    # We will convert an character to its ASCII value with the
-    # table ord[], and produce two-digit hexadecimal output
-    # without the printf("%02X") feature.
-
-    EOL = "%0A"     # "end of line" string (encoded)
-    split ("1 2 3 4 5 6 7 8 9 A B C D E F", hextab, " ")
-    hextab [0] = 0
-    for ( i=1; i<=255; ++i ) ord [ sprintf ("%c", i) "" ] = i + 0
-    if ("'^$"EncodeEOL^'" == "yes") EncodeEOL = 1; else EncodeEOL = 0
-    }
-    {
-    encoded = ""
-    for ( i=1; i<=length ($0); ++i ) {
-        c = substr ($0, i, 1)
-        if ( c ~ /[a-zA-Z0-9.-]/ ) {
-        encoded = encoded c     # safe character
-        } else if ( c == " " ) {
-        encoded = encoded "+"   # special handling
-        } else {
-        # unsafe character, encode it as a two-digit hex-number
-        lo = ord [c] % 16
-        hi = int (ord [c] / 16);
-        encoded = encoded "%" hextab [hi] hextab [lo]
-        }
-    }
-    if ( EncodeEOL ) {
-        printf ("%s", encoded EOL)
-    } else {
-        print encoded
-    }
-    }
-    END {
-        #if ( EncodeEOL ) print ""
-    }
-' $* 
-}
-
 # Cookies
-fn set_cookie {
-    # TODO: should check input values more carefully
-    name=$1
-    val=$2
-    extraHttpHeaders=( $extraHttpHeaders 'Set-cookie: '^$"name^'='^$"val^'; path=/;' )
-}
 fn get_cookie {
     ifs=';' { co=`{echo $HTTP_COOKIE} }
 
@@ -207,26 +82,3 @@ fn ll_addh {
 
 NEW_LINE='
 '
-
-# crop_text [max_lenght [ellipsis]] 
-# TODO: Option to crop only at word-delimiters.
-fn crop_text {
-    m=512
-    e='...'
-    if(! ~ $#1 0)
-        m=$1
-    if(! ~ $#2 0)
-        e=$2
-
-    awk -v 'max='^$"m -v 'ellipsis='$e '
-    {
-        nc += 1 + length;
-        if(nc > max) {
-            print substr($0, 1, nc - max) " " ellipsis
-            exit
-        }
-        print
-    }' 
-}
-
-
diff --git a/bin/corehandlers.rc b/bin/corehandlers.rc
@@ -12,7 +12,7 @@ fn nav_tree {
     # /./ to deal with p9p's ls failure to follow dir symlinks otherwise
     ls -F $sitedir/./$req_paths_list >[2]/dev/null \
         | { 
-            sed $dirfilter'/\/[^_.\/][^\/]*(\.(md|txt|html|1)|\/)$/!d; s!^'$sitedir'!!; '$dirclean 
+            sed $dirfilter'/\/[^_.\/][^\/]*(\.(md|1)|\/)$/!d; s!^'$sitedir'!!; '$dirclean 
             if(! ~ $#synth_paths 0) echo $synth_paths | tr ' ' $NEW_LINE 
         } | sort -u | awk -F/ ' 
     function p(x, y, s) { for(i=0; i < x-y; i+=1) print s }
@@ -44,45 +44,16 @@ fn nav_tree {
     echo '</ul>'
 }
 
-fn link_bar {
-    if(~ $1 -t) {
-        echo '<p class="sideBarTitle">'$2'</p>'
-        shift; shift
-    }
-    echo '<ul>'
-    while(! ~ $#* 0) {
-        echo '<li><a href="'$2'">- '$1'</a></li>'
-        shift; shift
-    }
-    echo '</ul>'
-}
-
 fn md_handler { $formatter $1 }
 
 fn tpl_handler { template $* }
 
-fn html_handler {
-    # body states: 0 = no <body> found, 2 = after <body>, 1 = after <body></body>, -1 = after </body>
-    awk 'gsub(".*<[Bb][Oo][Dd][Yy][^>]*>", "") > 0 {body=2}
-        gsub("</ *[Bb][Oo][Dd][Yy][^>]*>.*", "") > 0 {print; body=body-1}
-        body==2 {print}
-        body==0 {buf=buf "\n" $0}
-        END {if(body<=0) {print buf}}' < $1
-}
-
 fn man_handler {
     echo '<pre>'
     $man_formatter $1
     echo '</pre>'
 }
 
-fn txt_handler {
-    # Note: Words are not broken, even if they are way beyond 82 chars long
-    echo '<pre>'
-    sed 's/</\</g; s/>/\>/g' < $1 | fmt -l 82 -j
-    echo '</pre>'
-}
-
 fn dir_listing_handler {
     d=`{basename -d $1}
     if(~ $#d 0)
@@ -93,14 +64,7 @@ fn dir_listing_handler {
     echo '</ul>'
 }
 
-fn notices_handler {
-    for(type in notify_errors notify_notes notify_success)
-        for(n in $$type)
-            echo '<div class="'$type'"><b>'$"n'</b></div>'
-}
-
 fn setup_handlers {
-
     if(test -f $local_path.md) {
         local_file=$local_path.md
         handler_body_main=(md_handler $local_file)
@@ -113,26 +77,13 @@ fn setup_handlers {
         local_file=$local_path.tpl
         handler_body_main=(tpl_handler $local_file)
     }
-    if not if(test -f $local_path.html) {
-        local_file=$local_path.html
-        handler_body_main=(html_handler $local_file)
-    }
-    # Global tpl (eg sitemap.tpl), should take precedence over txt handler!
     if not if(test -f tpl^$req_path^.tpl)
-        # XXX Should we set $local_file for global .tpls?
         handler_body_main=(tpl_handler tpl^$req_path^.tpl)
-    if not if(test -f $local_path.txt) {
-        local_file=$local_path.txt
-        handler_body_main=(txt_handler $local_file)
-    }
     if(! ~ $#handler_body_main 0)
         { } # We are done
     # Dir listing
     if not if(~ $local_path */index)
         handler_body_main=(dir_listing_handler $req_path)
-    # Canonize explicit .html urls, the web server might handle this first!
-    if not if(~ $local_path *.html && test -f $local_path)
-        perm_redirect `{ echo $req_path|sed 's/.html$//' }
     # Fallback static file handler
     if not if(test -f $local_path)
         static_file $local_path
@@ -153,4 +104,3 @@ fn setup_404_handler {
 fn run_handlers { for(h in $*) run_handler $$h }
 fn run_handler { $*(1) $*(2-) }
 
-
diff --git a/bin/werc.rc b/bin/werc.rc
@@ -11,8 +11,8 @@ difs=$ifs # Used to restore default ifs when needed
 
 # Expected input: ls -F style, $sitedir/path/to/files/
 #          <ls -F+x><symlink hack><Useless?><hiden files  >
-dirfilter='s/\*$//; s,/+\./+,/,g; s,^\./,,; /\/[._][^\/]/d; /'$forbidden_uri_chars'/d; /\/sitemap\.xml$/d; /\/index\.(md|html|txt|tpl)$/d; /\/(robots|sitemap)\.txt$/d; /_werc\/?$/d; '
-dirclean=' s/\.(md|html|txt|1)$//; '
+dirfilter='s/\*$//; s,/+\./+,/,g; s,^\./,,; /\/[._][^\/]/d; /'$forbidden_uri_chars'/d; /\/sitemap\.xml$/d; /\/index\.(md|tpl)$/d; /\/(robots|sitemap)\.txt$/d; /_werc\/?$/d; '
+dirclean=' s/\.(md|1)$//; '
 
 # Careful, the proper p9p path might not be set until initrc.local is sourced
 path=(. $PLAN9/bin ./bin /bin /usr/bin) 
@@ -45,12 +45,6 @@ fn werc_exec_request {
     local_file=''
     ifs='/' { args=`{echo -n $req_path} }
 
-    # Preload post args for templates where cgi's stdin is not accessible
-    if(~ $REQUEST_METHOD POST) {
-        load_post_args
-        login_user
-    }
-
     if(~ $req_path */index)
         perm_redirect `{echo $req_path | sed 's,/index$,/,'}
 
diff --git a/bin/werc_errlog_wrap.rc b/bin/werc_errlog_wrap.rc
@@ -1,5 +0,0 @@
-#!/usr/local/plan9/bin/rc
-
-# This is a wrapper script for broken http servers like recent lighttpd versions which throw away cgi's stderr.
-
-./werc.rc >>[2]/tmp/wlog.txt
diff --git a/bin/wercconf.rc b/bin/wercconf.rc
@@ -5,15 +5,3 @@ fn conf_perm_redirect {
     if not
         ll_addh perm_redir_patterns $1 $2
 }
-
-fn conf_hide_paths {
-    for(i in $*)
-       dirfilter=$dirfilter^'/'^`{echo $sitedir$conf_wd$i|sed 's!/+!\\/!g'}^'/d; '
-}
-
-# Usually will be called from within conf_enable_foo 
-fn conf_enable_app {
-    # Note: maybe we should add test -d apps/$1/?
-    if(! ~ $1 $enabled_apps)
-	enabled_apps=( $enabled_apps $1 )
-}
diff --git a/bin/werclib.rc b/bin/werclib.rc
@@ -7,136 +7,16 @@ fn get_tpl_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 
-fn login_user {
-    # Note: we set the cookie even if it is already there.
-    if(get_user $*)
-        set_cookie werc_user $"logged_user^':0:'^$"logged_password
-}
-
-# Check login status, if called with group arg we check membership too
-fn check_user {
-    get_user
-    g=($* admin)
-    _status=$status
-    if(! ~ $"_status '')
-        _status=(Not logged in: $"_status)
-    if not if(! ~ $#* 0 && ! ~ $logged_user $* && ! grep -s '^'^$logged_user^'$' $werc_root/etc/users/$g/members >[2]/dev/null)
-        _status=(User $logged_user not in: $*)
-    status=$_status
-}
-
-# If not logged in, try to get user login info from POST or from cookie
-fn get_user {
-    if(~ $#logged_user 0) {
-        if(~ $#* 2) {
-            user_name=$1 
-            user_password=$2
-        }
-        if not if(~ $REQUEST_METHOD POST)
-            get_post_args user_name user_password
-
-        if(~ $#user_name 0) { 
-            ifs=':' { cu=`{ifs=$difs {get_cookie werc_user} | tr -d $NEW_LINE} }
-            if(! ~ $#cu 0) {
-                user_name=$cu(1) 
-                user_password=$cu(3)
-            }
-        }
-        auth_user $user_name $user_password
-    }
-    if not
-        status=()
-}
-
-# Check if user_name and user_password represent a valid user account
-# If valid, 'log in' by setting logged_user
-fn auth_user {
-    user_name=$1
-    user_password=$2
-
-    pfile=$werc_root/etc/users/$"user_name/password
-    if(~ $#user_name 0 || ~ $#user_password 0)
-        status=('Auth: missing user name or pass: '^$"user_name^' / '^$"user_password)
-    if not if(! test -f $pfile)
-        status=('Auth: cant find '^$pfile)
-    if not if(! test -s $pfile || ! ~ $user_password `{cat $pfile})
-        status=('Auth: Pass '$user_password' doesnt match '^`{cat $pfile})
-    if not {
-        logged_user=$user_name
-        logged_password=$user_password
-        dprint Auth: success
-        status=()
-    }
-}
-
-fn user_controls {
-    echo User: $"logged_user
-}
-
-
-# .md '(meta-)data' extract
-fn get_md_file_attr {
-    sed -n '/^\* '$2': /p; /^\* '$2': /q; /^$/q' < $1
-}
-
-
 # File title extraction
 fn get_md_title {
-    #sed 's/^(................................................................[^ ]*).*$/\1/g; 1q' < $1 
     sed -n -e '1N; /^.*\n===*$/N; /.*\n===*\n *$/!b' -e 's/\n==*\n//p' < $1
 }
 
-fn get_html_title {
-    t=`{sed -n '32q; s/^.*<[Tt][Ii][Tt][Ll][Ee]> *([^<]+) *(<\/[Tt][Ii][Tt][Ll][Ee]>.*)?$/\1/p' < $1}
-
-    # As a backup we might want to pick the first 'non-tag' text in the file with:
-    if(~ $"t '')
-        t=`{sed -n -e 's/^[ 	]*(<[^>]+>)*([^<]+).*/\2/p; 32q' < $1 | sed 1q}
-
-    echo $t
-}
-
 fn get_file_title {
     if (~ $1 *.md)
         get_md_title $1
-    if not if(~ $1 *.html)
-        get_html_title $1
     if not if(~ $1 */) {
         if(test -f $1/index.md)
             get_md_title $1/index.md
-        if not if(test -f $1/index.html)
-            get_html_title $1/index.html
     }
 }
-
-
-##########################################################################
-##########################################################################
-#app_blog_methods = ( _post index.rss )
-#fn app_blog__post {
-#    echo
-#}
-#
-#app_blog___default {
-#    if (~ $blog)
-#    call_app blogpost
-#}
-#
-## --
-#app_blogpost_methods = ( comment  _edit )
-#
-#fn app_blogpost_comment {
-#    call_app comments
-#}
-#
-## --
-#app_comments_methods = ( _post _edit )
-#
-#fn app_comments___default {
-#
-#}
diff --git a/etc/initrc b/etc/initrc
@@ -1,35 +1,14 @@
-# This file contains the default werc settings.
-#
-# DO NOT EDIT, to customize copy to etc/initrc.local and edit at will.
-#
-# Some settings can also be set for a specific site or directory in their
-# respective _werc/config or their $masterSite/_werc/config file.
-
 # General options
 
-# Location of your Plan 9 from User Space installation (usually /usr/local/plan9)
 plan9port=$PLAN9
 #plan9port=/usr/local/plan9
 
-# If you use 9base, it should point to your 9base root, try for example:
-#plan9port=/usr/lib/9base # This is the default 9base install path in Debian.
-
-# If rc is not installed as /usr/local/plan9/bin/rc you will also need to change
-# the #! line in bin/werc.rc!
-
 # Path, make sure the plan9port /bin directory is included before /bin
 # Keep '.' in path! It is needed.
 path=($plan9port/bin . ./bin ./bin/contrib /bin /usr/bin)
 
-# Set this to your favorite markdown formatter, eg., markdown.pl (fltr_cache
-# takes as an argument a filter, in the default configuration markdown.pl, that
-# caches output) Note that some werc components assume a markdown-like
-# formatter, but all major functionality should should be formatter agnostic.
-formatter=(fltr_cache markdown.pl)
+formatter=(fltr_cache markdown)
 man_formatter=(troff -N -man)
+debug=()
 
-# Enable debugging, to disable set to ()
-debug=true
-
-# Globally enabled apps
-enabled_apps=( )
+sitesdir='/var/www/sites'
diff --git a/etc/initrc.local b/etc/initrc.local
@@ -1,4 +0,0 @@
-sitesdir='/var/www/sites'
-formatter=(fltr_cache markdown)
-man_formatter=(troff -N -man)
-debug=()
diff --git a/tpl/_debug.tpl b/tpl/_debug.tpl
@@ -1,29 +0,0 @@
-% if(! ~ $#debug_shell 0) {
-<form method="POST" name="prompt">
-<input size="80" type="text" name="command" value="%($"post_arg_command%)">
-<input type="submit" Value="Run">
-</form>
-<script language="javascript"><!--
-document.prompt.command.focus()
-//--></script>
-
-%{
-fn evl {
-    # Buffering is probably messing this up:
-    #rc -c 'flag x +;{'^$post_arg_command'} |[2] awk ''{print ">> "$0}'''
-    rc -c 'flag s +; flag x +;'^$post_arg_command
-}
-    if(! ~ $#post_arg_command 0 && ! ~ $#post_arg_command '') {
-        echo '<hr><pre>'
-        evl | escape_html |[2] awk '{print "<b>"$0"</b>"}' 
-        echo '</pre>'
-    }
-%}
-% }
-
-<hr><pre>
-% env | escape_html
-</pre><hr>
-
-% umask
-
diff --git a/tpl/sitemap.tpl b/tpl/sitemap.tpl
@@ -55,9 +55,6 @@ if(test -s $tmpfilex) {
         cat $tmpfilex
         rm $tmpfilex &
         echo '</urlset>'
-        # TODO Enable automaic search engine update notification.
-        #hget 'http://google.com/ping?sitemap='^`{url_encode $base_url'/sitemap.gz'} > /dev/null
-    
     } | gzip > $sitedir/sitemap.gz &
     #} > $sitedir/sitemap.xml &
 }