#!/bin/sh # ONE.COM DDNS SCRIPT # REQUIRES CURL # $ opkg install curl # SCRIPT BY LUGICO # CONTACT: main@lugico.de [ -z "$CURL" ] && [ -z "$CURL_SSL" ] && write_log 14 "one.com communication require cURL with SSL support. Please install" [ -z "$domain" ] && write_log 14 "Service section not configured correctly! Missing 'domain'" [ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'" [ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'" . /usr/share/libubox/jshn.sh write_log 0 "one.com ddns script started" local __SUBDOMAIN __MAINDOMAIN __LOGINURL __RECORDID local __TTL=3600 COOKIEJAR=$(mktemp /tmp/one_com_cookiejar.XXXXXX) || exit 1 __SUBDOMAIN=$(echo $domain | sed -e 's/[^\.]*\.[^\.]*$//' -e 's/\.$//' ) __MAINDOMAIN=$(echo $domain | sed -e "s/${__SUBDOMAIN}\.//" ) # LOGGING IN # GET LOGIN POST URL FROM FORM __LOGINURL=$( $CURL \ -RsSL \ --stderr $ERRFILE \ -c $COOKIEJAR \ "https://www.one.com/admin/" \ | grep 'Login-form login autofill' \ | sed -e 's/.*action="//' -e 's/".*//' -e 's/\&/\&/g' \ ) # POST LOGIN DATA $CURL \ -RsSL \ --stderr $ERRFILE \ -c $COOKIEJAR \ -b $COOKIEJAR \ "${__LOGINURL}" \ -H "Content-Type: application/x-www-form-urlencoded" \ -X POST \ -d "username=${username}&password=${password}&credentialId=" \ | grep "Invalid username or password." > $DATFILE if [ "$?" == "0" ] ; then write_log 14 "Invalid credentials" return 1 fi # SETTING DOMAIN $CURL -RsSL \ --stderr $ERRFILE \ -c $COOKIEJAR \ -b $COOKIEJAR \ "https://www.one.com/admin/select-admin-domain.do?domain=${__MAINDOMAIN}" \ | grep "" > $DATFILE if [ "$?" != "0" ] ; then write_log 14 "Failed to select domain '${__MAINDOMAIN}'" return 1 fi # GETTING RECORD ID records=$( $CURL \ -RsSL \ --stderr $ERRFILE \ -c $COOKIEJAR \ -b $COOKIEJAR \ "https://www.one.com/admin/api/domains/${__MAINDOMAIN}/dns/custom_records" ) json_load "$records" if json_is_a "result" "object" && \ json_select "result" && \ json_is_a "data" "array" then json_select "data" i=1 while json_is_a ${i} "object" ; do json_select "${i}" json_select "attributes" json_get_var "prefix" "prefix" json_close_object if [ "$prefix" == "$__SUBDOMAIN" ] ; then json_get_var "__RECORDID" "id" write_log 0 "Found record id : ${__RECORDID}" break fi json_close_object i=$(($i + 1)) done fi if [ "${__RECORDID}" == "" ] ; then write_log 14 "domain record not found" return 1 fi # CREATING PATCH DATA json_init json_add_string "type" "dns_service_records" json_add_string "id" "${__RECORDID}" json_add_object "attributes" json_add_string "type" "A" json_add_string "prefix" "${__SUBDOMAIN}" json_add_string "content" "${__IP}" json_add_int "ttl" ${__TTL} patchdata=$(json_dump) # SENDING PATCH $CURL \ -RsSL \ --stderr $ERRFILE \ -c $COOKIEJAR \ -b $COOKIEJAR \ -X PATCH \ -d "$patchdata" \ -H "Content-Type: application/json" \ "https://www.one.com/admin/api/domains/${__MAINDOMAIN}/dns/custom_records/${__RECORDID}" \ | grep "priority" > $DATFILE if [ "$?" != "0" ] ; then write_log 14 "one.com gave an unexpected response" return 1 fi rm $COOKIEJAR write_log 0 "one.com ddns script finished without errors" return 0