]> Pileus Git - vpaste/blobdiff - index.cgi
Add blacklist and more spam checking
[vpaste] / index.cgi
index da4cb5cc43c658a32573d06b1f7cd09d46bb9686..4b587dc4541966806409feb004e5eecd2da9f297 100755 (executable)
--- a/index.cgi
+++ b/index.cgi
@@ -47,7 +47,13 @@ function cut_file {
 # Print out a generic header
 function header {
        echo "Content-Type: $1; charset=UTF-8"
-       echo
+       if [[ "$HTTP_ACCEPT_ENCODING" == *'gzip'* ]]; then
+               echo "Content-Encoding: gzip"
+               echo
+               exec 1> >(gzip)
+       else
+               echo
+       fi
 }
 
 # Print plain message and exit
@@ -64,17 +70,31 @@ function message {
 function do_cmd {
        header text/plain
        case "$1" in
-       head)
-               for i in $(ls -t db/*); do
-                       basename $i
-                       basename $i | sed 's/./-/g'
-                       sed '1,/^$/d; /^\s*$/d' $i | sed -n '1,5s/\(.\{0,60\}\).*/\1/p'
-                       echo
-               done
-               ;;
        ls)
                ls -t db | column
                ;;
+       head)
+               awk -v 'rows=4' -v 'cols=60' '
+                       FNR==1      { gsub(/.*\//, "", FILENAME);
+                                     print FILENAME
+                                     print "-----" }
+                       FNR==1,/^$/ { next }
+                       /\S/        { i++; printf "%."cols"s\n", $0 }
+                       i>=rows     { nextfile  }
+                       ENDFILE     { i=0; print ""  }
+               ' $(ls -t db/*)
+               ;;
+       stat)
+               ls -l --time-style='+%Y %m' db |
+               awk -v 'hdr=Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec' '
+                       BEGIN { printf "%64s\n", hdr }
+                       NR>1  { cnt[$6+0][$7+0]++ }
+                       END   { for (y in cnt) {
+                                 printf "%4d", y
+                                 for (m=1; m<=12; m++)
+                                   printf "%5s", cnt[y][m]
+                                 printf "\n" } }'
+               ;;
        esac
 }
 
@@ -133,7 +153,9 @@ function do_upload {
        body=$(cat -)
        spam=$(echo -n "$body" | cut_file "ignoreme")
        text=$(echo -n "$body" | cut_file "(text|x)")
+       bans=$(echo -n "$REMOTE_ADDR" | grep -f blacklist)
        [ ! -z "$spam" ] && message "Spam check.."
+       [ ! -z "$bans" ] && message "You have been banned"
        [   -z "$text" ] && message "No text pasted"
 
        # Format and save message
@@ -142,6 +164,7 @@ function do_upload {
                vim: $(get_modeline)
                Date: $(date -R)
                From: $REMOTE_ADDR
+               User-Agent: $HTTP_USER_AGENT
 
                $text
        EOF
@@ -163,6 +186,7 @@ function do_help {
        uploads=$(ls -t db | head -n 5)
        filetype=$(get_param '^(ft|filet(y(pe?)?)?)$')
        vpaste='<a href="vpaste?ft=sh">vpaste</a>'
+       repo='https://lug.rose-hulman.edu/svn/misc/trunk/htdocs/vpaste/'
 
        header text/html
        cat <<-EOF
@@ -180,6 +204,7 @@ function do_help {
                                             padding: 0; }
                                body       { margin: 4em 8em 4em 8em;
                                             font-family: sans-serif; }
+                               input      { padding: 2px 6px 3px 6px; }
                                /* Items */
                                textarea   { width: 100%;
                                             margin-bottom: 0.5em; }
@@ -289,20 +314,25 @@ function do_help {
                        <div class="box" id="devel">
                                <h1>License</h1>
                                <p>Copyright © 2009-2012
-                                  Andy spencer &lt;andy753421@gmail.com&gt;</p>
-                               <p>See individual files for license</p>
+                                  Andy Spencer &lt;andy753421@gmail.com&gt;</p>
+                               <p>See individual files for licenses</p>
 
                                <h1>Source code</h1>
-                               <ul>
-                                       <li><a href="vpaste?ft=sh">vpaste</a></li>
-                                       <li><a href="index.cgi?ft=sh">index.cgi</a>
+                               <dl>
+                                       <dt>Client</dt>
+                                       <dd><a href="vpaste?ft=sh">vpaste</a></dd>
+                                       <dt>Server</dt>
+                                       <dd><a href="index.cgi?ft=sh">index.cgi</a>
                                            <a href="vimrc?ft=vim">vimrc</a>
                                            <a href="htaccess?ft=apache">htaccess</a>
                                            <a href="robots.txt?ft=robots">robots.txt</a>
-                                           <a href="sitemap.xml?ft=xml">sitemap.xml</a></li>
-                                       <li><a href="2html.patch?ft=diff">2html.patch</a></li>
-                                       <li><a href="https://lug.rose-hulman.edu/svn/misc/trunk/htdocs/vpaste/">Subversion</a></li>
-                               </ul>
+                                           <a href="sitemap.xml?ft=xml">sitemap.xml</a>
+                                           <a href="blacklist?raw">blacklist</a></dd>
+                                       <dt>Patches</dt>
+                                       <dd><a href="2html.patch?ft=diff">2html.patch</a></dd>
+                                       <dt>Subversion</dt>
+                                       <dd><a href="$repo">$repo</a></dd>
+                               </dl>
 
                                <h1>Bugs</h1>
                                <ul>
@@ -323,6 +353,7 @@ function do_help {
                                </ul>
                                <p><a href="ls">list all</a></p>
                                <p><a href="head">sample all</a></p>
+                               <p><a href="stat">statistics</a></p>
                        </div>
                </body>
        </html>
@@ -339,6 +370,8 @@ if [ "$pathinfo" = ls ]; then
        do_cmd ls
 elif [ "$pathinfo" = head ]; then
        do_cmd head
+elif [ "$pathinfo" = stat ]; then
+       do_cmd stat
 elif [ "$pathinfo" ]; then
        do_print "$pathinfo"
 elif [ "$CONTENT_TYPE" ]; then