mirror of
https://github.com/aljazceru/addons.git
synced 2025-12-19 14:14:21 +01:00
125 lines
5.4 KiB
Bash
125 lines
5.4 KiB
Bash
#!/usr/bin/with-contenv bashio
|
|
# ==============================================================================
|
|
# Generate Z-Wave JS config file
|
|
# ==============================================================================
|
|
declare network_key
|
|
declare network_key_upper
|
|
declare s0_legacy_key
|
|
declare s0_legacy
|
|
declare s2_access_control
|
|
declare s2_authenticated
|
|
declare s2_unauthenticated
|
|
declare log_level
|
|
declare flush_to_disk
|
|
declare host_chassis
|
|
declare soft_reset
|
|
|
|
readonly DOCS_EXAMPLE_KEY_1="2232666D100F795E5BB17F0A1BB7A146"
|
|
readonly DOCS_EXAMPLE_KEY_2="A97D2A51A6D4022998BEFC7B5DAE8EA1"
|
|
readonly DOCS_EXAMPLE_KEY_3="309D4AAEF63EFD85967D76ECA014D1DF"
|
|
readonly DOCS_EXAMPLE_KEY_4="CF338FE0CB99549F7C0EA96308E5A403"
|
|
|
|
if bashio::config.has_value 'network_key'; then
|
|
# If both 'network_key' and 's0_legacy_key' are set and keys don't match,
|
|
# we don't know which one to pick so we have to exit. If they are both set
|
|
# and do match, we don't need to do anything
|
|
if bashio::config.has_value 's0_legacy_key'; then
|
|
network_key=$(bashio::string.upper "$(bashio::config 'network_key')")
|
|
s0_legacy_key=$(bashio::string.upper "$(bashio::config 's0_legacy_key')")
|
|
if [ "${network_key}" == "${s0_legacy_key}" ]; then
|
|
bashio::log.info "Both 'network_key' and 's0_legacy_key' are set and match. All ok."
|
|
else
|
|
bashio::log.fatal "Both 'network_key' and 's0_legacy_key' are set to different values "
|
|
bashio::log.fatal "so we are unsure which one to use. One needs to be removed from the "
|
|
bashio::log.fatal "configuration in order to start the addon."
|
|
bashio::exit.nok
|
|
fi
|
|
# If we get here, 'network_key' is set and 's0_legacy_key' is not set so we need
|
|
# to migrate the key from 'network_key' to 's0_legacy_key'
|
|
else
|
|
bashio::log.info "Migrating \"network_key\" option to \"s0_legacy_key\"..."
|
|
bashio::addon.option s0_legacy_key "$(bashio::config 'network_key')"
|
|
bashio::log.info "Flushing config to disk due to key migration..."
|
|
bashio::addon.options > "/data/options.json"
|
|
fi
|
|
fi
|
|
|
|
# Validate that no keys are using the example from the docs and generate new random
|
|
# keys for any missing keys.
|
|
for key in "s0_legacy_key" "s2_access_control_key" "s2_authenticated_key" "s2_unauthenticated_key"; do
|
|
network_key=$(bashio::config "${key}")
|
|
network_key_upper=$(bashio::string.upper "${network_key}")
|
|
if [ "${network_key_upper}" == "${DOCS_EXAMPLE_KEY_1}" ] || [ "${network_key_upper}" == "${DOCS_EXAMPLE_KEY_2}" ] || [ "${network_key_upper}" == "${DOCS_EXAMPLE_KEY_3}" ] || [ "${network_key_upper}" == "${DOCS_EXAMPLE_KEY_4}" ]; then
|
|
bashio::log.fatal
|
|
bashio::log.fatal "The add-on detected that the Z-Wave network key used"
|
|
bashio::log.fatal "is from the documented example."
|
|
bashio::log.fatal
|
|
bashio::log.fatal "Using this key is insecure, because it is publicly"
|
|
bashio::log.fatal "listed in the documentation."
|
|
bashio::log.fatal
|
|
bashio::log.fatal "Please check the add-on documentation on how to"
|
|
bashio::log.fatal "create your own, secret, \"${key}\" and replace"
|
|
bashio::log.fatal "the one you have configured."
|
|
bashio::log.fatal
|
|
bashio::log.fatal "Click on the \"Documentation\" tab in the Z-Wave JS"
|
|
bashio::log.fatal "add-on panel for more information."
|
|
bashio::log.fatal
|
|
bashio::exit.nok
|
|
elif ! bashio::var.has_value "${network_key}"; then
|
|
bashio::log.info "No ${key} is set, generating one..."
|
|
network_key="$(hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random)"
|
|
bashio::addon.option ${key} "${network_key}"
|
|
flush_to_disk=1
|
|
fi
|
|
|
|
# If `network_key` is unset, we set it to match `s0_legacy_key` for backwards compatibility
|
|
if bashio::var.equals "${key}" "s0_legacy_key" && ! bashio::config.has_value "network_key"; then
|
|
bashio::log.info "No 'network_key' detected, setting it to 's0_legacy_key' for backwards compatibility"
|
|
bashio::addon.option network_key "${network_key}"
|
|
flush_to_disk=1
|
|
fi
|
|
done
|
|
|
|
# If flush_to_disk is set, it means we have generated new key(s) and they need to get
|
|
# flushed to disk
|
|
if [[ ${flush_to_disk:+x} ]]; then
|
|
bashio::log.info "Flushing config to disk due to creation of new key(s)..."
|
|
bashio::addon.options > "/data/options.json"
|
|
fi
|
|
|
|
s0_legacy=$(bashio::config "s0_legacy_key")
|
|
s2_access_control=$(bashio::config "s2_access_control_key")
|
|
s2_authenticated=$(bashio::config "s2_authenticated_key")
|
|
s2_unauthenticated=$(bashio::config "s2_unauthenticated_key")
|
|
|
|
if ! bashio::config.has_value 'log_level'; then
|
|
log_level=$(bashio::info.logging)
|
|
bashio::log.info "No log level specified, falling back to Supervisor"
|
|
bashio::log.info "log level (${log_level})..."
|
|
else
|
|
log_level=$(bashio::config 'log_level')
|
|
fi
|
|
|
|
host_chassis=$(bashio::host.chassis)
|
|
|
|
if [ "${host_chassis}" == "vm" ]; then
|
|
soft_reset=false
|
|
bashio::log.info "Virtual Machine detected, disabling soft-reset"
|
|
else
|
|
soft_reset=true
|
|
bashio::log.info "Virtual Machine not detected, enabling soft-reset"
|
|
fi
|
|
|
|
|
|
# Generate config
|
|
bashio::var.json \
|
|
s0_legacy "${s0_legacy}" \
|
|
s2_access_control "${s2_access_control}" \
|
|
s2_authenticated "${s2_authenticated}" \
|
|
s2_unauthenticated "${s2_unauthenticated}" \
|
|
log_level "${log_level}" \
|
|
soft_reset "^${soft_reset}" \
|
|
| tempio \
|
|
-template /usr/share/tempio/zwave_config.conf \
|
|
-out /etc/zwave_config.json
|