|
|
@ -0,0 +1,142 @@ |
|
|
|
#!/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 "<meta name=\"one.com:active-domain\" content=\"${__MAINDOMAIN}\"/>" > $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 |