#!/bin/sh # # Copyright (C) 2020 TDT AG # # 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") " echo "" echo "Supported ddns :" echo " service: Command for custom ddns service providers" echo "" echo "Supported ddns 'service' command :" 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 : Install custom service provider" echo " remove : 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 "$@"