cdist-contrib/type/__nextcloud_app/gencode-remote

86 lines
2.3 KiB
Bash
Executable File

#!/bin/sh -e
# __nextcloud_app/gencode-remote
# Handles a nextcloud app.
# Call the nextcloud occ script as the intended user. Maybe this can be a bit
# more effictive with user switching, but currently the easiest way of doing
# it.
#
# All arguments are directly passed to occ (injection alarm ;-) )
occ() {
# su creates a new shell, so it does not affect the current session
# will not use -q as it supresses errors, too
cat << SHELL
su -s /bin/sh -l "$www_user" -- -e <<'SU'
cd '$cloud' && php occ --no-warnings --no-interaction --no-ansi $@
SU
SHELL
}
# Get the app id
appid="$__object/parameter/appid"
if [ -f "$appid" ]; then
appid="$(cat "$appid")"
else
appid="$__object_id"
fi
# Get the app state
state_is="$(cat "$__object/explorer/state")"
state_should="$(cat "$__object/parameter/state")"
# Get general parameters
cloud="$(cat "$__object/parameter/cloud")"
www_user="$(cat "$__object/parameter/www-user")"
# Abort if nextcloud is not installed
if [ -z "$state_is" ]; then
printf "No nextcloud installation could be detected in '%s' ..\n" "$cloud" >&2
echo "Use the type __nextcloud to ensure the installation and mark it as dependency for this type!" >&2
exit 2
fi
# Check if the state changes
if [ "$state_is" != "$state_should" ]; then
# check what to do
case "$state_should" in
enabled)
if [ "$state_is" = "disabled" ]; then
occ app:enable "'$appid'"
echo enabled >> "$__messages_out"
else
occ app:install "'$appid'"
echo installed >> "$__messages_out"
fi
;;
disabled)
if [ "$state_is" = "absent" ]; then
occ app:install --keep-disabled "'$appid'"
echo installed >> "$__messages_out"
else
occ app:disable "'$appid'"
echo disabled >> "$__messages_out"
fi
;;
present)
if [ "$state_is" = "absent" ]; then
occ app:install "'$appid'"
echo installed >> "$__messages_out"
fi
# else, everything is ok
;;
absent)
occ app:remove "'$appid'"
echo removed >> "$__messages_out"
;;
esac
fi