#!/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 "$@"
|