summaryrefslogtreecommitdiff
path: root/src/editor/simple/upload.cgi
diff options
context:
space:
mode:
authorhallgren <hallgren@chalmers.se>2011-06-08 15:29:50 +0000
committerhallgren <hallgren@chalmers.se>2011-06-08 15:29:50 +0000
commit25ae9b2dc4d2a2a5bd2e1920e1ee82dfbef4162e (patch)
treedda562ccde336a8a624a19f7aae42a4f4705f30e /src/editor/simple/upload.cgi
parent25a9efb13c05bc806dff8d23c6be97013aa981ea (diff)
gfse: initial support for grammars in the cloud
This lets the user access the same set of grammars from multiple devices. Sharing grammars between multiple users is possible but discouraged at the moment. There is no version handling, so concurrent editing of the same grammar by different users might result in one user overwriting changes made by another user. (The same goes for cuncurrent editing on multiple devices by a single user, of course.)
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