ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/external/subpack/net/ddns-scripts/files/usr/bin/ddns.sh b/external/subpack/net/ddns-scripts/files/usr/bin/ddns.sh
new file mode 100644
index 0000000..921465f
--- /dev/null
+++ b/external/subpack/net/ddns-scripts/files/usr/bin/ddns.sh
@@ -0,0 +1,172 @@
+#!/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 "$@"