Files
hasaddon/samba-backup/rootfs/scripts/config.sh
T
2023-07-23 09:37:27 -05:00

132 lines
4.6 KiB
Bash

#!/command/with-contenv bashio
# shellcheck shell=bash
# shellcheck disable=SC2034
# user input variables
declare TARGET_DIR
declare KEEP_LOCAL
declare KEEP_REMOTE
declare TRIGGER_TIME
declare TRIGGER_DAYS
declare EXCLUDE_ADDONS
declare EXCLUDE_FOLDERS
declare BACKUP_NAME
declare BACKUP_PWD
declare SKIP_PRECHECK
# smbclient command strings
declare SMB
declare ALL_SHARES
# ------------------------------------------------------------------------------
# Read and print config.
# ------------------------------------------------------------------------------
function get-config {
local host
local share
local username
local password
local workgroup
host=$(bashio::config 'host' | escape-input)
share=$(bashio::config 'share' | escape-input)
username=$(bashio::config 'username' | escape-input)
password=$(bashio::config 'password' | escape-input)
bashio::config.exists 'workgroup' && workgroup=$(bashio::config 'workgroup' | escape-input) || workgroup=""
TARGET_DIR=$(bashio::config 'target_dir')
KEEP_LOCAL=$(bashio::config 'keep_local')
KEEP_REMOTE=$(bashio::config 'keep_remote')
TRIGGER_TIME=$(bashio::config 'trigger_time')
TRIGGER_DAYS=$(bashio::config 'trigger_days')
EXCLUDE_ADDONS=$(bashio::config 'exclude_addons')
EXCLUDE_FOLDERS=$(bashio::config 'exclude_folders')
bashio::config.exists 'backup_name' && BACKUP_NAME=$(bashio::config 'backup_name') || BACKUP_NAME=""
bashio::config.exists 'backup_password' && BACKUP_PWD=$(bashio::config 'backup_password') || BACKUP_PWD=""
bashio::config.true 'skip_precheck' && SKIP_PRECHECK=true || SKIP_PRECHECK=false
if [[ -n "$username" && -n "$password" ]]; then
SMB="smbclient -U \"${username}\"%\"${password}\" \"//${host}/${share}\" 2>&1 -t 180"
ALL_SHARES="smbclient -U \"${username}\"%\"${password}\" -L \"//${host}\" 2>&1"
else
SMB="smbclient -N \"//${host}/${share}\" 2>&1 -t 180"
ALL_SHARES="smbclient -N -L \"//${host}\" 2>&1"
fi
# non-default workgroup?
[ -n "$workgroup" ] && SMB="${SMB} -W \"${workgroup}\""
[ -n "$workgroup" ] && ALL_SHARES="${ALL_SHARES} -W \"${workgroup}\""
# legacy SMB protocols allowed?
bashio::config.true 'compatibility_mode' && SMB="${SMB} --option=\"client min protocol\"=\"NT1\""
bashio::config.true 'compatibility_mode' && ALL_SHARES="${ALL_SHARES} --option=\"client min protocol\"=\"NT1\""
bashio::log.info "---------------------------------------------------"
bashio::log.info "Host/Share: ${host}/${share}"
bashio::log.info "Target directory: ${TARGET_DIR}"
bashio::log.info "Keep local/remote: ${KEEP_LOCAL}/${KEEP_REMOTE}"
bashio::log.info "Trigger time: ${TRIGGER_TIME}"
[[ "$TRIGGER_TIME" != "manual" ]] && bashio::log.info "Trigger days: $(echo "$TRIGGER_DAYS" | xargs)"
bashio::log.info "---------------------------------------------------"
return 0
}
# ------------------------------------------------------------------------------
# Escape input given by the user.
#
# Returns the escaped string on stdout
# ------------------------------------------------------------------------------
function escape-input {
local input
read -r input
# escape the evil dollar sign
input=${input//$/\\$}
echo "$input"
}
# ------------------------------------------------------------------------------
# Overwrite the backup parameters.
#
# Arguments
# $1 The json input string
# ------------------------------------------------------------------------------
function overwrite-params {
local input="$1"
local addons
local folders
local name
local password
addons=$(echo "$input" | jq '.exclude_addons[]' 2>/dev/null)
[[ "$addons" != null ]] && EXCLUDE_ADDONS="$addons"
folders=$(echo "$input" | jq '.exclude_folders[]' 2>/dev/null)
[[ "$folders" != null ]] && EXCLUDE_FOLDERS="$folders"
name=$(echo "$input" | jq -r '.backup_name')
[[ "$name" != null ]] && BACKUP_NAME="$name"
password=$(echo "$input" | jq -r '.backup_password')
[[ "$password" != null ]] && BACKUP_PWD="$password"
return 0
}
# ------------------------------------------------------------------------------
# Restore the original backup parameters.
# ------------------------------------------------------------------------------
function restore-params {
EXCLUDE_ADDONS=$(bashio::config 'exclude_addons')
EXCLUDE_FOLDERS=$(bashio::config 'exclude_folders')
bashio::config.exists 'backup_name' && BACKUP_NAME=$(bashio::config 'backup_name') || BACKUP_NAME=""
bashio::config.exists 'backup_password' && BACKUP_PWD=$(bashio::config 'backup_password') || BACKUP_PWD=""
return 0
}