X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=webapps.sh;h=8ec93b03136a6cb1f5a44af860313f5cb233b818;hb=8c4d9d9a57fbd25b6040e389ea523cf4657111b7;hp=e824f4a4ba1623d30954047e76b62fd4ca967475;hpb=d91deb44d34010644caf3a3e01d673370cb6027a;p=packages%2Fwebapps.git diff --git a/webapps.sh b/webapps.sh old mode 100644 new mode 100755 index e824f4a..8ec93b0 --- a/webapps.sh +++ b/webapps.sh @@ -1,30 +1,161 @@ #!/bin/sh + webapps=/etc/webapps +webservers='apache httpd lighttpd' action="$1" -webserver="$2" +httpd="$2" app="$3" +webapp_link() { + echo "$1" | tr '/' '-' +} + webapp_register() { - ln -sf $webapps/$app/$webserver.conf /etc/$webserver/webapps/$app.conf + local link=$(webapp_link $app) + ln -sf ../../..$webapps/$app/$httpd.conf /etc/$httpd/webapps.d/$link.conf } webapp_unregister() { - rm -f /etc/$webserver/webapps/$app.conf + local link=$(webapp_link $app) + rm -f /etc/$httpd/webapps.d/$link.conf +} + +webapp_list() { + echo "registered webapps${1:+ for $1}": + for server in ${1:-$webservers}; do + [ -d /etc/$server/webapps.d ] || continue + echo "$server:" + for conf in /etc/$server/webapps.d/*; do + [ -L $conf ] || continue + app=$(readlink -f $conf | sed -e "s,$webapps/,,;s,/$server.conf$,,") + echo "- $app" + done + done +} + +# return registered application list for webserver +# useful for bash_completion parsing +webapp_apps_registered() { + local action="$1" + local server=$2 + + for conf in /etc/$server/webapps.d/*.conf; do + [ -L $conf ] || continue + appname=$(readlink $conf) + appname=${appname#*$webapps/} + appname=${appname%/$server.conf} + [ -f /etc/webapps/$appname/$server.conf ] || continue + echo $appname + done +} + +# return application list for webserver +# useful for bash_completion parsing +webapp_applist() { + local action="$1" + local server=$2 + + for app in /etc/webapps/*; do + [ -d $app ] || continue + [ -f $app/$server.conf ] || continue + local appname=${app##*/} + local link=$(webapp_link $appname) + + case "$action" in + *-registered) + [ -f /etc/$server/webapps.d/$link.conf ] && echo $appname + ;; + *-unregistered) + [ -f /etc/$server/webapps.d/$link.conf ] || echo $appname + ;; + *) + echo $appname + ;; + esac + done +} + +webapp_list_apps() { + echo "available webapps" + for app in /etc/webapps/*; do + [ -d $app ] || continue + + servers="" + for server in $webservers; do + [ -f $app/$server.conf ] || continue + servers="$servers${servers:+ }$server" + done + + [ "$servers" ] || continue + echo "- ${app##*/} ($servers)" + done } usage() { cat >&2 <&2 "$0: $*" + exit 1 +} + +checkconfig() { + if [ -z "$httpd" ] || [ -z "$app" ]; then + usage + return 1 + fi + + # sanity check + if [ ! -d "$webapps/$app" ]; then + die "'$app' is not webapp? (Missing directory: $webapps/$app)" + fi + if [ ! -d "/etc/$httpd/webapps.d" ]; then + die "'$httpd' is not a webserver? (Missing directory: /etc/$httpd/webapps.d)" + fi +} + case "$action" in register) - webapp_register + checkconfig && webapp_register ;; unregister) - webapp_unregister + checkconfig && webapp_unregister + ;; +list) + webapp_list $2 + ;; +list-apps) + webapp_list_apps + ;; +list-apps-registered) + if [ "$2" ]; then + webapp_apps_registered $action $2 + else + webapp_list_apps + fi + ;; +list-apps-unregistered) + if [ "$2" ]; then + webapp_applist $action $2 + else + webapp_list_apps + fi ;; *) usage