From d675f5d2af2d4735c96d7bfb238a6e6646671984 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Wed, 17 Aug 2011 05:42:47 +0000 Subject: [PATCH] Use syntax highlighting by default Also some formatting updates --- index.cgi | 316 ++++++++++++++++++++++++++---------------------------- 1 file changed, 150 insertions(+), 166 deletions(-) diff --git a/index.cgi b/index.cgi index f1b8b15..d4b3b54 100755 --- a/index.cgi +++ b/index.cgi @@ -1,12 +1,12 @@ #!/bin/bash # Copyright (C) 2009-2011 Andy Spencer -# +# # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU Affero General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) any # later version. -# +# # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more @@ -14,16 +14,13 @@ # Remove url codings from stdin function get_modeline { - modeline=$( - echo "$QUERY_STRING" | - sed -e 's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g; s/[,&]/ /g' | - xargs echo -e - ) - echo "vim: $modeline" + echo "$QUERY_STRING" | + sed -e 's/%\([0-9A-F][0-9A-F]\)/\\\\\x\1/g; s/[,&]/ /g' | + xargs echo -e } # Extract an uploaded file from standard input -# $2 is the name of the input to extract +# $1 is the name of the input to extract function cut_file { bnd="${CONTENT_TYPE/*boundary\=/}" awk -v "want=$1" -v "bnd=$bnd" ' @@ -50,22 +47,32 @@ function header { echo } +# Print plain message and exit +function message { + while [ "$1" == '-h' ]; do + shift; echo $1; shift + done + header text/plain + echo "$*" + exit +} + # List previous pastes 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 - ;; -esac + 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 + ;; + esac } # Format a file for viewing @@ -76,18 +83,16 @@ function do_print { input="db/$1" trim='1,/^$/d' # sed command to remove cruft else - echo "Status: 404 Not Found" - header text/plain - echo "File '$1' not found" - return + message -h 'Status: 404 Not Found' \ + "File '$1' not found" fi - - if [[ "$REQUEST_URI" == *'?'* ]]; then + if [[ "$HTTP_ACCEPT" == *'html'* && + "$QUERY_STRING" != 'raw'* ]]; then # Create a temp file with the provided modeline output="$(mktemp)" tmp="$(mktemp)" - sed "\$a$(get_modeline)" "$input" > "$tmp" + sed "\$avim: $(get_modeline)" "$input" > "$tmp" # - I have some plugins in ~/.vim # - Run ex in screen to trick it into thinking that it @@ -121,160 +126,139 @@ function do_upload { body=$(cat -) spam=$(echo -n "$body" | cut_file "ignoreme") text=$(echo -n "$body" | cut_file "(text|x)") - if [ ! -z "$spam" ]; then - header text/plain - echo "Spam check.." - exit - fi - if [ -z "$text" ]; then - header text/plain - echo "No text pasted" - exit - fi + [ ! -z "$spam" ] && message "Spam check.." + [ -z "$text" ] && message "No text pasted" + + # Format and save message output="$(mktemp db/XXXXX)" - uri="$url$(basename "$output")${QUERY_STRING:+"?"}" + cat >"$output" <<-EOF + vim: $(get_modeline) + Date: $(date -R) + From: $REMOTE_ADDR - # Format, spam check, and save message - ( - get_modeline - echo "Date: $(date -R)" - echo "From: $REMOTE_ADDR" - echo - echo "$text" - ) | HOME=/home/vpaste spamc -E > "$output" + $text + EOF - # Test for spam - if [ "$?" -ne 0 ]; then - # Report spam - header text/plain - echo "Your post has been marked as spam!" - echo "Spam test results are as folllows.. " - echo - cat "$output" - mv "$output" spam - else - # Redirect user - echo "Status: 302 Found" - echo "Location: $uri" - header text/plain - echo "$uri" - fi + # Redirect user + uri="$SCRIPT_URI$(basename "$output")" + message -h 'Status: 302 Found' \ + -h "Location: $uri" \ + "$uri" } # Default index page function do_help { -filetypes=$( - ls /usr/share/vim/vim*/syntax/ /home/andy/.vim/syntax/ | - sed -n '/^\(syntax\|manual\|synload\|2html\|colortest\|hitest\).vim$/d; s/.vim$//p' | - sort | uniq -) -uploads=$(ls -t db | head -n 5) + filetypes=$( + ls /usr/share/vim/vim*/syntax/ /home/andy/.vim/syntax/ | + sed -n '/^\(syntax\|manual\|synload\|2html\|colortest\|hitest\).vim$/d; s/.vim$//p' | + sort | uniq + ) + uploads=$(ls -t db | head -n 5) -header text/html -cat - < - - - vpaste.net - Vim based pastebin - - - - - - -
-
- - - - -
-
+ header text/html + cat <<-EOF + + + + vpaste.net - Vim based pastebin + + + + + + +
+
+ + + + +
+
-

NAME

-

vpaste: Vim based pastebin

+

NAME

+

vpaste: Vim based pastebin

-

SYNOPSIS

-
-
 vpaste file [option=value,..]
-
 <command> | vpaste [option=value,..]
-
-
 <command> | curl -F 'text=<-' $url[?option=value,..]
-
-
 :map vp :exec "w !vpaste ft=".&ft<CR>
-
 :vmap vp <ESC>:exec "'<,'>w !vpaste ft=".&ft<CR>
-
+

SYNOPSIS

+
+
 vpaste file [option=value,..]
+
 <command> | vpaste [option=value,..]
+
+
 <command> | curl -F 'text=<-' $SCRIPT_URI[?option=value,..]
+
+
 :map vp :exec "w !vpaste ft=".&ft<CR>
+
 :vmap vp <ESC>:exec "'<,'>w !vpaste ft=".&ft<CR>
+
-

DESCRIPTION

-

Add ?[option[=value],..] to make your text a rainbow.

-

Options specified when uploading are used as defaults.

+

DESCRIPTION

+

Add ?[option[=value],..] to make your text a rainbow.

+

Options specified when uploading are used as defaults.

-

OPTIONS

-
-
ft, filetype={filetype}
-
A filetype to use for highlighting, see above menu for supported types
-
bg, background={light|dark}
-
Background color to use for the page
-
et, expandtab
-
Expand tabs to spaces
-
ts, tabstop=[N]
-
Number of spaces to use for tabs when et is set
-
...
-
See :help modeline for more information
-
+

OPTIONS

+
+
ft, filetype={filetype}
+
A filetype to use for highlighting, see above menu for supported types
+
bg, background={light|dark}
+
Background color to use for the page
+
et, expandtab
+
Expand tabs to spaces
+
ts, tabstop=[N]
+
Number of spaces to use for tabs when et is set
+
...
+
See :help modeline for more information
+
-

BUGS

- +

BUGS

+ -

SOURCE

- +

SOURCE

+ -

LATEST UPLOADS

- -

list all

-

sample all

- - -EOF +

LATEST UPLOADS

+ +

list all

+

sample all

+ + + EOF } # Main -url="http://$HTTP_HOST${REQUEST_URI/\?*}" pathinfo="${REQUEST_URI/*\/}" pathinfo="${pathinfo/\?*}" -- 2.43.2