diff options
Diffstat (limited to 'tears.cgi')
-rwxr-xr-x | tears.cgi | 150 |
1 files changed, 97 insertions, 53 deletions
@@ -3,10 +3,8 @@ <% VERSION=0.4 -BASE="/tears" -HOST="zanthia.radionova.no" -path=$(pdecode <<<"${PATH_INFO#/}") +path=$(/opt/bin/pdecode <<<"${PATH_INFO#/}") error() { echo -e "Content-Type: text/plain; charset=utf-8\n" @@ -15,7 +13,8 @@ error() { } irc() { - /opt/bin/birk -c radionova "$1" + echo >/dev/null + #/opt/bin/birk -c radionova "$1" } byline() { @@ -23,7 +22,7 @@ byline() { } info() { - stat -c '%n: %U %G %a %Y' $1 + stat -c '%n: %U %G %A %Y' $1 } link() { @@ -31,7 +30,9 @@ link() { local clean="/${raw%/}" local rawt="$BASE/$2" local cleant="/${rawt%/}" - [ $cleant = $clean ] && echo "$1" || echo "<a href='$BASE/$2'>$1</a>" + local target="" + [ -n "$3" ] && target=" target='$3'" + [ $cleant = $clean ] && echo "$1" || echo "<a$target href='$BASE/$2'>$1</a>" } qlink() { @@ -40,9 +41,11 @@ qlink() { } redirect() { - echo -e "Content-Type: text/html; charset=utf-8" - echo -e "Location: https://$HOST$1\n" + echo -ne "Location: $SCHEME$HOST$1\r\n" + echo -ne "Status: 302\r\n" + echo -ne "Content-Type: text/html; charset=utf-8\r\n\r\n" echo "٩(͡๏̯͡๏)۶>" + exit } stikkordsøk() { @@ -63,33 +66,33 @@ kalender() { if [ -z "$y" ]; then for directory in $(cut -d / -f $((n + 2)) | sort | uniq); do year=$(basename $directory) - qlink "$year" "$action/$path" "dato=$year" "stikkord=$GET_stikkord" + qlink "$year" "$action/$args" "dato=$year" "stikkord=$GET_stikkord" done elif [ -z "$m" ]; then echo "<b>" - qlink "$y" "$action/$path" "stikkord=$GET_stikkord" + qlink "$y" "$action/$args" "stikkord=$GET_stikkord" echo "</b><br>" for directory in $(cut -d / -f $((n + 3)) | sort | uniq); do month=$(basename $directory) - qlink "$month" "$action/$path" "dato=$y-$month" "stikkord=$GET_stikkord" + qlink "$month" "$action/$args" "dato=$y-$month" "stikkord=$GET_stikkord" done elif [ -z "$d" ]; then echo "<b>" - qlink "$y" "$action/$path" "stikkord=$GET_stikkord" + qlink "$y" "$action/$args" "stikkord=$GET_stikkord" echo "/" - qlink "$m" "$action/$path" "dato=$y" "stikkord=$GET_stikkord" + qlink "$m" "$action/$args" "dato=$y" "stikkord=$GET_stikkord" echo "</b><br>" for directory in $(cut -d / -f $((n + 4)) | sort | uniq); do day=$(basename $directory) - qlink "$day" "$action/$path" "dato=$y-$m-$day" "stikkord=$GET_stikkord" + qlink "$day" "$action/$args" "dato=$y-$m-$day" "stikkord=$GET_stikkord" done else echo "<b>" - qlink "$y" "$action/$path" "stikkord=$GET_stikkord" + qlink "$y" "$action/$args" "stikkord=$GET_stikkord" echo "/" - qlink "$m" "$action/$path" "dato=$y" "stikkord=$GET_stikkord" + qlink "$m" "$action/$args" "dato=$y" "stikkord=$GET_stikkord" echo "/" - qlink "$d" "$action/$path" "dato=$y-$m" "stikkord=$GET_stikkord" + qlink "$d" "$action/$args" "dato=$y-$m" "stikkord=$GET_stikkord" echo "</b><br>" fi } @@ -99,6 +102,8 @@ meny() { echo "<!doctype html>" echo "<title>tears</title>" echo "<link href=$BASE/tears.css rel=stylesheet>" + echo "<script src=$BASE/date.js></script>" + echo "<script src=$BASE/sortable.js></script>" echo "<script src=$BASE/tears.js></script>" echo "<div id='meny'>" link "<pre>$(figlet -f threepoint tears)</pre>" "" @@ -119,14 +124,21 @@ meny() { 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" + finder="$finder -printf %h\t%TT\t%f\n" + ok=1 + $finder | sort -r | head -$n | tail -7 | while read path; do + # while read path; do + d=$(cut -f 1 <<<"$path") + f=$(cut -f 3 <<<"$path") + ok=1 + [ "$f" ] && kort "$d/$f" + done # <<< $(eval $finder | sort -r | head -$n | tail -7) + if [ -z "$ok" ]; then + echo "<p><b>Ingen artikler</b>" + else + echo "<hr><p>" + qlink "eldre artikler…" "$action/$args" "dato=$GET_dato" "n=$n" + fi } stikkord() { @@ -143,7 +155,8 @@ stikk() { find -L stikkord -samefile "$1" -delete for ord in $2; do local path="stikkord/$ord/${1#artikler/}" - mkdir -p "$(dirname $path)" + umask 000 + mkdir -p -m 777 "$(dirname $path)" ln -s "../../../../../$1" "$path" done } @@ -151,29 +164,40 @@ stikk() { 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 "<form id=update-article method=post action='$BASE/oppdater/$1'>" + lupin -f $1 echo "<p><label>Stikkord:</label>" echo "<input type='text' name='stikkord' value='$(stikkord $1)'>" - echo "<p><input type='submit' value='Lagre'>" + echo "<p>" + echo "<input type='submit' value='Lagre'>" + echo "<input name=delete type='submit' value='Slett'>" + echo "<input name=publish type='submit' value='Publiser'>" + [ -r "$1" ] && link "Vis" $(/opt/bin/pencode / <<<"vis/$1") preview echo "</form>" - echo "<p><b>$(info $1)</b>" + #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 + echo "<article>" + lupin $1 | /opt/bin/embed + echo "</article>" } lagre() { - path=$(date +%Y/%m/%d -d $POST_publisert) + path=$(tr '-' '/' <<< $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" + umask 0000 + mkdir -p "artikler/$path" + lupin -p -e - >"artikler/$path/$slug.txt" + if [ -z "$POST_privat" ]; then + chmod 660 "artikler/$path/$slug.txt" + else + chmod 640 "artikler/$path/$slug.txt" + fi chgrp $POST_gruppe "artikler/$path/$slug.txt" irc "$(whoami) skriver ny artikkel: $POST_title" redirect "$BASE/rediger/artikler/$path/$slug.txt" @@ -182,34 +206,48 @@ lagre() { oppdater() { [ ! -f "$1" ] && error "finner ikke $1" [ ! -w "$1" ] && error "ikke skrivetilgang til $1" + + if [[ -n "$POST_delete" ]]; then + rm "$1" + redirect "$BASE" + fi + [ -z "$POST_title" ] && error "ingen overskrift" [ -z "$POST_stikkord" ] && error "ingen stikkord" + stikk "$1" "$POST_stikkord" - lupin -l -e >$1 + lupin -p -e - >$1 irc "$(whoami) redigerte $POST_title" - redirect "$BASE/rediger/$path" + [ -n "$POST_publish" ] && chmod o+r "$1" + pushd /home/bie/maker >/dev/null; ./maker; popd >/dev/null + redirect "$BASE/rediger/$1" } kort() { IFS=/. read -r type y m d hhmm slug ext <<< "$1" - lupin -t -h <$1 + lupin -t $1 echo "<p class='x'>$(byline $1), $y/$m/$d" - [ -r "$1" ] && echo "·" && link "vis" $(pencode / <<<"vis/$1") - [ -w "$1" ] && echo "·" && link "rediger" $(pencode / <<<"rediger/$1") - lupin -s -h <$1 + [ -r "$1" ] && echo "·" && link "vis" $(/opt/bin/pencode / <<<"vis/$1") + [ -w "$1" ] && echo "·" && link "rediger" $(/opt/bin/pencode / <<<"rediger/$1") + lupin -s $1 +} + +velkommen() { + echo "<blockquote><p>I've seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhäuser Gate. All those moments will be lost in time, like tears in rain.<p>Time to die.</blockquote>" } forbered() { - echo "<form method=post action='$BASE/lagre/$path'>" + echo "<h2>skriv en artikkel…</h2>" + echo "<form method=post action='$BASE/lagre'>" 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 + for type in blueprints/*.lua; do id=$(basename $type .lua) - echo "<option value='$id'>$(sed 's|.|\U&|' <<<$id)</option>" + echo "<option value='$id'>$id</option>" done echo "</select>" echo "for" @@ -229,26 +267,32 @@ umask 0022 groups=$(groups | tr " " "\n" | sort) available=$(comm -12 - <(ls redaksjoner | sort) <<<"$groups") -action=$(basename $SCRIPT_FILENAME) +#action=${PATH_INFO#$BASE/} +action=${PATH_INFO#/} +if [[ "$action" =~ "/" ]]; then + args=${action#*/} + action=${action%%/*} +fi if [[ "$action" == rediger && $path == stikkord/* ]]; then redirect "$BASE/rediger/artikler/${path#stikkord/*/}" fi mappe="artikler" [ -n "$GET_stikkord" ] && mappe="stikkord/$GET_stikkord" kilde="$mappe/$(sed 's|-|/|g' <<<$GET_dato)" -finder="find -L $kilde -type f" -[ "$action" = gruppe ] && finder="$finder -group $path" +finder="find -L $kilde -type f -not -name '*~'" +[ "$action" = gruppe ] && finder="$finder -group $args" [ "$action" = ditt ] && finder="$finder -user $REMOTE_USER" -[ "$REQUEST_METHOD" = GET ] && $finder | meny +[ "$REQUEST_METHOD" = GET ] && eval $finder | meny case $action in + "") velkommen;; index.html|ditt|gruppe) liste;; skriv) forbered;; - rediger) skjema $path;; - vis) vis $path;; + rediger) skjema $args;; + vis) vis $args;; lagre) lagre;; - oppdater) oppdater $path;; - teatime) irc "$(whoami) <3 teatime"; echo "<p><img src='http://kyber.io/orz/src/1352063360909860.jpg'><br>";; - spökvåningen) echo "<p><img src='http://kyber.io/orz/src/1360086359591352.jpg'>";; + oppdater) oppdater $args;; + teatime) irc "$(whoami) <3 teatime"; echo "<p><img class='teatime' src='https://kyber.io/orz/src/1352063360909860.jpg'><br>";; + spökvåningen) echo "<p><img src='https://kyber.io/orz/src/1360086359591352.jpg'>";; todo) echo "<pre>$(cat TODO)</pre>";; esac %> |