freedombone-ddns 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. source "/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-dns"
  33. DDNS_PROVIDER="none"
  34. DDNS_USERNAME=
  35. DDNS_PASSWORD=
  36. function dynamic_dns_setup {
  37. DDNS_PROVIDER='none'
  38. W=(1 freedns.afraid.org
  39. 2 dyn.com
  40. 3 zoneedit.com
  41. 4 no-ip.com
  42. 5 easydns.com
  43. 6 dnsomatic.com
  44. 7 dns.he.net
  45. 8 tunnelbroker.net
  46. 9 sitelutions.com
  47. 10 dnsexit.com
  48. 11 changeip.com
  49. 12 zerigo.com
  50. 13 dhis.org
  51. 14 nsupdate.info
  52. 15 loopia.com
  53. 16 namecheap.com
  54. 17 ovh.com
  55. 18 dtdns.com
  56. 19 giradns.com
  57. 20 duiadns.net
  58. 21 ddnss.de
  59. 22 dynv6.com
  60. 23 ipv4.dynv6.com
  61. 24 spdyn.de
  62. 25 freemyip.com
  63. 26 cloudxns.net)
  64. # shellcheck disable=SC2068
  65. 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)
  66. if [ ! "$selection" ]; then
  67. if [ -f /etc/systemd/system/inadyn.service ]; then
  68. systemctl stop inadyn
  69. systemctl disable inadyn
  70. fi
  71. return
  72. fi
  73. case $selection in
  74. 1) DDNS_PROVIDER="freedns";;
  75. 2) DDNS_PROVIDER="dyn";;
  76. 3) DDNS_PROVIDER="zoneedit.com";;
  77. 4) DDNS_PROVIDER="no-ip.com";;
  78. 5) DDNS_PROVIDER="easydns.com";;
  79. 6) DDNS_PROVIDER="dnsomatic.com";;
  80. 7) DDNS_PROVIDER="dns.he.net";;
  81. 8) DDNS_PROVIDER="tunnelbroker.net";;
  82. 9) DDNS_PROVIDER="sitelutions.com";;
  83. 10) DDNS_PROVIDER="dnsexit.com";;
  84. 11) DDNS_PROVIDER="changeip.com";;
  85. 12) DDNS_PROVIDER="zerigo.com";;
  86. 13) DDNS_PROVIDER="dhis.org";;
  87. 14) DDNS_PROVIDER="nsupdate.info";;
  88. 15) DDNS_PROVIDER="loopia.com";;
  89. 16) DDNS_PROVIDER="namecheap.com";;
  90. 17) DDNS_PROVIDER="ovh.com";;
  91. 18) DDNS_PROVIDER="dtdns.com";;
  92. 19) DDNS_PROVIDER="giradns.com";;
  93. 20) DDNS_PROVIDER="duiadns.net";;
  94. 21) DDNS_PROVIDER="ddnss.de";;
  95. 22) DDNS_PROVIDER="dynv6.com";;
  96. 23) DDNS_PROVIDER="ipv4.dynv6.com";;
  97. 24) DDNS_PROVIDER="spdyn.de";;
  98. 25) DDNS_PROVIDER="freemyip.com";;
  99. 26) DDNS_PROVIDER="cloudxns.net";;
  100. esac
  101. save_configuration_values
  102. valid_ddns_username=
  103. valid_ddns_password=
  104. if [[ "$DDNS_PROVIDER" == "none" ]]; then
  105. if [ -f /etc/systemd/system/inadyn.service ]; then
  106. systemctl stop inadyn
  107. systemctl disable inadyn
  108. fi
  109. else
  110. while [ ! $valid_ddns_username ]
  111. do
  112. data=$(mktemp 2>/dev/null)
  113. dialog --backtitle $"Freedombone Configuration" \
  114. --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
  115. sel=$?
  116. case $sel in
  117. 0) possible_username=$(cat "$data")
  118. if [ "$possible_username" ]; then
  119. if [ ${#possible_username} -gt 1 ]; then
  120. valid_ddns_username=$(cat "$data")
  121. # shellcheck disable=SC2034
  122. DDNS_USERNAME="$valid_ddns_username"
  123. rm -f "$data"
  124. break;
  125. fi
  126. fi
  127. ;;
  128. 1) rm -f "$data"
  129. clear
  130. exit 1;;
  131. 255) rm -f "$data"
  132. clear
  133. exit 1;;
  134. esac
  135. rm -f "$data"
  136. done
  137. save_configuration_values
  138. while [ ! $valid_ddns_password ]
  139. do
  140. data=$(mktemp 2>/dev/null)
  141. dialog --backtitle $"Freedombone Configuration" \
  142. --clear \
  143. --insecure \
  144. --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
  145. sel=$?
  146. case $sel in
  147. 0) possible_password=$(cat "$data")
  148. if [ "$possible_password" ]; then
  149. if [ ${#possible_password} -gt 1 ]; then
  150. valid_ddns_password=$(cat "$data")
  151. DDNS_PASSWORD=$valid_ddns_password
  152. break;
  153. fi
  154. fi
  155. ;;
  156. 1) rm -f "$data"
  157. clear
  158. exit 1;;
  159. 255) rm -f "$data"
  160. clear
  161. exit 1;;
  162. esac
  163. rm -f "$data"
  164. if [ ${#DDNS_PASSWORD} -lt "$MINIMUM_PASSWORD_LENGTH" ]; then
  165. 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
  166. DDNS_PASSWORD=""
  167. fi
  168. done
  169. save_configuration_values
  170. update_inadyn_config
  171. fi
  172. }
  173. function choose_dynamic_dns {
  174. if [[ "$SYSTEM_TYPE" != "mesh"* && "$ONION_ONLY" == "no" ]]; then
  175. dialog --title $"Dynamic DNS" \
  176. --backtitle $"Freedombone Configuration" \
  177. --yesno $"\\nConfigure a dynamic DNS service?\\n\\nIf it is already handled by your internet router then select 'no'." 10 50
  178. sel=$?
  179. case $sel in
  180. 0) dynamic_dns_setup
  181. ;;
  182. 255) clear
  183. exit 1
  184. ;;
  185. esac
  186. fi
  187. }
  188. if [ ! "$CONFIGURATION_FILE" ]; then
  189. CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg
  190. fi
  191. read_configuration_values
  192. if [[ "$ONION_ONLY" != 'no' ]]; then
  193. exit 0
  194. fi
  195. choose_dynamic_dns
  196. clear
  197. exit 0