summaryrefslogtreecommitdiff
path: root/src/editor/simple/upload.cgi
diff options
context:
space:
mode:
Diffstat (limited to 'src/editor/simple/upload.cgi')
-rw-r--r--src/editor/simple/upload.cgi108
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