mirror of
https://github.com/openwrt/packages.git
synced 2025-12-16 23:51:18 +00:00
ddns-scripts: add one.com provider
Signed-off-by: Luca Conte <main@lugico.de>
This commit is contained in:
142
net/ddns-scripts/files/usr/lib/ddns/update_one_com.sh
Normal file
142
net/ddns-scripts/files/usr/lib/ddns/update_one_com.sh
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user