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