diff --git a/scripts/docker/app/functions/function_install_app.sh b/scripts/docker/app/functions/function_install_app.sh index 8becea0..75bcabe 100755 --- a/scripts/docker/app/functions/function_install_app.sh +++ b/scripts/docker/app/functions/function_install_app.sh @@ -9,6 +9,22 @@ dockerInstallApp() local app_name_ucfirst="$(tr '[:lower:]' '[:upper:]' <<< ${app_name:0:1})${app_name:1}" local installFuncName="install${app_name_ucfirst}" + # App slugs are lowercase (e.g. "libreportal"), but installer functions keep + # their own internal capitalisation (e.g. installLibrePortal) — capitalising + # only the first letter can't reproduce that camelCase. If the naive name + # isn't a defined function, resolve it case-insensitively against the real + # function table so any compound brand/app name (LibrePortal, …) just works. + if ! declare -F "$installFuncName" >/dev/null 2>&1; then + local _resolved + _resolved="$(compgen -A function | grep -ixF "install${app_name}" | head -n1)" + [[ -n "$_resolved" ]] && installFuncName="$_resolved" + fi + + if ! declare -F "$installFuncName" >/dev/null 2>&1; then + isError "No installer function found for app '${app_name}' (looked for ${installFuncName})." + return 1 + fi + if [[ "$reset_network" == "true" ]]; then export LIBREPORTAL_RESET_NETWORK=1 if declare -f ipRemoveFromDatabase >/dev/null 2>&1; then