summaryrefslogtreecommitdiff
path: root/tears.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'tears.cgi')
-rwxr-xr-xtears.cgi222
1 files changed, 222 insertions, 0 deletions
diff --git a/tears.cgi b/tears.cgi
new file mode 100755
index 0000000..6698f07
--- /dev/null
+++ b/tears.cgi
@@ -0,0 +1,222 @@
+#!/usr/local/bin/haserl --shell=/bin/bash
+
+<%
+
+VERSION=0.1
+BASE="/~bie/tears"
+HOST="low.radionova.no"
+
+path=$(pdecode <<<"${PATH_INFO#/}")
+
+error() {
+ echo -e "Content-Type: text/plain; charset=utf-8\n"
+ echo "$1"
+ exit 1
+}
+
+irc() {
+ teatime -c '#radionova' "$1"
+}
+
+byline() {
+ echo # noe som fungerer både på lunix og bsd her
+}
+
+info() {
+ stat -c '%n: %U %G %a %Y' $1
+}
+
+link() {
+ [ "$BASE/$2" = $REQUEST_URI ] && echo "$1" || echo "<a href='$BASE/$2'>$1</a>"
+}
+
+qlink() {
+ text="$1" && url="$BASE/$2" && shift 2
+ IFS=\& && echo -n "<a href='$url?$*'>$text</a>"
+}
+
+redirect() {
+ echo "Content-Type: text/html"
+ echo -e "Location: https://$HOST$1\n"
+ echo "٩(͡๏̯͡๏)۶>"
+}
+
+kalender() {
+ [ "$action" = index.html -o "$action" = ditt -o "$action" = gruppe ] || return
+ echo "<p><b>for mye? reis i tid…</b>"
+ IFS=- read y m d <<<"$GET_dato"
+ if [ -z "$y" ]; then
+ for directory in $(cut -d / -f 2 | sort | uniq); do
+ year=$(basename $directory)
+ echo "<a href='?dato=$year'>$year</a>"
+ done
+ elif [ -z "$m" ]; then
+ echo "<b><a href='?'>$y</a></del></b><br>"
+ for directory in $(cut -d / -f 3 | sort | uniq); do
+ month=$(basename $directory)
+ echo "<a href='?dato=$y-$month'>$month</a>"
+ done
+ elif [ -z "$d" ]; then
+ echo "<b><a href='?'>$y</a>/<a href='?dato=$y'>$m</a></b><br>"
+ for directory in $(cut -d / -f 4 | sort | uniq); do
+ day=$(basename $directory)
+ echo "<a href='?dato=$y-$m-$day'>$day</a>"
+ done
+ else
+ echo "<b><a href='?'>$y</a>/<a href='?dato=$y'>$m</a>/<a href='?dato=$y-$m'>$d</a></b>"
+ fi
+}
+
+meny() {
+ echo -e "Content-Type: text/html; charset=utf-8\n"
+ echo "<!doctype html>"
+ echo "<title>tears</title>"
+ echo "<link href=$BASE/tears.css rel=stylesheet>"
+ echo "<script src=$BASE/tears.js></script>"
+ echo "<div id='meny'>"
+ link "<pre>$(figlet -f threepoint tears)</pre>" ""
+ echo "<p><b>hei, $(whoami) &hearts;</b><br>"
+ link 'skriv en artikkel' 'skriv'
+ echo "<p><b>du har tilgang til…</b><br>"
+ link 'dine artikler' 'ditt' && echo "<br>"
+ for group in $available; do
+ link "$group" "gruppe/$group"
+ done
+ kalender
+ echo "<p><b>kos deg! ٩(͡๏̯͡๏)۶</b>"
+ echo "<p class=footer><b>tears $VERSION</b><br>"
+ link 'todo' 'todo' && echo '|' && link 'teatime' 'teatime'
+ echo "</div>"
+}
+
+liste() {
+ n=$((${GET_n:-0} + 7))
+ $finder -printf '%h\t%TT\t%f\n' | sort -r | head -$n | tail -7 | while read
+ do
+ d=$(cut -f 1 <<<"$REPLY")
+ f=$(cut -f 3 <<<"$REPLY")
+ kort $d/$f
+ done
+ echo "<hr><p>"
+ qlink "eldre artikler…" "$action/$path" "dato=$GET_dato" "n=$n"
+}
+
+tags() {
+ find -L tags -samefile "$1" -execdir dirname {} + | while read file; do
+ echo -n "${file##*/} "
+ done
+
+ # tag "$1" "$POST_tags"
+}
+
+tag() {
+ echo "<p>"
+ for tag in $2; do
+ echo "-- sjekke om tag $tag er ok --"
+ echo "<br>"
+ echo ln -s "$1" "tags/$tag/$(tr / - <<<$1)"
+ echo "<br>"
+ done
+}
+
+skjema() {
+ [ ! -f "$1" ] && echo "<p>finner ikke $1: <pre>$(xxd <<<$1)</pre>" && exit
+ [ ! -w "$1" ] && echo "<p>du har ikke skrivetilgang" && exit
+ echo "<form method='post' action='$BASE/oppdater/$1'>"
+ lupin -f <$1
+ echo "<p><label>Magiske ord:</label>"
+ echo "<input type='text' name='tags' value='$(tags $1)'>"
+ tag "$1" "ok test haha"
+ echo "<p><input type='submit' value='Lagre'>"
+ echo "</form>"
+ echo "<p><b>$(info $1)</b>"
+}
+
+vis() {
+ [ ! -f "$1" ] && echo "<p>finner ikke $1: <pre>$(xxd <<<$1)</pre>" && exit
+ [ ! -r "$1" ] && echo "<p>du har ikke lesetilgang" && exit
+ lupin -h <$1
+}
+
+lagre() {
+ path=$(date +%Y/%m/%d -d $POST_publisert)
+ slug=$(sed -e 's|[ /]|-|g' -e 's|[?:]||g' <<<$POST_title)
+ [ -z "$slug" ] && error "Ugyldig overskrift"
+ [ -f "artikler/$path/$slug.txt" ] && error "Artikkelen finnes allerede"
+ mkdir -m 777 -p "artikler/$path"
+ [ -z "$POST_privat" ] && umask 0002
+ lupin -l -e >"artikler/$path/$slug.txt"
+ chgrp $POST_gruppe "artikler/$path/$slug.txt"
+ irc "$(whoami) skriver ny artikkel: $POST_title"
+ redirect "$BASE/rediger/artikler/$path/$slug.txt"
+}
+
+oppdater() {
+ [ ! -f "$1" ] && error "finner ikke $1"
+ [ ! -w "$1" ] && error "ikke skrivetilgang til $1"
+ [ -z "$POST_title" ] && error "ingen overskrift"
+ lupin -l -e >$1
+ irc "$(whoami) redigerte $POST_title"
+ redirect "$BASE/rediger/$path"
+}
+
+kort() {
+ IFS=/. read -r type y m d hhmm slug ext <<< "$1"
+ (
+ read -r tittel
+ echo "<h2>$tittel</h2>" "<p class='x'>$(byline $1), $y/$m/$d"
+ [ -r "$1" ] && echo "·" && link "vis" $(pencode / <<<"vis/$1")
+ [ -w "$1" ] && echo "·" && link "rediger" $(pencode / <<<"rediger/$1")
+ [ -z "$2" ] && head -1 | marxup - || marxup -
+ ) < $1
+}
+
+forbered() {
+ echo "<form method=post action='$BASE/lagre/$path'>"
+ echo "<p><label>Overskrift:</label>"
+ echo "<input type=text name=title size=24>"
+ echo "<p><label>Dato:</label>"
+ echo "<input type=date name=publisert value=$(date +%Y-%m-%d) size=10>"
+ echo "<p><label>*</label>"
+ echo "<select name='type'>"
+ for type in lupin/*; do
+ id=$(basename $type .lua)
+ echo "<option value='$id'>$(sed 's|.|\U&|' <<<$id)</option>"
+ done
+ echo "</select>"
+ echo "for"
+ echo "<select name=gruppe>"
+ for group in $available; do
+ echo "<option>$group</option>"
+ done
+ echo "</select>"
+ echo "(<input type=checkbox name=privat>privat artikkel?)"
+ echo "<p><label>*</label><input type=submit value='Forbered artikkel...'>"
+ echo "</form>"
+}
+
+[ -f tears.rc ] && . tears.rc
+
+umask 0022
+
+groups=$(groups | tr " " "\n" | sort)
+available=$(comm -12 - <(ls redaksjoner | sort) <<<"$groups")
+action=$(basename $SCRIPT_FILENAME)
+kilde="artikler/$(sed 's|-|/|g' <<<$GET_dato)"
+finder="find $kilde -type f"
+[ "$action" = gruppe ] && finder="$finder -group $path"
+[ "$action" = ditt ] && finder="$finder -user $REMOTE_USER"
+[ "$REQUEST_METHOD" = GET ] && $finder | meny
+case $action in
+ index.html|ditt|gruppe) liste;;
+ skriv) forbered;;
+ rediger) skjema $path;;
+ vis) vis $path;;
+ lagre) lagre;;
+ oppdater) oppdater $path;;
+ teatime) irc "$(whoami) <3 teatime"; echo "<p><img src='http://atei.st/src/1352063360909860.jpg'><br>";;
+ spökvåningen) echo "<p>spök";;
+ todo) echo "<pre>$(cat TODO)</pre>";;
+esac
+%>
+