-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapps-enable.sh
More file actions
executable file
·187 lines (154 loc) · 4.45 KB
/
Copy pathapps-enable.sh
File metadata and controls
executable file
·187 lines (154 loc) · 4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#!/bin/sh
set -e
# SPDX-FileCopyrightText: 2025 STRATO GmbH
# SPDX-License-Identifier: AGPL-3.0-or-later
# This script assumes to be located in /IONOS as submodule within the Nextcloud server
# repository.
# --- colors
_color_bold="\033[1m"
_color_red="\033[0;31m"
_color_green="\033[0;32m"
_color_yellow="\033[0;33m"
_color_blue="\033[0;34m"
_color_reset="\033[0m"
# ---
BDIR="$( dirname "${0}" )"
NEXTCLOUD_DIR="${BDIR}/.."
# Read app lists from .list files
read_app_list() {
# Read app list from file, ignoring comments and empty lines
# Usage: read_app_list <file_path>
_list_file="${1}"
if [ ! -f "${_list_file}" ]; then
echo ""
return
fi
grep -v -e '^[[:space:]]*#' -e '^[[:space:]]*$' "${_list_file}" | tr '\n' ' '
}
DISABLED_APPS=$( read_app_list "${BDIR}/disabled-apps.list" )
ENABLED_CORE_APPS=$( read_app_list "${BDIR}/enabled-core-apps.list" )
REMOVED_APPS=$( read_app_list "${BDIR}/removed-apps.txt" )
execute_occ_command() {
php "${NEXTCLOUD_DIR}/occ" \
"${@}"
}
# Log info message
# Usage: log_info <message>
log_info() {
printf "${_color_blue}[i] %s${_color_reset}\n" "${*}"
}
# Log success message
# Usage: log_success <message>
log_success() {
printf "${_color_green}[✓] %s${_color_reset}\n" "${*}"
}
# Log warning message
# Usage: log_warn <message>
log_warn() {
printf "${_color_yellow}[!] %s${_color_reset}\n" "${*}"
}
# Log fatal error message and exit with failure code
# Usage: log_fatal <message>
log_fatal() {
printf "${_color_red}[x] Fatal Error: %s${_color_reset}\n" "${*}" >&2
exit 1
}
enable_app() {
# Enable app and check if it was enabled
# Return 1 if enabling the app failed, 0 if successful
#
app_name="${1}"
log_info "Enable app '${app_name}' ..."
if ! execute_occ_command app:enable "${app_name}"
then
log_warn "Enabling app \"${app_name}\" failed."
return 1
fi
log_success "App \"${app_name}\" enabled."
return 0
}
disable_app() {
# Disable app and check if it was disabled
# Fail if disabling the app failed
#
app_name="${1}"
log_info "Disable app '${app_name}' ..."
if ! execute_occ_command app:disable "${app_name}"
then
log_fatal "Disable app \"${app_name}\" failed."
fi
log_success "App \"${app_name}\" disabled."
}
disable_removed_apps() {
# Disable apps from removed-apps.txt (always disable without checking state)
#
_count=0
if [ -z "${REMOVED_APPS}" ]; then
log_info "No removed apps to disable."
return
fi
log_info "Disabling removed apps..."
for app in ${REMOVED_APPS}; do
printf "${_color_blue}[i] Disabling removed app: %s${_color_reset}\n" "${app}"
disable_app "${app}"
_count=$(( _count + 1 ))
done
log_success "Disabled ${_count} removed apps."
echo
}
ensure_app_states() {
# Ensure apps are in the desired state (enabled/disabled)
#
_enabled_apps_count=0
_disabled_apps_count=0
log_info "Check app states..."
if ! apps_json=$(execute_occ_command app:list --output json); then
log_fatal "Failed to get app list"
fi
if ! enabled_apps=$(echo "${apps_json}" | jq -r '.enabled | keys | .[]' 2>/dev/null); then
log_fatal "Failed to parse enabled apps JSON. Output was: ${apps_json}"
fi
if ! disabled_apps=$(echo "${apps_json}" | jq -r '.disabled | keys | .[]' 2>/dev/null); then
log_fatal "Failed to parse disabled apps JSON. Output was: ${apps_json}"
fi
# Ensure apps are disabled
for app in ${DISABLED_APPS}; do
printf "${_color_blue}[i] Checking app to disable: %s${_color_reset}" "${app}"
if echo "${enabled_apps}" | grep -q -w "${app}"; then
printf " - currently enabled - disabling\n"
disable_app "${app}"
_disabled_apps_count=$(( _disabled_apps_count + 1 ))
else
printf " - already disabled - skip\n"
fi
done
# Ensure core apps are enabled
for app in ${ENABLED_CORE_APPS}; do
printf "${_color_blue}[i] Checking core app to enable: %s${_color_reset}" "${app}"
if echo "${DISABLED_APPS}" | grep -q -w "${app}"; then
printf " - is in DISABLED_APPS list - skipping\n"
continue
fi
if echo "${disabled_apps}" | grep -q -w "${app}"; then
printf " - currently disabled - enabling\n"
if enable_app "${app}"; then
_enabled_apps_count=$(( _enabled_apps_count + 1 ))
fi
else
printf " - already enabled - skip\n"
fi
done
echo
log_success "Disabled ${_disabled_apps_count} apps."
log_success "Enabled ${_enabled_apps_count} core apps."
log_success "Done."
}
main() {
if ! jq --version >/dev/null 2>&1; then
log_fatal "Error: jq is required"
fi
log_info "Ensuring app states..."
disable_removed_apps
ensure_app_states
}
main