You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

172 lines
3.5 KiB

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