|  | @@ -38,7 +38,7 @@ export TEXTDOMAIN=${PROJECT_NAME}-config
 | 
	
		
			
			| 38 | 38 |  export TEXTDOMAINDIR="/usr/share/locale"
 | 
	
		
			
			| 39 | 39 |  
 | 
	
		
			
			| 40 | 40 |  # Web site
 | 
	
		
			
			| 41 |  | -FREEDOMBONE_WEBSITE="https://freedombone.net or http://4fvfozz6g3zmvf76.onion"
 | 
	
		
			
			|  | 41 | +FREEDOMBONE_WEBSITE="https://freedombone.net or http://yjxlc3imv7obva4grjae6u3qw527koaytrgjgdp364hmthrst3jodiid.onion"
 | 
	
		
			
			| 42 | 42 |  
 | 
	
		
			
			| 43 | 43 |  # Minimum number of characters in a password
 | 
	
		
			
			| 44 | 44 |  MINIMUM_PASSWORD_LENGTH=$(grep 'MINIMUM_PASSWORD_LENGTH=' "/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-passwords" | head -n 1 | awk -F '=' '{print $2}')
 | 
	
	
		
			
			|  | @@ -184,7 +184,7 @@ function choose_social_instance_domain_name {
 | 
	
		
			
			| 184 | 184 |      while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ]
 | 
	
		
			
			| 185 | 185 |      do
 | 
	
		
			
			| 186 | 186 |          data=$(mktemp 2>/dev/null)
 | 
	
		
			
			| 187 |  | -        if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
 | 
	
		
			
			|  | 187 | +        if [[ "$DDNS_PROVIDER" == "default@freedns.afraid.org" ]]; then
 | 
	
		
			
			| 188 | 188 |              dialog --backtitle $"Freedombone Configuration" \
 | 
	
		
			
			| 189 | 189 |                     --title $"Instance domain" \
 | 
	
		
			
			| 190 | 190 |                     --form $"\\nEnter your instance domain name and its FreeDNS code:" 11 55 3 \
 | 
	
	
		
			
			|  | @@ -247,9 +247,9 @@ function choose_default_domain_name {
 | 
	
		
			
			| 247 | 247 |          while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ]
 | 
	
		
			
			| 248 | 248 |          do
 | 
	
		
			
			| 249 | 249 |              data=$(mktemp 2>/dev/null)
 | 
	
		
			
			| 250 |  | -            if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
 | 
	
		
			
			|  | 250 | +            if [[ "$DDNS_PROVIDER" == "default@freedns.afraid.org" ]]; then
 | 
	
		
			
			| 251 | 251 |                  dialog --backtitle $"Freedombone Configuration" \
 | 
	
		
			
			| 252 |  | -                       --title $"Your main domain name" \
 | 
	
		
			
			|  | 252 | +                       --title $"Your main domain name on FreeDNS" \
 | 
	
		
			
			| 253 | 253 |                         --form $"\nWhich domain name should your email/XMPP/IRC/Mumble be associated with?" 13 55 5 \
 | 
	
		
			
			| 254 | 254 |                         $"Domain:" 1 1 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 24 33 40 \
 | 
	
		
			
			| 255 | 255 |                         $"Code:" 2 1 "$(grep 'DEFAULT_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 24 33 255 \
 | 
	
	
		
			
			|  | @@ -320,159 +320,6 @@ function choose_default_domain_name {
 | 
	
		
			
			| 320 | 320 |      save_configuration_values
 | 
	
		
			
			| 321 | 321 |  }
 | 
	
		
			
			| 322 | 322 |  
 | 
	
		
			
			| 323 |  | -function dynamic_dns_setup {
 | 
	
		
			
			| 324 |  | -    W=(1 freedns.afraid.org
 | 
	
		
			
			| 325 |  | -       2 dyn.com
 | 
	
		
			
			| 326 |  | -       3 zoneedit.com
 | 
	
		
			
			| 327 |  | -       4 no-ip.com
 | 
	
		
			
			| 328 |  | -       5 easydns.com
 | 
	
		
			
			| 329 |  | -       6 dnsomatic.com
 | 
	
		
			
			| 330 |  | -       7 dns.he.net
 | 
	
		
			
			| 331 |  | -       8 tunnelbroker.net
 | 
	
		
			
			| 332 |  | -       9 sitelutions.com
 | 
	
		
			
			| 333 |  | -       10 dnsexit.com
 | 
	
		
			
			| 334 |  | -       11 changeip.com
 | 
	
		
			
			| 335 |  | -       12 zerigo.com
 | 
	
		
			
			| 336 |  | -       13 dhis.org
 | 
	
		
			
			| 337 |  | -       14 nsupdate.info
 | 
	
		
			
			| 338 |  | -       15 loopia.com
 | 
	
		
			
			| 339 |  | -       16 namecheap.com
 | 
	
		
			
			| 340 |  | -       17 ovh.com
 | 
	
		
			
			| 341 |  | -       18 dtdns.com
 | 
	
		
			
			| 342 |  | -       19 giradns.com
 | 
	
		
			
			| 343 |  | -       20 duiadns.net
 | 
	
		
			
			| 344 |  | -       21 ddnss.de
 | 
	
		
			
			| 345 |  | -       22 dynv6.com
 | 
	
		
			
			| 346 |  | -       23 ipv4.dynv6.com
 | 
	
		
			
			| 347 |  | -       24 spdyn.de
 | 
	
		
			
			| 348 |  | -       25 freemyip.com
 | 
	
		
			
			| 349 |  | -       26 cloudxns.net)
 | 
	
		
			
			| 350 |  | -
 | 
	
		
			
			| 351 |  | -    # shellcheck disable=SC2068
 | 
	
		
			
			| 352 |  | -    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)
 | 
	
		
			
			| 353 |  | -
 | 
	
		
			
			| 354 |  | -    if [ ! "$selection" ]; then
 | 
	
		
			
			| 355 |  | -        if [ -f /etc/systemd/system/inadyn.service ]; then
 | 
	
		
			
			| 356 |  | -            systemctl stop inadyn
 | 
	
		
			
			| 357 |  | -            systemctl disable inadyn
 | 
	
		
			
			| 358 |  | -        fi
 | 
	
		
			
			| 359 |  | -        return
 | 
	
		
			
			| 360 |  | -    fi
 | 
	
		
			
			| 361 |  | -
 | 
	
		
			
			| 362 |  | -    case $selection in
 | 
	
		
			
			| 363 |  | -        1) DDNS_PROVIDER="default@freedns.afraid.org";;
 | 
	
		
			
			| 364 |  | -        2) DDNS_PROVIDER="default@www.dyn.com";;
 | 
	
		
			
			| 365 |  | -        3) DDNS_PROVIDER="default@www.zoneedit.com";;
 | 
	
		
			
			| 366 |  | -        4) DDNS_PROVIDER="default@www.no-ip.com";;
 | 
	
		
			
			| 367 |  | -        5) DDNS_PROVIDER="default@www.easydns.com";;
 | 
	
		
			
			| 368 |  | -        6) DDNS_PROVIDER="default@www.dnsomatic.com";;
 | 
	
		
			
			| 369 |  | -        7) DDNS_PROVIDER="default@dns.he.net";;
 | 
	
		
			
			| 370 |  | -        8) DDNS_PROVIDER="default@www.tunnelbroker.net";;
 | 
	
		
			
			| 371 |  | -        9) DDNS_PROVIDER="default@www.sitelutions.com";;
 | 
	
		
			
			| 372 |  | -        10) DDNS_PROVIDER="default@www.dnsexit.com";;
 | 
	
		
			
			| 373 |  | -        11) DDNS_PROVIDER="default@www.changeip.com";;
 | 
	
		
			
			| 374 |  | -        12) DDNS_PROVIDER="default@www.zerigo.com";;
 | 
	
		
			
			| 375 |  | -        13) DDNS_PROVIDER="default@www.dhis.org";;
 | 
	
		
			
			| 376 |  | -        14) DDNS_PROVIDER="default@nsupdate.info";;
 | 
	
		
			
			| 377 |  | -        15) DDNS_PROVIDER="default@www.loopia.com";;
 | 
	
		
			
			| 378 |  | -        16) DDNS_PROVIDER="default@www.namecheap.com";;
 | 
	
		
			
			| 379 |  | -        17) DDNS_PROVIDER="default@www.ovh.com";;
 | 
	
		
			
			| 380 |  | -        18) DDNS_PROVIDER="default@www.dtdns.com";;
 | 
	
		
			
			| 381 |  | -        19) DDNS_PROVIDER="default@giradns.com";;
 | 
	
		
			
			| 382 |  | -        20) DDNS_PROVIDER="default@www.duiadns.net";;
 | 
	
		
			
			| 383 |  | -        21) DDNS_PROVIDER="default@ddnss.de";;
 | 
	
		
			
			| 384 |  | -        22) DDNS_PROVIDER="default@dynv6.com";;
 | 
	
		
			
			| 385 |  | -        23) DDNS_PROVIDER="default@ipv4.dynv6.com";;
 | 
	
		
			
			| 386 |  | -        24) DDNS_PROVIDER="default@spdyn.de";;
 | 
	
		
			
			| 387 |  | -        25) DDNS_PROVIDER="default@freemyip.com";;
 | 
	
		
			
			| 388 |  | -        26) DDNS_PROVIDER="default@www.cloudxns.net";;
 | 
	
		
			
			| 389 |  | -    esac
 | 
	
		
			
			| 390 |  | -    save_configuration_values
 | 
	
		
			
			| 391 |  | -
 | 
	
		
			
			| 392 |  | -    valid_ddns_username=
 | 
	
		
			
			| 393 |  | -    valid_ddns_password=
 | 
	
		
			
			| 394 |  | -    if [[ "$DDNS_PROVIDER" == "none" ]]; then
 | 
	
		
			
			| 395 |  | -        if [ -f /etc/systemd/system/inadyn.service ]; then
 | 
	
		
			
			| 396 |  | -            systemctl stop inadyn
 | 
	
		
			
			| 397 |  | -            systemctl disable inadyn
 | 
	
		
			
			| 398 |  | -        fi
 | 
	
		
			
			| 399 |  | -    else
 | 
	
		
			
			| 400 |  | -        while [ ! $valid_ddns_username ]
 | 
	
		
			
			| 401 |  | -        do
 | 
	
		
			
			| 402 |  | -            data=$(mktemp 2>/dev/null)
 | 
	
		
			
			| 403 |  | -            dialog --backtitle $"Freedombone Configuration" \
 | 
	
		
			
			| 404 |  | -                   --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
 | 
	
		
			
			| 405 |  | -            sel=$?
 | 
	
		
			
			| 406 |  | -            case $sel in
 | 
	
		
			
			| 407 |  | -                0)  possible_username=$(cat "$data")
 | 
	
		
			
			| 408 |  | -                    if [ "$possible_username" ]; then
 | 
	
		
			
			| 409 |  | -                        if [ ${#possible_username} -gt 1 ]; then
 | 
	
		
			
			| 410 |  | -                            valid_ddns_username=$(cat "$data")
 | 
	
		
			
			| 411 |  | -                            # shellcheck disable=SC2034
 | 
	
		
			
			| 412 |  | -                            DDNS_USERNAME="$valid_ddns_username"
 | 
	
		
			
			| 413 |  | -                            rm -f "$data"
 | 
	
		
			
			| 414 |  | -                            break;
 | 
	
		
			
			| 415 |  | -                        fi
 | 
	
		
			
			| 416 |  | -                    fi
 | 
	
		
			
			| 417 |  | -                    ;;
 | 
	
		
			
			| 418 |  | -                1) rm -f "$data"
 | 
	
		
			
			| 419 |  | -                   exit 1;;
 | 
	
		
			
			| 420 |  | -                255) rm -f "$data"
 | 
	
		
			
			| 421 |  | -                     exit 1;;
 | 
	
		
			
			| 422 |  | -            esac
 | 
	
		
			
			| 423 |  | -            rm -f "$data"
 | 
	
		
			
			| 424 |  | -        done
 | 
	
		
			
			| 425 |  | -        save_configuration_values
 | 
	
		
			
			| 426 |  | -
 | 
	
		
			
			| 427 |  | -        while [ ! $valid_ddns_password ]
 | 
	
		
			
			| 428 |  | -        do
 | 
	
		
			
			| 429 |  | -            data=$(mktemp 2>/dev/null)
 | 
	
		
			
			| 430 |  | -            dialog --backtitle $"Freedombone Configuration" \
 | 
	
		
			
			| 431 |  | -                   --clear \
 | 
	
		
			
			| 432 |  | -                   --insecure \
 | 
	
		
			
			| 433 |  | -                   --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> "$data"
 | 
	
		
			
			| 434 |  | -            sel=$?
 | 
	
		
			
			| 435 |  | -            case $sel in
 | 
	
		
			
			| 436 |  | -                0)  possible_password=$(cat "$data")
 | 
	
		
			
			| 437 |  | -                    if [ "$possible_password" ]; then
 | 
	
		
			
			| 438 |  | -                        if [ ${#possible_password} -gt 1 ]; then
 | 
	
		
			
			| 439 |  | -                            valid_ddns_password=$(cat "$data")
 | 
	
		
			
			| 440 |  | -                            DDNS_PASSWORD=$valid_ddns_password
 | 
	
		
			
			| 441 |  | -                            break;
 | 
	
		
			
			| 442 |  | -                        fi
 | 
	
		
			
			| 443 |  | -                    fi
 | 
	
		
			
			| 444 |  | -                    ;;
 | 
	
		
			
			| 445 |  | -                1) rm -f "$data"
 | 
	
		
			
			| 446 |  | -                   exit 1;;
 | 
	
		
			
			| 447 |  | -                255) rm -f "$data"
 | 
	
		
			
			| 448 |  | -                     exit 1;;
 | 
	
		
			
			| 449 |  | -            esac
 | 
	
		
			
			| 450 |  | -            rm -f "$data"
 | 
	
		
			
			| 451 |  | -            if [ ${#DDNS_PASSWORD} -lt "$MINIMUM_PASSWORD_LENGTH" ]; then
 | 
	
		
			
			| 452 |  | -                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
 | 
	
		
			
			| 453 |  | -                DDNS_PASSWORD=""
 | 
	
		
			
			| 454 |  | -            fi
 | 
	
		
			
			| 455 |  | -        done
 | 
	
		
			
			| 456 |  | -        save_configuration_values
 | 
	
		
			
			| 457 |  | -    fi
 | 
	
		
			
			| 458 |  | -}
 | 
	
		
			
			| 459 |  | -
 | 
	
		
			
			| 460 |  | -function choose_dynamic_dns {
 | 
	
		
			
			| 461 |  | -    DDNS_PROVIDER="none"
 | 
	
		
			
			| 462 |  | -
 | 
	
		
			
			| 463 |  | -    if [[ "$SYSTEM_TYPE" != "mesh"* && "$ONION_ONLY" == "no" ]]; then
 | 
	
		
			
			| 464 |  | -        dialog --title $"Dynamic DNS" \
 | 
	
		
			
			| 465 |  | -               --backtitle $"Freedombone Configuration" \
 | 
	
		
			
			| 466 |  | -               --yesno $"\\nConfigure a dynamic DNS service?\\n\\nIf it is already handled by your internet router then select 'no'." 10 50
 | 
	
		
			
			| 467 |  | -        sel=$?
 | 
	
		
			
			| 468 |  | -        case $sel in
 | 
	
		
			
			| 469 |  | -            0) dynamic_dns_setup;;
 | 
	
		
			
			| 470 |  | -            255) exit 1;;
 | 
	
		
			
			| 471 |  | -        esac
 | 
	
		
			
			| 472 |  | -    fi
 | 
	
		
			
			| 473 |  | -    save_configuration_values
 | 
	
		
			
			| 474 |  | -}
 | 
	
		
			
			| 475 |  | -
 | 
	
		
			
			| 476 | 323 |  function choose_debian_repo {
 | 
	
		
			
			| 477 | 324 |      if [[ "$MINIMAL_INSTALL" == "no" ]]; then
 | 
	
		
			
			| 478 | 325 |  
 | 
	
	
		
			
			|  | @@ -1100,7 +947,12 @@ function interactive_config {
 | 
	
		
			
			| 1100 | 947 |      choose_rng
 | 
	
		
			
			| 1101 | 948 |      choose_debian_repo
 | 
	
		
			
			| 1102 | 949 |      "${PROJECT_NAME}-wifi" --networksinteractive "$WIFI_NETWORKS_FILE"
 | 
	
		
			
			| 1103 |  | -    choose_dynamic_dns
 | 
	
		
			
			|  | 950 | +
 | 
	
		
			
			|  | 951 | +    "${PROJECT_NAME}-ddns"
 | 
	
		
			
			|  | 952 | +    read_config_param DDNS_PROVIDER
 | 
	
		
			
			|  | 953 | +    read_config_param DDNS_USERNAME
 | 
	
		
			
			|  | 954 | +    read_config_param DDNS_PASSWORD
 | 
	
		
			
			|  | 955 | +
 | 
	
		
			
			| 1104 | 956 |      choose_default_domain_name
 | 
	
		
			
			| 1105 | 957 |      choose_email_address
 | 
	
		
			
			| 1106 | 958 |      interactive_key_recovery
 |