freedombone-ddns 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #!/bin/bash
  2. # _____ _ _
  3. # | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
  4. # | __| _| -_| -_| . | . | | . | . | | -_|
  5. # |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___|
  6. #
  7. # Freedom in the Cloud
  8. #
  9. # Change dynamic dns settings
  10. #
  11. # License
  12. # =======
  13. #
  14. # Copyright (C) 2018 Bob Mottram <bob@freedombone.net>
  15. #
  16. # This program is free software: you can redistribute it and/or modify
  17. # it under the terms of the GNU Affero General Public License as published by
  18. # the Free Software Foundation, either version 3 of the License, or
  19. # (at your option) any later version.
  20. #
  21. # This program is distributed in the hope that it will be useful,
  22. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  23. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  24. # GNU Affero General Public License for more details.
  25. #
  26. # You should have received a copy of the GNU Affero General Public License
  27. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  28. PROJECT_NAME='freedombone'
  29. export TEXTDOMAIN=${PROJECT_NAME}-ddns
  30. export TEXTDOMAINDIR="/usr/share/locale"
  31. source "/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-config"
  32. function dynamic_dns_setup {
  33. DDNS_PROVIDER='none'
  34. W=(1 freedns.afraid.org
  35. 2 dyn.com
  36. 3 zoneedit.com
  37. 4 no-ip.com
  38. 5 easydns.com
  39. 6 dnsomatic.com
  40. 7 dns.he.net
  41. 8 tunnelbroker.net
  42. 9 sitelutions.com
  43. 10 dnsexit.com
  44. 11 changeip.com
  45. 12 zerigo.com
  46. 13 dhis.org
  47. 14 nsupdate.info
  48. 15 loopia.com
  49. 16 namecheap.com
  50. 17 ovh.com
  51. 18 dtdns.com
  52. 19 giradns.com
  53. 20 duiadns.net
  54. 21 ddnss.de
  55. 22 dynv6.com
  56. 23 ipv4.dynv6.com
  57. 24 spdyn.de
  58. 25 freemyip.com
  59. 26 cloudxns.net)
  60. # shellcheck disable=SC2068
  61. selection=$(dialog --backtitle $"Freedombone Configuration" --title $"Dynamic DNS" --menu $"Choose Dynamic DNS provider, or ESC for none:" 24 60 32 "${W[@]}" 3>&2 2>&1 1>&3)
  62. if [ ! "$selection" ]; then
  63. if [ -f /etc/systemd/system/inadyn.service ]; then
  64. systemctl stop inadyn
  65. systemctl disable inadyn
  66. fi
  67. return
  68. fi
  69. case $selection in
  70. 1) DDNS_PROVIDER="default@freedns.afraid.org";;
  71. 2) DDNS_PROVIDER="default@www.dyn.com";;
  72. 3) DDNS_PROVIDER="default@www.zoneedit.com";;
  73. 4) DDNS_PROVIDER="default@www.no-ip.com";;
  74. 5) DDNS_PROVIDER="default@www.easydns.com";;
  75. 6) DDNS_PROVIDER="default@www.dnsomatic.com";;
  76. 7) DDNS_PROVIDER="default@dns.he.net";;
  77. 8) DDNS_PROVIDER="default@www.tunnelbroker.net";;
  78. 9) DDNS_PROVIDER="default@www.sitelutions.com";;
  79. 10) DDNS_PROVIDER="default@www.dnsexit.com";;
  80. 11) DDNS_PROVIDER="default@www.changeip.com";;
  81. 12) DDNS_PROVIDER="default@www.zerigo.com";;
  82. 13) DDNS_PROVIDER="default@www.dhis.org";;
  83. 14) DDNS_PROVIDER="default@nsupdate.info";;
  84. 15) DDNS_PROVIDER="default@www.loopia.com";;
  85. 16) DDNS_PROVIDER="default@www.namecheap.com";;
  86. 17) DDNS_PROVIDER="default@www.ovh.com";;
  87. 18) DDNS_PROVIDER="default@www.dtdns.com";;
  88. 19) DDNS_PROVIDER="default@giradns.com";;
  89. 20) DDNS_PROVIDER="default@www.duiadns.net";;
  90. 21) DDNS_PROVIDER="default@ddnss.de";;
  91. 22) DDNS_PROVIDER="default@dynv6.com";;
  92. 23) DDNS_PROVIDER="default@ipv4.dynv6.com";;
  93. 24) DDNS_PROVIDER="default@spdyn.de";;
  94. 25) DDNS_PROVIDER="default@freemyip.com";;
  95. 26) DDNS_PROVIDER="default@www.cloudxns.net";;
  96. esac
  97. save_configuration_values
  98. valid_ddns_username=
  99. valid_ddns_password=
  100. if [[ "$DDNS_PROVIDER" == "none" ]]; then
  101. if [ -f /etc/systemd/system/inadyn.service ]; then
  102. systemctl stop inadyn
  103. systemctl disable inadyn
  104. fi
  105. else
  106. while [ ! $valid_ddns_username ]
  107. do
  108. data=$(mktemp 2>/dev/null)
  109. dialog --backtitle $"Freedombone Configuration" \
  110. --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
  111. sel=$?
  112. case $sel in
  113. 0) possible_username=$(cat "$data")
  114. if [ "$possible_username" ]; then
  115. if [ ${#possible_username} -gt 1 ]; then
  116. valid_ddns_username=$(cat "$data")
  117. # shellcheck disable=SC2034
  118. DDNS_USERNAME="$valid_ddns_username"
  119. rm -f "$data"
  120. break;
  121. fi
  122. fi
  123. ;;
  124. 1) rm -f "$data"
  125. exit 1;;
  126. 255) rm -f "$data"
  127. exit 1;;
  128. esac
  129. rm -f "$data"
  130. done
  131. save_configuration_values
  132. while [ ! $valid_ddns_password ]
  133. do
  134. data=$(mktemp 2>/dev/null)
  135. dialog --backtitle $"Freedombone Configuration" \
  136. --clear \
  137. --insecure \
  138. --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
  139. sel=$?
  140. case $sel in
  141. 0) possible_password=$(cat "$data")
  142. if [ "$possible_password" ]; then
  143. if [ ${#possible_password} -gt 1 ]; then
  144. valid_ddns_password=$(cat "$data")
  145. DDNS_PASSWORD=$valid_ddns_password
  146. break;
  147. fi
  148. fi
  149. ;;
  150. 1) rm -f "$data"
  151. exit 1;;
  152. 255) rm -f "$data"
  153. exit 1;;
  154. esac
  155. rm -f "$data"
  156. if [ ${#DDNS_PASSWORD} -lt "$MINIMUM_PASSWORD_LENGTH" ]; then
  157. dialog --title $"Password quality check" --msgbox $"The password given was too short. It must be at least $MINIMUM_PASSWORD_LENGTH characters. You may need to change your password on the dynamic DNS provider's web site." 10 40
  158. DDNS_PASSWORD=""
  159. fi
  160. done
  161. save_configuration_values
  162. fi
  163. }
  164. function choose_dynamic_dns {
  165. DDNS_PROVIDER="none"
  166. if [[ "$SYSTEM_TYPE" != "mesh"* && "$ONION_ONLY" == "no" ]]; then
  167. dialog --title $"Dynamic DNS" \
  168. --backtitle $"Freedombone Configuration" \
  169. --yesno $"\\nConfigure a dynamic DNS service?\\n\\nIf it is already handled by your internet router then select 'no'." 10 50
  170. sel=$?
  171. case $sel in
  172. 0) dynamic_dns_setup
  173. ;;
  174. 255) exit 1;;
  175. esac
  176. fi
  177. }
  178. if [ ! "$CONFIGURATION_FILE" ]; then
  179. CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg
  180. fi
  181. read_configuration_values
  182. choose_dynamic_dns
  183. clear
  184. exit 0