X-Git-Url: https://git.plutz.net/?a=blobdiff_plain;f=channel.sh;h=b930620ab610a93653cfe14186842f7ac98f38cb;hb=66f78a6d8a1142403c1614f20a56e66ca16ca168;hp=eab42fc6d9b07f012735c384ef050b7037cbbe6a;hpb=1cd692ed9af229a0118fb77b77bcbd889a0adcbf;p=httpchat diff --git a/channel.sh b/channel.sh index eab42fc..b930620 100755 --- a/channel.sh +++ b/channel.sh @@ -1,11 +1,5 @@ #!/bin/sh -if [ "$(COOKIE nick)" ]; then - nickname="?$(COOKIE nick)" -else - nickname='?Guest' -fi - if [ -f "$chatfile" ]; then read -r channelkey x <"$chatfile" channelkey="$( printf '%s-%s' "$channelkey" "$SESSION_ID" |sha256sum)" @@ -13,58 +7,57 @@ fi case $(POST action) in create) - if [ ! -f "$chatfile" ]; then + if mkdir "${_DATA}/${LOCATION}"; then { randomid; printf ' '; STRING "$nickname"; echo; } >"$chatfile" fi REDIRECT "$(URL "/$LOCATION")" ;; submit) - if [ -f "$chatfile" -a "$channelkey" = "$(POST channelkey)" ]; then + read lasttime x <<-EOFread + $(tail -n 50 "$chatfile" |grep -F " $(STRING "$nickname"): " |tail -n1) + EOFread + if [ "$lasttime" ]; then + lasttime="$(date -d "${lasttime%_*} ${lasttime#*_}" +%s)" + else + lasttime=0 + fi + if [ -f "$chatfile" -a "$channelkey" = "$(POST channelkey)" -a "$(POST timenonce)" -ge "$lasttime" ]; then printf "%s %s: %s\n" "$(date +%F_%T)" "$(STRING "$nickname")" "$(POST message |STRING)" >>"$chatfile" fi REDIRECT "$(URL "/$LOCATION")" ;; - nick) - SET_COOKIE +1209600 "nick=$(POST nickname |URL)" - REDIRECT "$(URL "/$LOCATION")" - ;; - *) if [ ! -f "$chatfile" ]; then - yield_page create <<-EOF - [form #nonexist method=POST action="$(URL "/$LOCATION")" - There is no channel named $(HTML "$LOCATION") - [submit "action" "create" Create] - ] +esac + +if [ ! -f "$chatfile" ]; then + yield_page create <<-EOF + [form #nonexist method="POST" + There is no channel named $(HTML "$LOCATION") + [submit "action" "create" Create] + ] EOF - else - { printf ' - [form #channel method=POST action="%s" - [submit "action" "submit" style="display: none;"] - [input type=hidden name=channelkey value="%s"] - %s [input name="message" autofocus=true][submit "action" "submit" Send!] - ] - ' "$(URL "/$LOCATION")" "$channelkey" "$(settings_menu)" - SHESCAPE='s;[]&<>#."[];\\&;g;' +else + printf '%s: %s\r\n' Refresh 1 + { printf ' + [form #channel method="POST" + [submit "action" "submit" style="display: none;"] + [hidden "session_key" "%s"][hidden "channelkey" "%s"][hidden "timenonce" "%s"] + [a .settings href="?settings#nick" Settings][input autocomplete="off" name="message" autofocus=true][submit "action" "submit" Send!] + ] + ' "$SESSION_KEY" "$channelkey" "$_DATE" + SHESCAPE='s;[]&<>#."[];\\&;g;' - printf '[div #chat' - # tail -n30 -f "$chatfile" | { - # read x - # while read -r date nick message; do - # printf '[p .message [span .date %s] [span .nick [span .indicator %s]%s:] [span .message %s]]\n' \ - # "${date#*_}" "${nick%${nick#?}}" "$(UNSTRING "${nick#?}" |HTML)" "$(UNSTRING "$message" |HTML)" - # done - # } - tail -n50 -f "$chatfile" \ - | sed -nuE ' - /^[^ ]+ [^ ]+ [^ ]+$/{ - h; s;^([^ ]+) ([^ ]+) ([^ ]+)$;\1;; s;.*_;;; s;.+;[p .message [span .date &];p; - g; s;^([^ ]+) ([^ ]+) ([^ ]+)$;a\2;; bESC; :A s;.;;; s;(.)(.+);[span .nick [span .indicator \1]\2];p; - g; s;^([^ ]+) ([^ ]+) ([^ ]+)$;b\3;; bESC; :B s;.;;; s;.+;[span .message &]];p; - } - b; :ESC - '"$UNSTRING"' '"$SHESCAPE"' - /^a/bA; /^b/bB; - ' - } |yield_page channel - fi - ;; -esac + while sleep 10; do printf '\n'; done & + printf '[div #chat' + tail --pid $$ -n50 -f "$chatfile" \ + | sed -nuE ' + /^[^ ]+ [^ ]+ [^ ]+$/{ + h; s;^([^ ]+) ([^ ]+) ([^ ]+)$;\1;; s;.*_;;; s;.+;[p .message [span .date &];p; + g; s;^([^ ]+) ([^ ]+) ([^ ]+)$;a\2;; bESC; :A s;.;;; s;(.)(.+);[span .nick [span .indicator \1]\2];p; + g; s;^([^ ]+) ([^ ]+) ([^ ]+)$;b\3;; bESC; :B s;.;;; s;.+;[span .message &]];p; + } + b; :ESC + '"$UNSTRING"' '"$SHESCAPE"' + /^a/bA; /^b/bB; + ' + } |yield_page channel +fi