Introduction
Introduction Statistics Contact Development Disclaimer Help
Experimental comments system - swerc - anselm's simpler werc fork
git clone git://git.suckless.org/swerc
Log
Files
Refs
README
---
commit e40d98c9be8ad122d307d955341960554e18f21f
parent dcf5ae650b95874d9b7524ece43f6c06c7e222dd
Author: [email protected] <unknown>
Date: Fri, 26 Sep 2008 14:23:19 +0200
Experimental comments system
Diffstat:
M bin/cgilib.rc | 57 ++++++++++++++++++++++++++++-…
M bin/controller.rc | 19 ++++++++++++++++---
M lib/default_master.tpl | 23 +++++++++++++++++++++++
3 files changed, 91 insertions(+), 8 deletions(-)
---
diff --git a/bin/cgilib.rc b/bin/cgilib.rc
@@ -2,6 +2,8 @@
fn dprint { echo $* >[1=2] }
+fn escape_html { sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g' $* }
+
fn perm_redirect {
echo 'Status: 301 Moved Permanantly
Location: '^$1^'
@@ -16,7 +18,7 @@ fn get_post_args {
pair = `{echo -n $pair | sed 's/=/\&/'} \
ifs=() \
if(~ $pair(1) $*)
- $pair(1) = `{urldecode $pair(2)}
+ $pair(1) = `{echo $pair(2) | urldecode | tr -d ''}
}
}
@@ -36,9 +38,54 @@ fn template { template.awk $* | rc $rcargs }
# .rec parsing
fn parse_rec {
- for(i in `{sed 's/% *//; /^$/q' < $1}) {
- v = `{echo $i | sed 's/^/rec_/; s/=.*//;'}
- $v = `{echo $i | sed
+ ifs='
+' for(i in `{sed 's/% *//g; /^$/q' < $1}) {
+ v = `{echo -n $i | sed 's/^/rec_/; s/=.*//;'}
+ $v = `{echo -n $i | sed 's/^[^=]*=//'}
}
- rec_data = `{sed -n '/^$/,$p' < $1}
+ ifs=() rec_data = `{sed -n '/^[^%]./,$p' < $1}
+}
+
+
+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
+ }
+ print decoded
+}
+'
}
diff --git a/bin/controller.rc b/bin/controller.rc
@@ -1,5 +1,5 @@
#!/usr/local/plan9/bin/rc
-. cgilib.rc
+. ./cgilib.rc
cd ..
forbidden_uri_chars='[^a-zA-Z0-9_+\-\/\.]'
@@ -175,7 +175,9 @@ fn quote_html {
}
fn debug_handler {
echo '<pre>'
- env |quote_html
+ env | quote_html
+ echo ---------------------
+ umask
echo '</pre>'
}
@@ -187,6 +189,17 @@ fn select_handler {
set_handler blog_post_handler $body.md
if not
set_handler md_handler $body.md
+
+ if (! ~ $#allowComments 0 && ~ $REQUEST_METHOD POST) {
+ get_post_args comment_user_name comment_text
+ ddir = $body.md_werc/comments/
+ umask 002
+ mkdir -m 775 -p $ddir
+ d = `{date -n} # Obvious race
+ { echo '% user_name='^$comment_user_name'
+
+'^$comment_text } > $ddir/$d.rec
+ }
}
if not if (~ $body */_debug)
set_handler debug_handler
@@ -218,7 +231,7 @@ fn select_handler {
# Rss feeds. TODO: we should check that the request is for a real blog dir
if not if (~ $REQUEST_URI */index.rss) {
uri = `{echo $uri | sed 's/index.rss$//'}
- if(~ $blogDirs 0)
+ if (~ $blogDirs 0)
blogDirs = $sitedir^$uri
uri=$baseuri$"uri
master_template=feeds/rss20.tpl
diff --git a/lib/default_master.tpl b/lib/default_master.tpl
@@ -33,6 +33,29 @@
% genbody
+% if (! ~ $#allowComments 0) {
+
+%{
+cdir = $body.md_werc/comments
+if (test -d $cdir) {
+ echo '<hr /><h2>Comments</h2>'
+ for(c in `{ls $cdir}) {
+ parse_rec $c
+
+ echo '<div>'
+ echo User: $rec_user_name '<br />'
+ echo $rec_data | escape_html | sed 's,$,<br />,'
+ echo '<hr /></div>'
+ }
+}
+%}
+
+<form action="" method="post">
+ <input type="text" name="comment_user_name" value="Anonimous glenda" /><in…
+ <textarea name="comment_text" id="comment_text" cols="80" rows="16"></text…
+</form>
+% }
+
</div>
<div id="footer">
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.