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