]> git.plutz.net Git - httpchat/blobdiff - channel.sh
prevent double submit of messages, use channel directories
[httpchat] / channel.sh
index 1f86e5214c061525e5e6486c9db93f03f6367c00..408899445bbedbe436bcc6469b733575d34eb8eb 100755 (executable)
@@ -7,13 +7,21 @@ 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)" -gt "$lasttime" ]; then
       printf "%s %s: %s\n" "$(date +%F_%T)" "$(STRING "$nickname")" "$(POST message |STRING)" >>"$chatfile"
     fi
     REDIRECT "$(URL "/$LOCATION")"
@@ -32,10 +40,10 @@ else
   { printf '
     [form #channel method="POST"
       [submit "action" "submit" style="display: none;"]
-      [input type=hidden name=channelkey value="%s"]
+      [input type=hidden name=channelkey value="%s"][input type=hidden name=timenonce value="%s"]
       [a .settings href="?settings#nick" Settings][input autocomplete="off" name="message" autofocus=true][submit "action" "submit" Send!]
     ]
-  ' "$channelkey"
+  ' "$channelkey" "$_DATE"
   SHESCAPE='s;[]&<>#."[];\\&;g;'
 
   while sleep 10; do printf '\n'; done &