mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-05 01:02:51 -06:00
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.)
This commit is contained in:
@@ -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
|
||||
|
||||
end
|
||||
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"
|
||||
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
|
||||
done
|
||||
begin dl
|
||||
dt ; echo "◂"; link "javascript:history.back()" "Back to Editor"
|
||||
end
|
||||
fi
|
||||
|
||||
cd $dir
|
||||
if [ ${#gffiles} -gt 0 ] ; then
|
||||
begin pre
|
||||
echo "gf -s -make ${gffiles[*]}"
|
||||
if gf -s -make ${gffiles[*]} 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"
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user