diff options
Diffstat (limited to 'src/editor/simple/upload.cgi')
| -rw-r--r-- | src/editor/simple/upload.cgi | 108 |
1 files changed, 82 insertions, 26 deletions
diff --git a/src/editor/simple/upload.cgi b/src/editor/simple/upload.cgi index 9ef113ebf..ec6bdc476 100644 --- a/src/editor/simple/upload.cgi +++ b/src/editor/simple/upload.cgi @@ -12,7 +12,7 @@ style_url="editor.css" tmp="$documentRoot/tmp" make_dir() { - dir="$(mktemp -d "$tmp/gfse.XXXXXXXX")" + dir="$(mktemp -d "$tmp/gfse.XXXXXXXXXX")" # chmod a+rxw "$dir" chmod a+rx "$dir" cp "grammars.cgi" "$dir" @@ -25,30 +25,58 @@ check_grammar() { chgrp everyone "$dir" chmod g+ws "$dir" umask 002 - files=$(Reg from-url | LC_CTYPE=sv_SE.ISO8859-1 ./save "$dir") - cd $dir - begin pre - if gf -s -make $files 2>&1 ; then - end - h3 OK - begin dl - [ -z "$minibar_url" ] || { dt; echo "▸"; link "$minibar_url?/tmp/${dir##*/}/" "Minibar"; } - [ -z "$transquiz_url" ] || { dt; echo "▸"; link "$transquiz_url?/tmp/${dir##*/}/" "Translation Quiz"; } - [ -z "$gfshell_url" ] || { dt; echo "▸"; link "$gfshell_url?dir=${dir##*/}" "GF Shell"; } - dt ; echo "◂"; link "javascript:history.back()" "Back to Editor" + files=( $(Reg from-url | LC_CTYPE=sv_SE.ISO8859-1 ./save "$dir") ) + gffiles=( ) + otherfiles=( ) + for f in ${files[*]} ; do + case "$f" in + *.gf) gffiles=( ${gffiles[*]} "$f" ) ;; + *) otherfiles=( ${otherfiles[*]} "$f" ) ;; + esac + done + + if [ ${#otherfiles} -gt 0 -a -n "$PATH_INFO" ] ; then + echo "Use the following link for shared access to your grammars from multiple devices:" + begin ul + case "$SERVER_PORT" in + 80) port="" ;; + *) port=":$SERVER_PORT" + esac + parent="http://$SERVER_NAME$port${REQUEST_URI%/upload.cgi/tmp/gfse.*}" + cloudurl="$parent/share.html#${dir##*/}" + li; link "$cloudurl" "$cloudurl" + end + begin dl + dt ; echo "◂"; link "javascript:history.back()" "Back to Editor" + end + fi - end + cd $dir + if [ ${#gffiles} -gt 0 ] ; then begin pre - ls -l *.pgf - else - end - begin h3 class=error_message; echo Error; end - for f in *.gf ; do - h4 "$f" - begin pre class=plain - cat -n "$f" + echo "gf -s -make ${gffiles[*]}" + if gf -s -make ${gffiles[*]} 2>&1 ; then end - done + h3 OK + begin dl + [ -z "$minibar_url" ] || { dt; echo "▸"; link "$minibar_url?/tmp/${dir##*/}/" "Minibar"; } + [ -z "$transquiz_url" ] || { dt; echo "▸"; link "$transquiz_url?/tmp/${dir##*/}/" "Translation Quiz"; } + [ -z "$gfshell_url" ] || { dt; echo "▸"; link "$gfshell_url?dir=${dir##*/}" "GF Shell"; } + dt ; echo "◂"; link "javascript:history.back()" "Back to Editor" + + end + begin pre + ls -l *.pgf + else + end + begin h3 class=error_message; echo Error; end + for f in ${gffiles[*]} ; do + h4 "$f" + begin pre class=plain + cat -n "$f" + end + done + fi fi hr date @@ -56,6 +84,20 @@ check_grammar() { endall } +error400() { + echo "Status: 400" + pagestart "Error" + echo "What do you want?" + endall +} + +error404() { + echo "Status: 404" + pagestart "Not found" + echo "Not found" + endall +} + if [ -z "$tmp" ] || ! [ -d "$tmp" ] ; then pagestart "Error" begin pre @@ -87,11 +129,25 @@ case "$REQUEST_METHOD" in dir) make_dir ContentType="text/plain" cgiheaders - echo "/tmp/${dir##*/}" + echo_n "/tmp/${dir##*/}" ;; - *) pagestart "Error" - echo "What do you want?" - endall + download=*) + file=$(qparse "$QUERY_STRING" download) + case "$file" in + /tmp/gfse.*/*.json) # shouldn't allow .. in path !!! + path="$documentRoot$file" + if [ -r "$path" ] ; then + ContentType="text/javascript; charset=$charset" + cgiheaders + cat "$path" + else + error404 + fi + ;; + *) error400 + esac + ;; + *) error400 esac esac fi |
