Browse Source

Tidying backup utils

Bob Mottram 7 years ago
parent
commit
fee71d392e
1 changed files with 233 additions and 226 deletions
  1. 233
    226
      src/freedombone-utils-backup

+ 233
- 226
src/freedombone-utils-backup View File

@@ -52,16 +52,16 @@ function remove_backups_temp_directory {
52 52
 function suspend_site {
53 53
     # suspends a given website
54 54
     SUSPENDED_SITE="$1"
55
-    nginx_dissite $SUSPENDED_SITE
55
+    nginx_dissite "$SUSPENDED_SITE"
56 56
     systemctl reload nginx
57 57
 }
58 58
 
59 59
 function restart_site {
60 60
     # restarts a given website
61
-    if [ ! $SUSPENDED_SITE ]; then
61
+    if [ ! "$SUSPENDED_SITE" ]; then
62 62
         return
63 63
     fi
64
-    nginx_ensite $SUSPENDED_SITE
64
+    nginx_ensite "$SUSPENDED_SITE"
65 65
     systemctl reload nginx
66 66
     SUSPENDED_SITE=
67 67
 }
@@ -79,27 +79,27 @@ function configure_backup_key {
79 79
     fi
80 80
 
81 81
     gpg_agent_setup root
82
-    gpg_agent_setup $MY_USERNAME
82
+    gpg_agent_setup "$MY_USERNAME"
83 83
 
84 84
     # Generate a GPG key for backups
85 85
     BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)")
86 86
     if [[ $BACKUP_KEY_EXISTS == "no" ]]; then
87
-        echo 'Key-Type: eddsa' > /home/$MY_USERNAME/gpg-genkey.conf
88
-        echo 'Key-Curve: Ed25519' >> /home/$MY_USERNAME/gpg-genkey.conf
89
-        echo 'Subkey-Type: eddsa' >> /home/$MY_USERNAME/gpg-genkey.conf
90
-        echo 'Subkey-Curve: Ed25519' >> /home/$MY_USERNAME/gpg-genkey.conf
91
-        echo "Name-Real:  $MY_NAME" >> /home/$MY_USERNAME/gpg-genkey.conf
92
-        echo "Name-Email: $MY_EMAIL_ADDRESS" >> /home/$MY_USERNAME/gpg-genkey.conf
93
-        echo "Name-Comment: backup key" >> /home/$MY_USERNAME/gpg-genkey.conf
94
-        echo 'Expire-Date: 0' >> /home/$MY_USERNAME/gpg-genkey.conf
95
-        cat /home/$MY_USERNAME/gpg-genkey.conf
96
-        echo "Passphrase: $BACKUP_DUMMY_PASSWORD" >> /home/$MY_USERNAME/gpg-genkey.conf
97
-        chown $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/gpg-genkey.conf
87
+        { echo 'Key-Type: eddsa';
88
+          echo 'Key-Curve: Ed25519';
89
+          echo 'Subkey-Type: eddsa';
90
+          echo 'Subkey-Curve: Ed25519';
91
+          echo "Name-Real:  $MY_NAME";
92
+          echo "Name-Email: $MY_EMAIL_ADDRESS";
93
+          echo "Name-Comment: backup key";
94
+          echo 'Expire-Date: 0'; } > "/home/$MY_USERNAME/gpg-genkey.conf"
95
+        cat "/home/$MY_USERNAME/gpg-genkey.conf"
96
+        echo "Passphrase: $BACKUP_DUMMY_PASSWORD" >> "/home/$MY_USERNAME/gpg-genkey.conf"
97
+        chown "$MY_USERNAME":"$MY_USERNAME" "/home/$MY_USERNAME/gpg-genkey.conf"
98 98
         echo $'Backup key does not exist. Creating it.'
99
-        su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - $MY_USERNAME
100
-        chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.gnupg
99
+        su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --batch --full-gen-key /home/$MY_USERNAME/gpg-genkey.conf" - "$MY_USERNAME"
100
+        chown -R "$MY_USERNAME":"$MY_USERNAME" "/home/$MY_USERNAME/.gnupg"
101 101
 
102
-        shred -zu /home/$MY_USERNAME/gpg-genkey.conf
102
+        shred -zu "/home/$MY_USERNAME/gpg-genkey.conf"
103 103
         echo $'Checking that the Backup key was created'
104 104
         BACKUP_KEY_EXISTS=$(gpg_key_exists "$MY_USERNAME" "$MY_NAME (backup key)")
105 105
         if [[ $BACKUP_KEY_EXISTS == "no" ]]; then
@@ -108,46 +108,46 @@ function configure_backup_key {
108 108
         fi
109 109
     fi
110 110
 
111
-    MY_BACKUP_KEY_ID=$(su -c "gpg --list-keys \"$MY_NAME (backup key)\"" - $MY_USERNAME | sed -n '2p' | sed 's/^[ \t]*//')
111
+    MY_BACKUP_KEY_ID=$(su -c "gpg --list-keys \"$MY_NAME (backup key)\"" - "$MY_USERNAME" | sed -n '2p' | sed 's/^[ \t]*//')
112 112
     echo "Backup key: $MY_BACKUP_KEY_ID"
113 113
     MY_BACKUP_KEY=/home/$MY_USERNAME/backup_key
114
-    su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_public.asc --armor --export $MY_BACKUP_KEY_ID" - $MY_USERNAME
114
+    su -m root -c "gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_public.asc --armor --export $MY_BACKUP_KEY_ID" - "$MY_USERNAME"
115 115
 
116
-    if [ ! -f ${MY_BACKUP_KEY}_public.asc ]; then
116
+    if [ ! -f "${MY_BACKUP_KEY}_public.asc" ]; then
117 117
         echo 'Public backup key could not be exported'
118 118
         exit 36829
119 119
     fi
120 120
 
121
-    su -m root -c "echo '$BACKUP_DUMMY_PASSWORD' | gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_private.asc --armor --batch --passphrase-fd 0 --export-secret-key $MY_BACKUP_KEY_ID" - $MY_USERNAME
121
+    su -m root -c "echo '$BACKUP_DUMMY_PASSWORD' | gpg --homedir /home/$MY_USERNAME/.gnupg --output ${MY_BACKUP_KEY}_private.asc --armor --batch --passphrase-fd 0 --export-secret-key $MY_BACKUP_KEY_ID" - "$MY_USERNAME"
122 122
 
123
-    if [ ! -f ${MY_BACKUP_KEY}_private.asc ]; then
123
+    if [ ! -f "${MY_BACKUP_KEY}_private.asc" ]; then
124 124
         echo 'Private backup key could not be exported'
125 125
         exit 29235
126 126
     fi
127 127
 
128 128
     # import backup key to root user
129
-    gpg --import --import ${MY_BACKUP_KEY}_public.asc
130
-    echo '$BACKUP_DUMMY_PASSWORD' | gpg --batch --passphrase-fd 0 --allow-secret-key-import --import ${MY_BACKUP_KEY}_private.asc
129
+    gpg --import --import "${MY_BACKUP_KEY}_public.asc"
130
+    echo "$BACKUP_DUMMY_PASSWORD" | gpg --batch --passphrase-fd 0 --allow-secret-key-import --import "${MY_BACKUP_KEY}_private.asc"
131 131
 
132
-    shred -zu ${MY_BACKUP_KEY}_public.asc
133
-    shred -zu ${MY_BACKUP_KEY}_private.asc
132
+    shred -zu "${MY_BACKUP_KEY}_public.asc"
133
+    shred -zu "${MY_BACKUP_KEY}_private.asc"
134 134
 
135 135
     mark_completed "${FUNCNAME[0]}"
136 136
 }
137 137
 
138 138
 function backup_to_friends_servers {
139 139
     # update crontab
140
-    echo '#!/bin/bash' > /etc/cron.daily/backuptofriends
141
-    echo "if [ -f /usr/local/bin/${PROJECT_NAME}-backup-remote ]; then" >> /etc/cron.daily/backuptofriends
142
-    echo "    /usr/local/bin/${PROJECT_NAME}-backup-remote" >> /etc/cron.daily/backuptofriends
143
-    echo 'else' >> /etc/cron.daily/backuptofriends
144
-    echo "    /usr/bin/${PROJECT_NAME}-backup-remote" >> /etc/cron.daily/backuptofriends
145
-    echo 'fi' >> /etc/cron.daily/backuptofriends
140
+    { echo '#!/bin/bash';
141
+      echo "if [ -f /usr/local/bin/${PROJECT_NAME}-backup-remote ]; then";
142
+      echo "    /usr/local/bin/${PROJECT_NAME}-backup-remote";
143
+      echo 'else';
144
+      echo "    /usr/bin/${PROJECT_NAME}-backup-remote";
145
+      echo 'fi'; } > /etc/cron.daily/backuptofriends
146 146
     chmod +x /etc/cron.daily/backuptofriends
147 147
 }
148 148
 
149 149
 function backup_mount_drive {
150
-    if [ $1 ]; then
150
+    if [ "$1" ]; then
151 151
         if [[ "$1" == "/dev/"* ]]; then
152 152
             USB_DRIVE=$1
153 153
         else
@@ -157,25 +157,25 @@ function backup_mount_drive {
157 157
 
158 158
     # get the admin user
159 159
     ADMIN_USERNAME=$(get_completion_param "Admin user")
160
-    if [ $2 ]; then
160
+    if [ "$2" ]; then
161 161
         ADMIN_USERNAME=$2
162 162
     fi
163
-    ADMIN_NAME=$(getent passwd $ADMIN_USERNAME | cut -d: -f5 | cut -d, -f1)
163
+    ADMIN_NAME=$(getent passwd "$ADMIN_USERNAME" | cut -d: -f5 | cut -d, -f1)
164 164
 
165
-    if [ $3 ]; then
165
+    if [ "$3" ]; then
166 166
         RESTORE_APP=$3
167 167
     fi
168 168
 
169 169
     # check that the backup destination is available
170
-    if [ ! -b $USB_DRIVE ]; then
170
+    if [ ! -b "$USB_DRIVE" ]; then
171 171
         echo $"Please attach a USB drive"
172 172
         exit 1
173 173
     fi
174 174
 
175 175
     # unmount if already mounted
176
-    umount -f $USB_MOUNT
177
-    if [ ! -d $USB_MOUNT ]; then
178
-        mkdir $USB_MOUNT
176
+    umount -f "$USB_MOUNT"
177
+    if [ ! -d "$USB_MOUNT" ]; then
178
+        mkdir "$USB_MOUNT"
179 179
     fi
180 180
     if [ -f /dev/mapper/encrypted_usb ]; then
181 181
         rm -rf /dev/mapper/encrypted_usb
@@ -183,33 +183,30 @@ function backup_mount_drive {
183 183
     cryptsetup luksClose encrypted_usb
184 184
 
185 185
     # mount the encrypted backup drive
186
-    cryptsetup luksOpen $USB_DRIVE encrypted_usb
187
-    if [ "$?" = "0" ]; then
186
+    if cryptsetup luksOpen "$USB_DRIVE" encrypted_usb; then
188 187
         USB_DRIVE=/dev/mapper/encrypted_usb
189 188
     fi
190
-    mount $USB_DRIVE $USB_MOUNT
191
-    if [ ! "$?" = "0" ]; then
189
+    if ! mount "$USB_DRIVE" "$USB_MOUNT"; then
192 190
         echo $"There was a problem mounting the USB drive to $USB_MOUNT"
193
-        rm -rf $USB_MOUNT
191
+        rm -rf "$USB_MOUNT"
194 192
         exit 783452
195 193
     fi
196 194
 }
197 195
 
198 196
 function backup_unmount_drive {
199
-    if [ $1 ]; then
200
-        USB_DRIVE=${1}
201
-        if [ $2 ]; then
202
-            USB_MOUNT=${2}
203
-        fi
204
-    fi
197
+    #if [ $1 ]; then
198
+    #    USB_DRIVE=${1}
199
+    #    if [ $2 ]; then
200
+    #        USB_MOUNT=${2}
201
+    #    fi
202
+    #fi
205 203
     sync
206
-    umount $USB_MOUNT
207
-    if [ ! "$?" = "0" ]; then
204
+    if ! umount "$USB_MOUNT"; then
208 205
         echo $"Unable to unmount the drive."
209
-        rm -rf $USB_MOUNT
206
+        rm -rf "$USB_MOUNT"
210 207
         exit 9
211 208
     fi
212
-    rm -rf $USB_MOUNT
209
+    rm -rf "$USB_MOUNT"
213 210
     if [[ $USB_DRIVE == /dev/mapper/encrypted_usb ]]; then
214 211
         echo $"Unmount encrypted USB"
215 212
         cryptsetup luksClose encrypted_usb
@@ -226,54 +223,55 @@ function backup_database_local_usb {
226 223
         restart_site
227 224
         exit 10
228 225
     fi
229
-    if [ ! -d $USB_MOUNT/backup/${1} ]; then
230
-        mkdir -p $USB_MOUNT/backup/${1}
226
+    if [ ! -d "$USB_MOUNT/backup/${1}" ]; then
227
+        mkdir -p "$USB_MOUNT/backup/${1}"
231 228
     fi
232
-    if [ ! -d $USB_MOUNT/backup/${1}data ]; then
233
-        mkdir -p $USB_MOUNT/backup/${1}data
229
+    if [ ! -d "$USB_MOUNT/backup/${1}data" ]; then
230
+        mkdir -p "$USB_MOUNT/backup/${1}data"
234 231
     fi
235 232
     local_database_dir=/root/temp${1}data
236
-    if [ ! -d ${local_database_dir} ]; then
237
-        mkdir -p ${local_database_dir}
233
+    if [ ! -d "${local_database_dir}" ]; then
234
+        mkdir -p "${local_database_dir}"
238 235
     fi
239 236
     echo $"Obtaining ${1} database backup"
240 237
     database_file_extension='sql'
241
-    if [ $USE_MONGODB ]; then
238
+    if [ "$USE_MONGODB" ]; then
242 239
         database_file_extension='mdb'
243 240
         USE_POSTGRESQL=
244 241
     fi
245 242
     if [ ! $USE_POSTGRESQL ]; then
246
-        if [ ! $USE_MONGODB ]; then
243
+        if [ ! "$USE_MONGODB" ]; then
247 244
             USE_MONGODB=
248 245
             USE_POSTGRESQL=
249 246
             keep_database_running
250
-            mysqldump --lock-tables --password="$DATABASE_PASSWORD" ${1} > ${local_database_dir}/${1}.${database_file_extension}
247
+            mysqldump --lock-tables --password="$DATABASE_PASSWORD" "${1}" > "${local_database_dir}/${1}.${database_file_extension}"
251 248
         else
252 249
             USE_MONGODB=
253 250
             USE_POSTGRESQL=
254
-            mongodump --db ${1} --archive=${local_database_dir}/${1}.${database_file_extension} --gzip
251
+            mongodump --db "${1}" --archive="${local_database_dir}/${1}.${database_file_extension}" --gzip
255 252
         fi
256 253
     else
257 254
         USE_MONGODB=
258 255
         USE_POSTGRESQL=
259
-        cd /etc/postgresql
260
-        sudo -u postgres pg_dump ${1} > ${local_database_dir}/${1}.${database_file_extension}
256
+        cd /etc/postgresql || exit 673852
257
+        # shellcheck disable=2024
258
+        sudo -u postgres pg_dump "${1}" > "${local_database_dir}/${1}.${database_file_extension}"
261 259
     fi
262
-    if [ -f ${local_database_dir}/${1}.${database_file_extension} ]; then
263
-        if [ ! -s ${local_database_dir}/${1}.${database_file_extension} ]; then
260
+    if [ -f "${local_database_dir}/${1}.${database_file_extension}" ]; then
261
+        if [ ! -s "${local_database_dir}/${1}.${database_file_extension}" ]; then
264 262
             echo $"${1} database could not be saved"
265
-            shred -zu ${local_database_dir}/*
266
-            rm -rf ${local_database_dir}
267
-            umount $USB_MOUNT
268
-            rm -rf $USB_MOUNT
263
+            shred -zu "${local_database_dir}/*"
264
+            rm -rf "${local_database_dir}"
265
+            umount "$USB_MOUNT"
266
+            rm -rf "$USB_MOUNT"
269 267
             restart_site
270 268
             exit 6835872
271 269
         fi
272 270
     else
273 271
         echo $"${1} database could not be dumped"
274
-        rm -rf ${local_database_dir}
275
-        umount $USB_MOUNT
276
-        rm -rf $USB_MOUNT
272
+        rm -rf "${local_database_dir}"
273
+        umount "$USB_MOUNT"
274
+        rm -rf "$USB_MOUNT"
277 275
         restart_site
278 276
         exit 738653
279 277
     fi
@@ -282,13 +280,14 @@ function backup_database_local_usb {
282 280
 
283 281
 function backup_directory_to_usb_duplicity {
284 282
     create_backups_temp_directory
285
-    echo "$BACKUP_DUMMY_PASSWORD" | duplicity full --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --encrypt-key $MY_BACKUP_KEY_ID --full-if-older-than 4W --exclude-other-filesystems ${1} file://$USB_MOUNT/backup/${2}
283
+    echo "$BACKUP_DUMMY_PASSWORD" | duplicity full --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --encrypt-key "$MY_BACKUP_KEY_ID" --full-if-older-than 4W --exclude-other-filesystems "${1}" "file://$USB_MOUNT/backup/${2}"
284
+    # shellcheck disable=SC2181
286 285
     if [ ! "$?" = "0" ]; then
287
-        umount $USB_MOUNT
288
-        rm -rf $USB_MOUNT
286
+        umount "$USB_MOUNT"
287
+        rm -rf "$USB_MOUNT"
289 288
         if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
290
-            shred -zu ${1}/*
291
-            rm -rf ${1}
289
+            shred -zu "${1}/*"
290
+            rm -rf "${1}"
292 291
         fi
293 292
         function_check restart_site
294 293
         restart_site
@@ -296,13 +295,14 @@ function backup_directory_to_usb_duplicity {
296 295
         exit 8352925
297 296
     fi
298 297
     if [[ $ENABLE_BACKUP_VERIFICATION == "yes" ]]; then
299
-        echo "$BACKUP_DUMMY_PASSWORD" | duplicity verify --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --encrypt-key $MY_BACKUP_KEY_ID --full-if-older-than 4W --exclude-other-filesystems ${1} file://$USB_MOUNT/backup/${2}
298
+        echo "$BACKUP_DUMMY_PASSWORD" | duplicity verify --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --encrypt-key "$MY_BACKUP_KEY_ID" --full-if-older-than 4W --exclude-other-filesystems "${1}" "file://$USB_MOUNT/backup/${2}"
299
+        # shellcheck disable=SC2181
300 300
         if [ ! "$?" = "0" ]; then
301
-            umount $USB_MOUNT
302
-            rm -rf $USB_MOUNT
301
+            umount "$USB_MOUNT"
302
+            rm -rf "$USB_MOUNT"
303 303
             if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
304
-                shred -zu ${1}/*
305
-                rm -rf ${1}
304
+                shred -zu "${1}/*"
305
+                rm -rf "${1}"
306 306
             fi
307 307
             function_check restart_site
308 308
             restart_site
@@ -314,10 +314,11 @@ function backup_directory_to_usb_duplicity {
314 314
 }
315 315
 
316 316
 function backup_directory_to_usb {
317
-    if [ ! -d ${1} ]; then
317
+    if [ ! -d "${1}" ]; then
318 318
         echo $"WARNING: directory does not exist: ${1}"
319 319
     else
320 320
         BACKUP_KEY_EXISTS=$(gpg --list-keys "$ADMIN_NAME (backup key)")
321
+        # shellcheck disable=SC2181
321 322
         if [ ! "$?" = "0" ]; then
322 323
             echo $"Backup key could not be found"
323 324
             function_check restart_site
@@ -326,77 +327,76 @@ function backup_directory_to_usb {
326 327
         fi
327 328
 
328 329
         MY_BACKUP_KEY_ID=$(gpg --list-keys "$ADMIN_NAME (backup key)" | sed -n '2p' | sed 's/^[ \t]*//')
329
-        if [ ! -d $USB_MOUNT/backup/${2} ]; then
330
-            mkdir -p $USB_MOUNT/backup/${2}
330
+        if [ ! -d "$USB_MOUNT/backup/${2}" ]; then
331
+            mkdir -p "$USB_MOUNT/backup/${2}"
331 332
         fi
332 333
 
333
-        backup_directory_to_usb_duplicity ${1} ${2}
334
+        backup_directory_to_usb_duplicity "${1}" "${2}"
334 335
 
335 336
         if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
336
-            shred -zu ${1}/*
337
-            rm -rf ${1}
337
+            shred -zu "${1}/*"
338
+            rm -rf "${1}"
338 339
         fi
339 340
     fi
340 341
 }
341 342
 
342 343
 function restore_directory_from_usb_duplicity {
343 344
     create_backups_temp_directory
344
-    PASSPHRASE="$BACKUP_DUMMY_PASSWORD" duplicity restore --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --force file://$USB_MOUNT/backup/${2} ${1}
345
+    PASSPHRASE="$BACKUP_DUMMY_PASSWORD" duplicity restore --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --force "file://$USB_MOUNT/backup/${2}" "${1}"
346
+    # shellcheck disable=SC2181
345 347
     if [ ! "$?" = "0" ]; then
346 348
         echo "WARNING: failed to restore $USB_MOUNT/backup/${2} to ${1}"
347 349
     fi
348
-    PASSPHRASE=
349 350
     remove_backups_temp_directory
350 351
 }
351 352
 
352 353
 function restore_directory_from_usb {
353
-    if [ ! ${1} ]; then
354
+    if [ ! "${1}" ]; then
354 355
         echo "$USB_MOUNT/backup/${2} -> ${1}"
355 356
         echo $'No restore destination given'
356 357
         return
357 358
     fi
358
-    if [ ! ${2} ]; then
359
+    if [ ! "${2}" ]; then
359 360
         echo "$USB_MOUNT/backup/${2} -> ${1}"
360 361
         echo $'No restore source given'
361 362
         return
362 363
     fi
363
-    if [ ! -d ${1} ]; then
364
-        mkdir ${1}
364
+    if [ ! -d "${1}" ]; then
365
+        mkdir "${1}"
365 366
     fi
366
-    restore_directory_from_usb_duplicity ${1} ${2}
367
+    restore_directory_from_usb_duplicity "${1}" "${2}"
367 368
 }
368 369
 
369 370
 function restore_directory_from_friend_duplicity {
370 371
     create_backups_temp_directory
371
-    PASSPHRASE="$BACKUP_DUMMY_PASSWORD" duplicity restore --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --force file://$SERVER_DIRECTORY/backup/${2} ${1}
372
-    PASSPHRASE=
372
+    PASSPHRASE="$BACKUP_DUMMY_PASSWORD" duplicity restore --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --force "file://$SERVER_DIRECTORY/backup/${2}" "${1}"
373 373
     remove_backups_temp_directory
374 374
 }
375 375
 
376 376
 function restore_directory_from_friend {
377
-    if [ ! ${1} ]; then
377
+    if [ ! "${1}" ]; then
378 378
         echo $'No restore destination given'
379 379
         return
380 380
     fi
381
-    if [ ! ${2} ]; then
381
+    if [ ! "${2}" ]; then
382 382
         echo $'No restore source given'
383 383
         return
384 384
     fi
385
-    if [ ! -d ${1} ]; then
386
-        mkdir ${1}
385
+    if [ ! -d "${1}" ]; then
386
+        mkdir "${1}"
387 387
     fi
388
-    restore_directory_from_friend_duplicity ${1} ${2}
388
+    restore_directory_from_friend_duplicity "${1}" "${2}"
389 389
 }
390 390
 
391 391
 function backup_database_to_usb {
392 392
     database_name=$1
393 393
     local_database_dir=/root/temp${1}data
394
-    backup_database_local_usb ${database_name}
395
-    if [ ! -f ${local_database_dir}/${1}.sql ]; then
394
+    backup_database_local_usb "${database_name}"
395
+    if [ ! -f "${local_database_dir}/${1}.sql" ]; then
396 396
         echo $"Error backing up ${1} database to ${local_database_dir}/${1}.sql"
397 397
         exit 62383
398 398
     fi
399
-    backup_directory_to_usb ${local_database_dir} ${database_name}data
399
+    backup_directory_to_usb "${local_database_dir}" "${database_name}data"
400 400
 }
401 401
 
402 402
 # after user files have been restored permissions may need to be set
@@ -405,18 +405,19 @@ function set_user_permissions {
405 405
     for d in /home/*/ ; do
406 406
         USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
407 407
         if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
408
-            chown -R $USERNAME:$USERNAME /home/$USERNAME
408
+            chown -R "$USERNAME":"$USERNAME" "/home/$USERNAME"
409 409
         fi
410 410
     done
411 411
 }
412 412
 
413 413
 function backup_directory_to_friend_duplicity {
414 414
     create_backups_temp_directory
415
-    echo "$BACKUP_DUMMY_PASSWORD" | duplicity full --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --ssh-askpass --encrypt-key ${ADMIN_BACKUP_KEY_ID} --full-if-older-than 4W --exclude-other-filesystems ${1} $SERVER_DIRECTORY/backup/${2}
415
+    echo "$BACKUP_DUMMY_PASSWORD" | duplicity full --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --ssh-askpass --encrypt-key "${ADMIN_BACKUP_KEY_ID}" --full-if-older-than 4W --exclude-other-filesystems "${1}" "$SERVER_DIRECTORY/backup/${2}"
416
+    # shellcheck disable=SC2181
416 417
     if [ ! "$?" = "0" ]; then
417
-        if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
418
-            shred -zu ${1}/*
419
-            rm -rf ${1}
418
+        if [[ "${1}" == "/root/temp"* || ${1} == *"tempbackup" ]]; then
419
+            shred -zu "${1}/*"
420
+            rm -rf "${1}"
420 421
         fi
421 422
         function_check restart_site
422 423
         restart_site
@@ -424,11 +425,12 @@ function backup_directory_to_friend_duplicity {
424 425
         exit 5293526
425 426
     fi
426 427
     if [[ $ENABLE_BACKUP_VERIFICATION == "yes" ]]; then
427
-        echo "$BACKUP_DUMMY_PASSWORD" | duplicity verify --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir $BACKUP_TEMP_DIRECTORY --ssh-askpass --encrypt-key ${ADMIN_BACKUP_KEY_ID} --full-if-older-than 4W --exclude-other-filesystems ${1} $SERVER_DIRECTORY/backup/${2}
428
+        echo "$BACKUP_DUMMY_PASSWORD" | duplicity verify --use-agent --gpg-options "$BACKUP_GPG_OPTIONS" --tempdir "$BACKUP_TEMP_DIRECTORY" --ssh-askpass --encrypt-key "${ADMIN_BACKUP_KEY_ID}" --full-if-older-than 4W --exclude-other-filesystems "${1}" "$SERVER_DIRECTORY/backup/${2}"
429
+        # shellcheck disable=SC2181
428 430
         if [ ! "$?" = "0" ]; then
429
-            if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
430
-                shred -zu ${1}/*
431
-                rm -rf ${1}
431
+            if [[ "${1}" == "/root/temp"* || ${1} == *"tempbackup" ]]; then
432
+                shred -zu "${1}/*"
433
+                rm -rf "${1}"
432 434
             fi
433 435
             function_check restart_site
434 436
             restart_site
@@ -441,6 +443,7 @@ function backup_directory_to_friend_duplicity {
441 443
 
442 444
 function backup_directory_to_friend {
443 445
     BACKUP_KEY_EXISTS=$(gpg --list-keys "$ADMIN_NAME (backup key)")
446
+    # shellcheck disable=SC2181
444 447
     if [ ! "$?" = "0" ]; then
445 448
         echo $"Backup key could not be found"
446 449
         function_check restart_site
@@ -449,15 +452,15 @@ function backup_directory_to_friend {
449 452
     fi
450 453
 
451 454
     ADMIN_BACKUP_KEY_ID=$(gpg --list-keys "$ADMIN_NAME (backup key)" | sed -n '2p' | sed 's/^[ \t]*//')
452
-    if [ ! -d $SERVER_DIRECTORY/backup/${2} ]; then
453
-        mkdir -p $SERVER_DIRECTORY/backup/${2}
455
+    if [ ! -d "$SERVER_DIRECTORY/backup/${2}" ]; then
456
+        mkdir -p "$SERVER_DIRECTORY/backup/${2}"
454 457
     fi
455 458
 
456
-    backup_directory_to_friend_duplicity ${1} ${2}
459
+    backup_directory_to_friend_duplicity "${1}" "${2}"
457 460
 
458
-    if [[ ${1} == "/root/temp"* || ${1} == *"tempbackup" ]]; then
459
-        shred -zu /root/temp${2}/*
460
-        rm -rf /root/temp${2}
461
+    if [[ "${1}" == "/root/temp"* || ${1} == *"tempbackup" ]]; then
462
+        shred -zu "/root/temp${2}/*"
463
+        rm -rf "/root/temp${2}"
461 464
     fi
462 465
 }
463 466
 
@@ -468,15 +471,15 @@ function backup_database_remote {
468 471
         restart_site
469 472
         exit 5783
470 473
     fi
471
-    if [ ! -d $SERVER_DIRECTORY/backup/${1} ]; then
472
-        mkdir -p $SERVER_DIRECTORY/backup/${1}
474
+    if [ ! -d "$SERVER_DIRECTORY/backup/${1}" ]; then
475
+        mkdir -p "$SERVER_DIRECTORY/backup/${1}"
473 476
     fi
474
-    if [ ! -d $SERVER_DIRECTORY/backup/${1}data ]; then
475
-        mkdir -p $SERVER_DIRECTORY/backup/${1}data
477
+    if [ ! -d "$SERVER_DIRECTORY/backup/${1}data" ]; then
478
+        mkdir -p "$SERVER_DIRECTORY/backup/${1}data"
476 479
     fi
477 480
     local_database_dir=/root/temp${1}data
478
-    if [ ! -d ${local_database_dir} ]; then
479
-        mkdir -p ${local_database_dir}
481
+    if [ ! -d "${local_database_dir}" ]; then
482
+        mkdir -p "${local_database_dir}"
480 483
     fi
481 484
 
482 485
     echo "Obtaining ${1} database backup"
@@ -490,35 +493,36 @@ function backup_database_remote {
490 493
             USE_MONGODB=
491 494
             USE_POSTGRESQL=
492 495
             keep_database_running
493
-            mysqldump --lock-tables --password="$DATABASE_PASSWORD" ${1} > ${local_database_dir}/${1}.${database_file_extension}
496
+            mysqldump --lock-tables --password="$DATABASE_PASSWORD" "${1}" > "${local_database_dir}/${1}.${database_file_extension}"
494 497
         else
495 498
             USE_MONGODB=
496 499
             USE_POSTGRESQL=
497
-            mongodump --db ${1} --archive=${local_database_dir}/${1}.${database_file_extension} --gzip
500
+            mongodump --db "${1}" --archive="${local_database_dir}/${1}.${database_file_extension}" --gzip
498 501
         fi
499 502
     else
500 503
         USE_MONGODB=
501 504
         USE_POSTGRESQL=
502
-        cd /etc/postgresql
503
-        sudo -u postgres pg_dump ${1} > ${local_database_dir}/${1}.${database_file_extension}
505
+        cd /etc/postgresql || exit 782563472
506
+        # shellcheck disable=SC2024
507
+        sudo -u postgres pg_dump "${1}" > "${local_database_dir}/${1}.${database_file_extension}"
504 508
     fi
505 509
 
506
-    if [ -f ${local_database_dir}/${1}.${database_file_extension} ]; then
507
-        if [ ! -s ${local_database_dir}/${1}.${database_file_extension} ]; then
510
+    if [ -f "${local_database_dir}/${1}.${database_file_extension}" ]; then
511
+        if [ ! -s "${local_database_dir}/${1}.${database_file_extension}" ]; then
508 512
             echo $"${1} database could not be saved"
509
-            shred -zu ${local_database_dir}/*
510
-            rm -rf ${local_database_dir}
513
+            shred -zu "${local_database_dir}/*"
514
+            rm -rf "${local_database_dir}"
511 515
             # Send a warning email
512
-            echo $"Unable to export ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" $ADMIN_EMAIL_ADDRESS
516
+            echo $"Unable to export ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" "$ADMIN_EMAIL_ADDRESS"
513 517
             function_check restart_site
514 518
             restart_site
515 519
             exit 57386728
516 520
         fi
517 521
     else
518 522
         echo $"${1} database could not be dumped"
519
-        rm -rf ${local_database_dir}
523
+        rm -rf "${local_database_dir}"
520 524
         # Send a warning email
521
-        echo $"Unable to dump ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" $ADMIN_EMAIL_ADDRESS
525
+        echo $"Unable to dump ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" "$ADMIN_EMAIL_ADDRESS"
522 526
         function_check restart_site
523 527
         restart_site
524 528
         exit 36874289
@@ -527,8 +531,8 @@ function backup_database_remote {
527 531
 
528 532
 function backup_database_to_friend {
529 533
     database_name=$1
530
-    backup_database_remote $database_name
531
-    backup_directory_to_friend /root/temp${database_name}data ${database_name}data
534
+    backup_database_remote "$database_name"
535
+    backup_directory_to_friend "/root/temp${database_name}data" "${database_name}data"
532 536
 }
533 537
 
534 538
 function backup_apps {
@@ -542,9 +546,9 @@ function backup_apps {
542 546
     for app_name in "${APPS_INSTALLED_NAMES[@]}"
543 547
     do
544 548
         echo $"Backup ${app_name}"
545
-        app_load_variables ${app_name}
546
-        function_check backup_${localremote}_${app_name}
547
-        backup_${localremote}_${app_name}
549
+        app_load_variables "${app_name}"
550
+        function_check "backup_${localremote}_${app_name}"
551
+        "backup_${localremote}_${app_name}"
548 552
         BACKUP_APPS_COMPLETED+=("${app_name}")
549 553
         echo $"Backup ${app_name} completed"
550 554
     done
@@ -562,7 +566,7 @@ function restore_apps {
562 566
     for app_name in "${APPS_INSTALLED_NAMES[@]}"
563 567
     do
564 568
         confirm_restore=
565
-        if [ ! $2 ]; then
569
+        if [ ! "$2" ]; then
566 570
             confirm_restore=1
567 571
         else
568 572
             if [[ "$RESTORE_APP" == "$app_name" || "$RESTORE_APP" == "all" ]]; then
@@ -571,9 +575,9 @@ function restore_apps {
571 575
         fi
572 576
         if [ $confirm_restore ]; then
573 577
             echo $"Restoring ${app_name}"
574
-            app_load_variables ${app_name}
575
-            function_check restore_${localremote}_${app_name}
576
-            restore_${localremote}_${app_name}
578
+            app_load_variables "${app_name}"
579
+            function_check "restore_${localremote}_${app_name}"
580
+            "restore_${localremote}_${app_name}"
577 581
             RESTORE_APPS_COMPLETED+=("${app_name}")
578 582
             echo $"Restored ${app_name}"
579 583
         fi
@@ -584,7 +588,7 @@ function restore_database_from_friend {
584 588
     DATABASE_PASSWORD=
585 589
     RESTORE_SUBDIR="root"
586 590
 
587
-    if [ -d $SERVER_DIRECTORY/backup/${1}data ]; then
591
+    if [ -d "$SERVER_DIRECTORY/backup/${1}data" ]; then
588 592
         database_file_extension='sql'
589 593
         if [ $USE_MONGODB ]; then
590 594
             database_file_extension='mdb'
@@ -592,14 +596,14 @@ function restore_database_from_friend {
592 596
         fi
593 597
         echo $"Restoring ${1} database"
594 598
         local_database_dir=/root/temp${1}data
595
-        restore_directory_from_friend ${local_database_dir} ${1}data
596
-        database_file=${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/${restore_app_name}.${database_file_extension}
597
-        if [ ! -f $database_file ]; then
598
-            database_file=${local_database_dir}/${restore_app_name}.${database_file_extension}
599
+        restore_directory_from_friend "${local_database_dir}" "${1}data"
600
+        database_file="${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/${restore_app_name}.${database_file_extension}"
601
+        if [ ! -f "$database_file" ]; then
602
+            database_file="${local_database_dir}/${restore_app_name}.${database_file_extension}"
599 603
         fi
600
-        if [ ! -f $database_file ]; then
604
+        if [ ! -f "$database_file" ]; then
601 605
             echo $"Unable to restore ${1} database"
602
-            rm -rf ${local_database_dir}
606
+            rm -rf "${local_database_dir}"
603 607
             exit 5289252
604 608
         fi
605 609
         if [ ! $USE_POSTGRESQL ]; then
@@ -607,61 +611,63 @@ function restore_database_from_friend {
607 611
                 USE_MONGODB=
608 612
                 USE_POSTGRESQL=
609 613
                 keep_database_running
610
-                mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${restore_app_name} -o < ${database_file})
614
+                mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" "${restore_app_name}" -o < "${database_file}")
611 615
             else
612 616
                 USE_MONGODB=
613 617
                 USE_POSTGRESQL=
614
-                mongorestore --gzip --archive=${database_file} --db ${restore_app_name}
618
+                mongorestore --gzip --archive="${database_file}" --db "${restore_app_name}"
615 619
             fi
616 620
         else
617 621
             USE_MONGODB=
618 622
             USE_POSTGRESQL=
619
-            cd /etc/postgresql
620
-            mysqlsuccess=$(sudo -u postgres pg_restore ${database_file})
623
+            cd /etc/postgresql || exit 23784634
624
+            mysqlsuccess=$(sudo -u postgres pg_restore "${database_file}")
621 625
         fi
626
+        # shellcheck disable=SC2181
622 627
         if [ ! "$?" = "0" ]; then
623 628
             echo "$mysqlsuccess"
624 629
             exit 8735271
625 630
         fi
626
-        if [ -d ${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data ]; then
627
-            shred -zu ${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data/*
631
+        if [ -d "${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data" ]; then
632
+            shred -zu "${local_database_dir}/${RESTORE_SUBDIR}/temp${1}data/*"
628 633
         else
629
-            shred -zu ${local_database_dir}/*.${database_file_extension}
634
+            shred -zu "${local_database_dir}/*.${database_file_extension}"
630 635
         fi
631
-        rm -rf ${local_database_dir}
636
+        rm -rf "${local_database_dir}"
632 637
         echo $"Restoring ${1} installation"
633
-        restore_directory_from_friend /root/temp${1} ${1}
638
+        restore_directory_from_friend "/root/temp${1}" "${1}"
634 639
         RESTORE_SUBDIR="var"
635
-        if [ ${1} ]; then
640
+        if [ "${1}" ]; then
636 641
             # create directory to restore to
637
-            if [ ! -d /var/www/${2}/htdocs ]; then
638
-                mkdir -p /var/www/${2}/htdocs
639
-                chown www-data:www-data /var/www/${2}/htdocs
642
+            if [ ! -d "/var/www/${2}/htdocs" ]; then
643
+                mkdir -p "/var/www/${2}/htdocs"
644
+                chown www-data:www-data "/var/www/${2}/htdocs"
640 645
             fi
641 646
 
642
-            if [ -d /var/www/${2}/htdocs ]; then
643
-                restore_from_dir=/root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs
644
-                if [ ! -d /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs ]; then
645
-                    restore_from_dir=/root/temp${1}
647
+            if [ -d "/var/www/${2}/htdocs" ]; then
648
+                restore_from_dir="/root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs"
649
+                if [ ! -d "/root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs" ]; then
650
+                    restore_from_dir="/root/temp${1}"
646 651
                 fi
647 652
 
648
-                if [ -d $restore_from_dir ]; then
649
-                    if [ -d /root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs ]; then
650
-                        rm -rf /var/www/${2}/htdocs
651
-                        mv $restore_from_dir /var/www/${2}/
653
+                if [ -d "$restore_from_dir" ]; then
654
+                    if [ -d "/root/temp${1}/${RESTORE_SUBDIR}/www/${2}/htdocs" ]; then
655
+                        rm -rf "/var/www/${2}/htdocs"
656
+                        mv "$restore_from_dir" "/var/www/${2}/"
652 657
                     else
653
-                        cp -r $restore_from_dir/* /var/www/${2}/htdocs/
658
+                        cp -r "$restore_from_dir/*" "/var/www/${2}/htdocs/"
654 659
                     fi
660
+                    # shellcheck disable=SC2181
655 661
                     if [ ! "$?" = "0" ]; then
656 662
                         exit 78352682
657 663
                     fi
658
-                    if [ -d /etc/letsencrypt/live/${2} ]; then
659
-                        ln -s /etc/letsencrypt/live/${2}/privkey.pem /etc/ssl/private/${2}.key
660
-                        ln -s /etc/letsencrypt/live/${2}/fullchain.pem /etc/ssl/certs/${2}.pem
664
+                    if [ -d "/etc/letsencrypt/live/${2}" ]; then
665
+                        ln -s "/etc/letsencrypt/live/${2}/privkey.pem" "/etc/ssl/private/${2}.key"
666
+                        ln -s "/etc/letsencrypt/live/${2}/fullchain.pem" "/etc/ssl/certs/${2}.pem"
661 667
                     else
662 668
                         # Ensure that the bundled SSL cert is being used
663
-                        if [ -f /etc/ssl/certs/${2}.bundle.crt ]; then
664
-                            sed -i "s|${2}.crt|${2}.bundle.crt|g" /etc/nginx/sites-available/${2}
669
+                        if [ -f "/etc/ssl/certs/${2}.bundle.crt" ]; then
670
+                            sed -i "s|${2}.crt|${2}.bundle.crt|g" "/etc/nginx/sites-available/${2}"
665 671
                         fi
666 672
                     fi
667 673
                 fi
@@ -678,11 +684,11 @@ function restore_database {
678 684
     restore_app_name=$1
679 685
     restore_app_domain=$2
680 686
 
681
-    if [ -d $USB_MOUNT/backup/${restore_app_name}data ]; then
687
+    if [ -d "$USB_MOUNT/backup/${restore_app_name}data" ]; then
682 688
         echo $"Restoring ${restore_app_name} database"
683 689
         local_database_dir=/root/temp${restore_app_name}data
684
-        if [ -d ${local_database_dir} ]; then
685
-            rm -rf ${local_database_dir}
690
+        if [ -d "${local_database_dir}" ]; then
691
+            rm -rf "${local_database_dir}"
686 692
         fi
687 693
         function_check restore_directory_from_usb
688 694
         restore_directory_from_usb "${local_database_dir}" "${restore_app_name}data"
@@ -691,13 +697,13 @@ function restore_database {
691 697
             database_file_extension='mdb'
692 698
             USE_POSTGRESQL=
693 699
         fi
694
-        database_file=${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/${restore_app_name}.${database_file_extension}
695
-        if [ ! -f $database_file ]; then
696
-            database_file=${local_database_dir}/${restore_app_name}.${database_file_extension}
700
+        database_file="${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/${restore_app_name}.${database_file_extension}"
701
+        if [ ! -f "$database_file" ]; then
702
+            database_file="${local_database_dir}/${restore_app_name}.${database_file_extension}"
697 703
         fi
698
-        if [ ! -f $database_file ]; then
704
+        if [ ! -f "$database_file" ]; then
699 705
             echo $"Unable to restore ${restore_app_name} database"
700
-            rm -rf ${local_database_dir}
706
+            rm -rf "${local_database_dir}"
701 707
             function_check set_user_permissions
702 708
             set_user_permissions
703 709
             function_check backup_unmount_drive
@@ -709,19 +715,20 @@ function restore_database {
709 715
                 USE_MONGODB=
710 716
                 USE_POSTGRESQL=
711 717
                 keep_database_running
712
-                cp $database_file ~/test.sql
713
-                mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" ${restore_app_name} -o < $database_file)
718
+                cp "$database_file" ~/test.sql
719
+                mysqlsuccess=$(mysql -u root --password="$DATABASE_PASSWORD" "${restore_app_name}" -o < "$database_file")
714 720
             else
715 721
                 USE_MONGODB=
716 722
                 USE_POSTGRESQL=
717
-                mongorestore --gzip --archive=$database_file --db ${restore_app_name}
723
+                mongorestore --gzip --archive="$database_file" --db "${restore_app_name}"
718 724
             fi
719 725
         else
720 726
             USE_MONGODB=
721 727
             USE_POSTGRESQL=
722
-            cd /etc/postgresql
723
-            mysqlsuccess=$(sudo -u postgres pg_restore $database_file)
728
+            cd /etc/postgresql || exit 638463
729
+            mysqlsuccess=$(sudo -u postgres pg_restore "$database_file")
724 730
         fi
731
+        # shellcheck disable=SC2181
725 732
         if [ ! "$?" = "0" ]; then
726 733
             echo "$mysqlsuccess"
727 734
             function_check set_user_permissions
@@ -730,51 +737,52 @@ function restore_database {
730 737
             backup_unmount_drive
731 738
             exit 482638995
732 739
         fi
733
-        if [ -d ${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data ]; then
734
-            shred -zu ${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/*
740
+        if [ -d "${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data" ]; then
741
+            shred -zu "${local_database_dir}/${RESTORE_SUBDIR}/temp${restore_app_name}data/*"
735 742
         else
736
-            shred -zu ${local_database_dir}/*.${database_file_extension}
743
+            shred -zu "${local_database_dir}/*.${database_file_extension}"
737 744
         fi
738 745
 
739
-        rm -rf ${local_database_dir}
746
+        rm -rf "${local_database_dir}"
740 747
         echo $"Restoring ${restore_app_name} installation"
741
-        if [ ! -d /root/temp${restore_app_name} ]; then
742
-            mkdir /root/temp${restore_app_name}
748
+        if [ ! -d "/root/temp${restore_app_name}" ]; then
749
+            mkdir "/root/temp${restore_app_name}"
743 750
         fi
744 751
         function_check restore_directory_from_usb
745 752
         restore_directory_from_usb "/root/temp${restore_app_name}" "${restore_app_name}"
746 753
         RESTORE_SUBDIR="var"
747
-        if [ ${restore_app_domain} ]; then
754
+        if [ "${restore_app_domain}" ]; then
748 755
             # create directory to restore to
749
-            if [ ! -d /var/www/${restore_app_domain}/htdocs ]; then
750
-                mkdir -p /var/www/${restore_app_domain}/htdocs
751
-                chown www-data:www-data /var/www/${restore_app_domain}/htdocs
756
+            if [ ! -d "/var/www/${restore_app_domain}/htdocs" ]; then
757
+                mkdir -p "/var/www/${restore_app_domain}/htdocs"
758
+                chown www-data:www-data "/var/www/${restore_app_domain}/htdocs"
752 759
             fi
753 760
 
754
-            if [ -d /var/www/${restore_app_domain}/htdocs ]; then
755
-                restore_from_dir=/root/temp${restore_app_name}/${RESTORE_SUBDIR}/www/${restore_app_domain}/htdocs
756
-                if [ ! -d $restore_from_dir ]; then
761
+            if [ -d "/var/www/${restore_app_domain}/htdocs" ]; then
762
+                restore_from_dir="/root/temp${restore_app_name}/${RESTORE_SUBDIR}/www/${restore_app_domain}/htdocs"
763
+                if [ ! -d "$restore_from_dir" ]; then
757 764
                     restore_from_dir=/root/temp${restore_app_name}
758 765
                 fi
759
-                if [ -d $restore_from_dir ]; then
760
-                    if [ -d /root/temp${restore_app_name}/${RESTORE_SUBDIR}/www/${restore_app_domain}/htdocs ]; then
761
-                        rm -rf /var/www/${restore_app_domain}/htdocs
762
-                        mv $restore_from_dir /var/www/${restore_app_domain}/
766
+                if [ -d "$restore_from_dir" ]; then
767
+                    if [ -d "/root/temp${restore_app_name}/${RESTORE_SUBDIR}/www/${restore_app_domain}/htdocs" ]; then
768
+                        rm -rf "/var/www/${restore_app_domain}/htdocs"
769
+                        mv "$restore_from_dir" "/var/www/${restore_app_domain}/"
763 770
                     else
764
-                        cp -r $restore_from_dir/* /var/www/${restore_app_domain}/htdocs/
771
+                        cp -r "$restore_from_dir/*" "/var/www/${restore_app_domain}/htdocs/"
765 772
                     fi
773
+                    # shellcheck disable=SC2181
766 774
                     if [ ! "$?" = "0" ]; then
767 775
                         set_user_permissions
768 776
                         backup_unmount_drive
769 777
                         exit 78252429
770 778
                     fi
771
-                    if [ -d /etc/letsencrypt/live/${restore_app_domain} ]; then
772
-                        ln -s /etc/letsencrypt/live/${restore_app_domain}/privkey.pem /etc/ssl/private/${restore_app_domain}.key
773
-                        ln -s /etc/letsencrypt/live/${restore_app_domain}/fullchain.pem /etc/ssl/certs/${restore_app_domain}.pem
779
+                    if [ -d "/etc/letsencrypt/live/${restore_app_domain}" ]; then
780
+                        ln -s "/etc/letsencrypt/live/${restore_app_domain}/privkey.pem" "/etc/ssl/private/${restore_app_domain}.key"
781
+                        ln -s "/etc/letsencrypt/live/${restore_app_domain}/fullchain.pem" "/etc/ssl/certs/${restore_app_domain}.pem"
774 782
                     else
775 783
                         # Ensure that the bundled SSL cert is being used
776
-                        if [ -f /etc/ssl/certs/${restore_app_domain}.bundle.crt ]; then
777
-                            sed -i "s|${restore_app_domain}.crt|${restore_app_domain}.bundle.crt|g" /etc/nginx/sites-available/${restore_app_domain}
784
+                        if [ -f "/etc/ssl/certs/${restore_app_domain}.bundle.crt" ]; then
785
+                            sed -i "s|${restore_app_domain}.crt|${restore_app_domain}.bundle.crt|g" "/etc/nginx/sites-available/${restore_app_domain}"
778 786
                         fi
779 787
                     fi
780 788
                 fi
@@ -797,8 +805,7 @@ function valid_backup_destination {
797 805
     available_variants_list=()
798 806
     available_system_variants
799 807
 
800
-    item_in_array "${destination_dir}" "${available_variants_list[@]}"
801
-    if [[ $? != 0 ]]; then
808
+    if ! item_in_array "${destination_dir}" "${available_variants_list[@]}"; then
802 809
         is_valid="no"
803 810
     fi
804 811
 
@@ -806,14 +813,14 @@ function valid_backup_destination {
806 813
 }
807 814
 
808 815
 function backup_extra_directories {
809
-    if [ ! -f $BACKUP_EXTRA_DIRECTORIES ]; then
816
+    if [ ! -f "$BACKUP_EXTRA_DIRECTORIES" ]; then
810 817
         return
811 818
     fi
812 819
 
813 820
     backup_type="$1"
814 821
 
815 822
     echo $"Backing up some additional directories"
816
-    while read backup_line
823
+    while read -r backup_line
817 824
     do
818 825
         backup_dir=$(echo "$backup_line" | awk -F ',' '{print $1}' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
819 826
         if [ -d "$backup_dir" ]; then
@@ -831,7 +838,7 @@ function backup_extra_directories {
831 838
         else
832 839
             echo $"WARNING: Directory $backup_dir does not exist"
833 840
         fi
834
-    done <$BACKUP_EXTRA_DIRECTORIES
841
+    done <"$BACKUP_EXTRA_DIRECTORIES"
835 842
 }
836 843
 
837 844
 # NOTE: deliberately no exit 0