1
0
mirror of https://github.com/EV21/dynb.git synced 2025-12-26 16:39:32 +01:00

10 Commits
0.3.4 ... 0.3.5

Author SHA1 Message Date
c83b893fc8 minor: 📝 update CHANGELOG 2022-11-03 13:11:54 +01:00
c9794f7c22 minor: increase version 2022-11-03 13:03:40 +01:00
b8bbce7ec2 doc: 📝 change TTL to 60 for IPv64.net 2022-11-03 12:01:32 +01:00
bd6f1336b2 fix: delete status file after success 2022-11-03 10:44:10 +01:00
260bc7172f doc: 📝 add IPv64.net as DynDNS2 provider 2022-11-03 07:11:19 +01:00
a85b2bf911 fix: more status file issues 2022-11-02 21:21:01 +01:00
a496acbebf fix: incorrect status code handling
no persistent status file was written in case of an error as the return status code was always 0
2022-11-02 19:07:52 +01:00
c81da8846e feat: add support for IPv64.net as DynDNS2 provider 2022-11-02 18:09:20 +01:00
122e08a42a refactor: combine if statements 2022-11-02 15:03:44 +01:00
2352d655a3 refactor(extract method): read_config_file 2022-06-30 14:28:08 +02:00
3 changed files with 100 additions and 27 deletions

View File

@@ -1,6 +1,29 @@
# Changelog
## 0.3.5 (2022-11-03)
### Features
* ✨ add support for IPv64.net as DynDNS2 provider. [Eduard Veit]
### Fix
* Delete status file after success. [Eduard Veit]
* More status file issues. [Eduard Veit]
* Incorrect status code handling. [Eduard Veit]
no persistent status file was written in case of an error as the return status code was always 0
### Documentation
* 📝 change TTL to 60 for IPv64.net. [Eduard Veit]
* 📝 add IPv64.net as DynDNS2 provider. [Eduard Veit]
## 0.3.4 (2022-06-30)
### Features

View File

@@ -31,6 +31,7 @@ The following update methods are currently implemented:
| DuckDNS.org | DynDNS2 | 60 | `token` | ⛔ | ✔️ |
| dynv6.com | DynDNS2 | 60 | `token` | ✔️ | ✔️ |
| ddnss.de | DynDNS2 | 10 | update key as `token` | ⛔ | ✔️ |
| IPv64.net | DynDNS2 | 60 | `DynDNS Updatehash` as `token` | ⛔ | ✔️ |
## 📦 Requirements
@@ -153,7 +154,7 @@ services:
tty: true
environment:
- DYNB_DYN_DOMAIN=dyndns.example.com
# Providers: deSec, duckDNS, dynv6, inwx
# Providers: deSec, DuckDNS, dynv6, inwx, ddnss, ipv64
- DYNB_SERVICE_PROVIDER=desec
# Possible update methods are: dyndns, domrobot
- DYNB_UPDATE_METHOD=dyndns
@@ -175,7 +176,7 @@ services:
| variable | default value | description |
|-----------------------|-----------------|----------------------------------------------------------------------------------------------------------------|
| DYNB_DYN_DOMAIN | undefined | required; `dyndns.example.com` |
| DYNB_SERVICE_PROVIDER | undefined | required; `deSEC`, `duckdns`, `dynv6`, `inwx`, `ddnss` |
| DYNB_SERVICE_PROVIDER | undefined | required; `deSEC`, `duckdns`, `dynv6`, `inwx`, `ddnss`, `ipv64` |
| DYNB_UPDATE_METHOD | undefined | required; `dyndns` or `domrobot` (with inwx) |
| DYNB_IP_MODE | undefined | required; `4`, `6` or `64` for both |
| DYNB_USERNAME | undefined | the requirement depends on your provider and the update method |

99
dynb.sh
View File

@@ -66,7 +66,7 @@ _response=
_statusHostname=
_statusUsername=
_statusPassword=
_version=0.3.4
_version=0.3.5
_userAgent="DynB/$_version github.com/EV21/dynb"
_configFile=$HOME/.local/share/dynb/.env
_statusFile=/tmp/dynb.status
@@ -269,6 +269,7 @@ function select_update_base_url
DUCKDNS_DYNDNS_UPDATE_URL="https://www.duckdns.org/update?domains=$DYNB_DYN_DOMAIN&token=$DYNB_TOKEN&"
DYNV6_DYNDNS_UPDATE_URL="https://dynv6.com/api/update?zone=$DYNB_DYN_DOMAIN&token=$DYNB_TOKEN&"
DDNSS_DYNDNS_UPDATE_URL="https://ddnss.de/upd.php?key=$DYNB_TOKEN&host=$DYNB_DYN_DOMAIN&"
IPV64NET_DYNDNS_UPDATE_URL="https://ipv64.net/nic/update?"
case $DYNB_SERVICE_PROVIDER in
inwx* | INWX*)
@@ -293,6 +294,11 @@ function select_update_base_url
myip_str=ip
myipv6_str=ip6
;;
[Ii][Pp][Vv]64*)
dyndns_update_url="${IPV64NET_DYNDNS_UPDATE_URL}"
myip_str=ip
myipv6_str=ip6
;;
*)
errorMessage "$DYNB_SERVICE_PROVIDER is not supported"
exit 1
@@ -309,7 +315,7 @@ function send_request
--user "$DYNB_USERNAME":"$DYNB_PASSWORD" \
"${dyndns_update_url}")
analyse_response
return $?
status_code=$?
;;
deSEC* | desec* | dedyn*)
_response=$(curl --silent "$_interface_str" \
@@ -318,44 +324,64 @@ function send_request
--get --data-urlencode "hostname=$DYNB_DYN_DOMAIN" \
"${dyndns_update_url}")
analyse_response
return $?
status_code=$?
;;
[Ii][Pp][Vv]64* )
_response=$(curl --silent "$_interface_str" \
--user-agent "$_userAgent" \
--header "Authorization: Bearer $DYNB_TOKEN" \
--request POST \
--form "domain=$DYNB_DYN_DOMAIN" \
"${dyndns_update_url}")
analyse_response
status_code=$?
;;
dynv6* | duckDNS* | duckdns* | ddnss*)
_response=$(
curl --silent "$_interface_str" \
--user-agent "$_userAgent" \
"${dyndns_update_url}")
analyse_response
return $?
status_code=$?
;;
esac
return $status_code
}
function analyse_response
{
case $_response in
good* | OK* | "addresses updated" | *Updated*hostname*)
good* | OK* | "addresses updated" | *Updated*hostname* | *'"info":"good"'*)
if [[ $_response == "good 127.0.0.1" ]]; then
errorMessage "$_response: Request ignored."
return 1
else
infoMessage "The DynDNS update has been executed."
debugMessage "Response: $_response"
_errorCounter=0
return 0
fi
;;
nochg*)
*nochg*)
infoMessage "Nothing has changed, IP addresses are still up to date."
debugMessage "Response: $_response"
return 1
;;
*'Bad Request'*)
errorMessage "Bad Request."
debugMessage "Response: $_response"
return 1
;;
*'Too Many Requests'*)
errorMessage "Too Many Request."
debugMessage "Response: $_response"
return 1
;;
abuse)
errorMessage "Username is blocked due to abuse."
debugMessage "Response: $_response"
return 1
;;
*badauth* | 401)
*badauth* | 401 | *Unauthorized*)
errorMessage "Invalid token or username password combination."
debugMessage "Response: $_response"
return 1
@@ -416,18 +442,20 @@ function dynupdate
then
dyndns_update_url="${dyndns_update_url}${myip_str}=${_new_IPv4}&${myipv6_str}=${_new_IPv6}"
send_request
request_status=$?
fi
if [[ $_is_IPv4_enabled == true ]] && [[ $_is_IPv6_enabled == false ]]
then
dyndns_update_url="${dyndns_update_url}${myip_str}=${_new_IPv4}"
send_request
request_status=$?
fi
if [[ $_is_IPv4_enabled == false ]] && [[ $_is_IPv6_enabled == true ]]
then
dyndns_update_url="${dyndns_update_url}${myipv6_str}=${_new_IPv6}"
send_request
request_status=$?
fi
request_status=$?
debugMessage "Update URL was: $dyndns_update_url"
return $request_status
}
@@ -441,7 +469,7 @@ function setStatus
function checkStatus
{
case $_status in
nochg*)
*nochg*)
if [[ _errorCounter -gt 1 ]]; then
errorMessage "The update client was spamming unnecessary update requests, something might be wrong with your IP-Check site."
errorMessage "Fix your config and then delete $_statusFile or restart your docker container"
@@ -456,8 +484,8 @@ function checkStatus
fi
return 0
;;
badauth | 401)
if [[ "$_statusUsername" == "$DYNB_USERNAME" && "$_statusPassword" == "$DYNB_PASSWORD" ]]; then
*badauth* | 401 | *Unauthorized*)
if [[ "$_statusUsername" == "$DYNB_USERNAME" && ("$_statusPassword" == "$DYNB_PASSWORD" || $_statusPassword == "$DYNB_TOKEN") ]]; then
errorMessage "Invalid username password combination."
return 1
else rm "$_statusFile"
@@ -466,8 +494,7 @@ function checkStatus
;;
badagent)
errorMessage "Client is deactivated by provider."
echo "Fix your config and then manually remove $_statusFile to reset the client blockade."
echo "If it still fails file an issue at github or try another client :)"
echo "Please file an issue at GitHub or try another client :)"
return 1
;;
!donator)
@@ -482,7 +509,7 @@ function checkStatus
echo "If it still fails file an issue at github or try another client :)"
return 1
;;
911 | 5*)
911 | 5* | *'Too Many Requests'*)
delta=$(($(date +%s) - _eventTime))
if [[ $delta -lt 1800 ]]
then
@@ -492,6 +519,14 @@ function checkStatus
fi
return 0
;;
*'Bad Request'*)
if [[ "$_statusUsername" == "$DYNB_USERNAME" && ("$_statusPassword" == "$DYNB_PASSWORD" || $_statusPassword == "$DYNB_TOKEN") ]]; then
errorMessage "Bad Request: Please check your credentials, maybe your token is invalid."
return 1
else rm "$_statusFile"
fi
return 0
;;
*)
if [[ _errorCounter -gt 1 ]]
then
@@ -590,7 +625,7 @@ function handleParameters
then rm --verbose "$_statusFile"; exit 0
fi
# shellcheck disable=SC2154
if [[ $_arg_debug == "on" ]]
if [[ $_arg_debug == "on" ]] || [[ $DYNB_DEBUG == true ]]
then _debug=1
fi
# shellcheck disable=SC2154
@@ -650,9 +685,6 @@ function handleParameters
then _is_IPv6_enabled=true
fi
if [[ $DYNB_DEBUG == true ]]
then _debug=1
fi
# shellcheck disable=SC2154
if [[ -n $DYNB_IPv4_CHECK_SITE ]]
then _ipv4_checker=$DYNB_IPv4_CHECK_SITE
@@ -738,6 +770,15 @@ function doDomrobotUpdates
fi
}
function delete_status_file
{
if test -f "$_statusFile"
then
debugMessage "Delete status file with previous errors"
rm "$_statusFile"
fi
}
function doDynDNS2Updates
{
changed=0
@@ -753,14 +794,16 @@ function doDynDNS2Updates
then
debugMessage "checkStatus has no errors, try update"
if dynupdate
then debugMessage "DynDNS2 update success"
then
debugMessage "DynDNS2 update success"
delete_status_file
else
debugMessage "Save new status after dynupdate has failed"
setStatus "$_response" "$(date +%s)" $((_errorCounter += 1)) "$DYNB_DYN_DOMAIN" "${DYNB_USERNAME}" "${DYNB_PASSWORD}${DYNB_TOKEN}"
fi
else debugMessage "Skip DynDNS2 update, checkStatus fetched previous error."
fi
else debugMessage "Skip DynDNS2 update, IPs are up to date or there is a connection problem"
else debugMessage "Skip DynDNS2 update, IPs are up to date."
fi
}
@@ -813,11 +856,8 @@ function check_internet_connection
fi
}
function main
function read_config_file
{
# shellcheck disable=SC1091,SC1090
source "$(dirname "$(realpath "$0")")/dynb-parsing.sh"
# shellcheck source=.env
if test -f "$_configFile"
then
@@ -831,6 +871,15 @@ function main
source "$alternativeConfig"
fi
fi
}
function main
{
# shellcheck disable=SC1091,SC1090
source "$(dirname "$(realpath "$0")")/dynb-parsing.sh"
read_config_file
if test -f "$_statusFile"
then
debugMessage "read previous status file"