Since we can also install custom ddns services, the name for the default services is not optimally chosen. To emphasize this the folder with the standard services for the package feed will be renamed to default. Signed-off-by: Florian Eckert <fe@dev.tdt.de>
172 lines
3.5 KiB
Bash
172 lines
3.5 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Copyright (C) 2020 TDT AG <development@tdt.de>
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
# See https://www.gnu.org/licenses/gpl-2.0.txt for more information.
|
|
#
|
|
|
|
. /lib/functions.sh
|
|
|
|
DDNS_PACKAGE_DIR="/usr/share/ddns"
|
|
URL="https://raw.githubusercontent.com/openwrt/packages/master/net/ddns-scripts/files"
|
|
|
|
usage() {
|
|
local code="$1"
|
|
local msg="$2"
|
|
|
|
echo "$msg"
|
|
echo ""
|
|
echo "Usage: $(basename "$0") <command> <action> <service>"
|
|
echo ""
|
|
echo "Supported ddns <command>:"
|
|
echo " service: Command for custom ddns service providers"
|
|
echo ""
|
|
echo "Supported ddns 'service' command <action>:"
|
|
echo " update: Update local custom ddns service list"
|
|
echo " list-available: List all available custom service providers"
|
|
echo " list-installed: List all installed custom service providers"
|
|
echo " install <service>: Install custom service provider"
|
|
echo " remove <service>: Remove custom service provider"
|
|
echo " purge: Remove local custom ddns services"
|
|
|
|
exit "$code"
|
|
}
|
|
|
|
action_update() {
|
|
local cacert
|
|
|
|
config_load ddns
|
|
config_get url global 'url' "${URL}${DDNS_PACKAGE_DIR}"
|
|
config_get cacert global 'cacert' "IGNORE"
|
|
url="${url}/list"
|
|
|
|
mkdir -p "${DDNS_PACKAGE_DIR}"
|
|
|
|
if [ "$cacert" = "IGNORE" ]; then
|
|
uclient-fetch \
|
|
--no-check-certificate \
|
|
"$url" \
|
|
-O "${DDNS_PACKAGE_DIR}/list"
|
|
elif [ -f "$cacert" ]; then
|
|
uclient-fetch \
|
|
--ca-certificate="${cacert}" \
|
|
"$url" \
|
|
-O "${DDNS_PACKAGE_DIR}/list"
|
|
elif [ -n "$cacert" ]; then
|
|
echo "Certification file not found ($cacert)"
|
|
exit 5
|
|
fi
|
|
}
|
|
|
|
action_list_available() {
|
|
if [ -f "${DDNS_PACKAGE_DIR}/list" ]; then
|
|
cat "${DDNS_PACKAGE_DIR}/list"
|
|
else
|
|
echo "No custom service list file found. Please download first"
|
|
exit 3
|
|
fi
|
|
}
|
|
|
|
action_list_installed() {
|
|
if [ -d "${DDNS_PACKAGE_DIR}/custom" ]; then
|
|
ls "${DDNS_PACKAGE_DIR}/custom"
|
|
else
|
|
echo "No custom services installed"
|
|
exit 4
|
|
fi
|
|
}
|
|
|
|
action_install() {
|
|
local service="$1"
|
|
|
|
local url cacert
|
|
|
|
config_load ddns
|
|
config_get url global 'url' "${URL}${DDNS_PACKAGE_DIR}/default"
|
|
config_get cacert global 'cacert' "IGNORE"
|
|
url="${url}/${service}.json"
|
|
|
|
if [ -z "$service" ]; then
|
|
usage "4" "No custom service specified"
|
|
fi
|
|
|
|
mkdir -p "${DDNS_PACKAGE_DIR}/custom"
|
|
|
|
if [ "$cacert" = "IGNORE" ]; then
|
|
uclient-fetch \
|
|
--no-check-certificate \
|
|
"${url}" \
|
|
-O "${DDNS_PACKAGE_DIR}/custom/${service}.json"
|
|
elif [ -f "$cacert" ]; then
|
|
uclient-fetch \
|
|
--ca-certifcate="${cacert}" \
|
|
"${url}" \
|
|
-O "${DDNS_PACKAGE_DIR}/custom/${service}.json"
|
|
elif [ -n "$cacert" ]; then
|
|
echo "Certification file not found ($cacert)"
|
|
exit 5
|
|
fi
|
|
}
|
|
|
|
action_remove() {
|
|
local service="$1"
|
|
if [ -z "$service" ]; then
|
|
usage "4" "No custom service specified"
|
|
fi
|
|
|
|
rm "${DDNS_PACKAGE_DIR}/custom/${service}.json"
|
|
}
|
|
|
|
action_purge() {
|
|
rm -rf "${DDNS_PACKAGE_DIR}/custom"
|
|
rm -rf "${DDNS_PACKAGE_DIR}/list"
|
|
}
|
|
|
|
sub_service() {
|
|
local action="$1"
|
|
local service="$2"
|
|
|
|
case "$action" in
|
|
update)
|
|
action_update
|
|
;;
|
|
list-available)
|
|
action_list_available
|
|
;;
|
|
list-installed)
|
|
action_list_installed
|
|
;;
|
|
purge)
|
|
action_purge
|
|
;;
|
|
install)
|
|
action_install "$service"
|
|
;;
|
|
remove)
|
|
action_remove "$service"
|
|
;;
|
|
*)
|
|
usage "2" "Action not supported"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
main() {
|
|
local cmd="$1"
|
|
local action="$2"
|
|
local service="$3"
|
|
|
|
[ "$#" -eq 0 ] && usage "1"
|
|
|
|
case "${cmd}" in
|
|
service)
|
|
sub_service "${action}" "${service}"
|
|
;;
|
|
*)
|
|
usage "1" "Command not supported"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
main "$@"
|