diff --git a/src/freedombone-ddns b/src/freedombone-ddns index 89bc26f0bdd19d3e3089a186585cc6c45c762943..fb694f9db5c274bae071dd9c9c4fdc45f8e58ccb 100755 --- a/src/freedombone-ddns +++ b/src/freedombone-ddns @@ -198,6 +198,43 @@ function choose_dynamic_dns { fi } +function choose_dynamic_dns_noninteractive { + ddns="$1" + ddns_username="$2" + ddns_password="$3" + + if [ ! "$ddns" ]; then + exit 0 + fi + + DDNS_PROVIDER="$ddns" + + if [[ "$DDNS_PROVIDER" == "none" ]]; then + if [ -f /etc/systemd/system/inadyn.service ]; then + systemctl stop inadyn + systemctl disable inadyn + fi + save_configuration_values + else + if [ ! "$ddns_username" ]; then + exit 0 + fi + if [ ! "$ddns_password" ]; then + exit 0 + fi + + # shellcheck disable=SC2034 + DDNS_USERNAME="$ddns_username" + DDNS_PASSWORD="$ddns_password" + save_configuration_values + update_inadyn_config + if [ -f /etc/systemd/system/inadyn.service ]; then + systemctl enable inadyn + systemctl restart inadyn + fi + fi +} + if [ ! "$CONFIGURATION_FILE" ]; then CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg fi @@ -208,7 +245,11 @@ if [[ "$ONION_ONLY" != 'no' ]]; then exit 0 fi -choose_dynamic_dns -clear +if [ ! "$1" ]]; then + choose_dynamic_dns + clear +else + choose_dynamic_dns_noninteractive "$1" "$2" "$3" +fi exit 0 diff --git a/src/freedombone-installer b/src/freedombone-installer index 4a66bdca750a713b9e123d4857f40d6218cd5146..f478fb52c0e2557c480b3b8d21c1eb53e56dfac1 100755 --- a/src/freedombone-installer +++ b/src/freedombone-installer @@ -50,6 +50,7 @@ FIREWALL_DOMAINS=/root/${PROJECT_NAME}-firewall-domains.cfg local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local webadmin_install_dir="/var/www/${local_hostname}/htdocs/admin" +dynamic_dns_file="$webadmin_install_dir/.dynamicdns.txt" reset_file="$webadmin_install_dir/.reset.txt" shutdown_file="$webadmin_install_dir/.shutdown.txt" setup_file="$webadmin_install_dir/setup.txt" @@ -1218,6 +1219,29 @@ function regenerate_blocklist { fi } +function regenerate_dynamic_dns { + ddns="$1" + ddns_username="$2" + ddns_password="$3" + + local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local + webadmin_install_dir="/var/www/${local_hostname}/htdocs/admin" + if [ -f "$webadmin_install_dir/dynamicdns_template.html" ]; then + cp "$webadmin_install_dir/dynamicdns_template.html" "$webadmin_install_dir/dynamicdns.html" + if [[ "$ddns" == 'default@freedns.afraid.org' ]]; then + ddns='freedns' + fi + if [[ "$ddns" == 'dyn.com' ]]; then + ddns='dyn' + fi + sed -i "s|\"$ddns\"|\"$ddns\" selected|g" "$webadmin_install_dir/dynamicdns.html" + sed -i "s|DDNS_USERNAME|$ddns_username|g" "$webadmin_install_dir/dynamicdns.html" + # Note: For security don't populate the password + #sed -i "s|DDNS_PASSWORD|$ddns_password|g" "$webadmin_install_dir/dynamicdns.html" + chown www-data:www-data "$webadmin_install_dir/dynamicdns.html" + fi +} + function update_blocklist { if [ -f "$blocklist_file" ]; then @@ -1287,6 +1311,36 @@ function update_blocklist { fi } +function update_dynamic_dns { + if [ -f "$dynamic_dns_file" ]; then + ddns=$(awk -F ',' '{print $1}' < "$dynamic_dns_file") + ddns_username=$(awk -F ',' '{print $2}' < "$dynamic_dns_file") + ddns_password=$(awk -F ',' '{print $3}' < "$dynamic_dns_file") + + ddns_is_valid= + if [ "$ddns_username" ]; then + if [ "$ddns_password" ]; then + if [ ${#ddns_username} -gt 2 ]; then + if [ ${#ddns_username} -lt 512 ]; then + if [ ${#ddns_password} -gt 2 ]; then + if [ ${#ddns_password} -lt 512 ]; then + ddns_is_valid=1 + fi + fi + fi + fi + fi + fi + + if [ $ddns_is_valid ]; then + /usr/local/bin/${PROJECT_NAME}-ddns "$ddns" "$ddns_username" "$ddns_password" + regenerate_dynamic_dns "$ddns" "$ddns_username" "$ddns_password" + fi + + rm "$dynamic_dns_file" + fi +} + # If the freedombone command is already running then kill its process #shellcheck disable=SC2009 install_process=$(ps a | grep '/usr/local/bin/freedombone -c' | grep -v 'grep') @@ -1346,6 +1400,7 @@ do reset_shutdown webadmin_change_password update_blocklist + update_dynamic_dns backup_and_restore backup_and_restore_keys add_remove_users diff --git a/src/freedombone-utils-webadmin b/src/freedombone-utils-webadmin index 1b726788a6d9c6c88a669437810028c6bc84a826..277140538701cc2501c1be547b56238451c45978 100755 --- a/src/freedombone-utils-webadmin +++ b/src/freedombone-utils-webadmin @@ -668,6 +668,30 @@ function image_install_web_admin { chroot "$rootdir" systemctl enable webadmin } +function regenerate_webadmin_dynamic_dns { + read_config_param DDNS_PROVIDER + read_config_param DDNS_USERNAME + read_config_param DDNS_PASSWORD + + local_hostname=$(grep 'host-name' /etc/avahi/avahi-daemon.conf | awk -F '=' '{print $2}').local + webadmin_install_dir="/var/www/${local_hostname}/htdocs/admin" + if [ -f "$webadmin_install_dir/dynamicdns_template.html" ]; then + cp "$webadmin_install_dir/dynamicdns_template.html" "$webadmin_install_dir/dynamicdns.html" + ddns="$DDNS_PROVIDER" + if [[ "$ddns" == 'default@freedns.afraid.org' ]]; then + ddns='freedns' + fi + if [[ "$ddns" == 'dyn.com' ]]; then + ddns='dyn' + fi + sed -i "s|\"$ddns\"|\"$ddns\" selected|g" "$webadmin_install_dir/dynamicdns.html" + sed -i "s|DDNS_USERNAME|$DDNS_USERNAME|g" "$webadmin_install_dir/dynamicdns.html" + # Note: For security don't populate the password + #sed -i "s|DDNS_PASSWORD|$DDNS_PASSWORD|g" "$webadmin_install_dir/dynamicdns.html" + chown www-data:www-data "$webadmin_install_dir/dynamicdns.html" + fi +} + function install_web_admin { # This is intended as an admin web user interface # similar to Plinth or the yunohost @@ -848,6 +872,8 @@ function install_web_admin { web_admin_configure_installer_daemon regenerate_webadmin_blocklist + + regenerate_webadmin_dynamic_dns } # NOTE: deliberately no exit 0 diff --git a/webadmin/EN/dynamicdns_template.html b/webadmin/EN/dynamicdns_template.html index 47cdbec40906a71c30d5e0266fa092397eaedc59..38fbc893d50da5a0be0bed40c4da9f3f495abfd5 100644 --- a/webadmin/EN/dynamicdns_template.html +++ b/webadmin/EN/dynamicdns_template.html @@ -123,10 +123,11 @@ <p class="headertext">Dynamic DNS</p> - <form action="dunamicdns.php" method="post"> + <form action="dynamicdns.php" method="post"> <select class="ddnslist" name="dynamicdns" size="5"> - <option value="freedns.afraid.org" selected>freedns.afraid.org</option> - <option value="dyn.com">dyn.com</option> + <option value="none">none</option> + <option value="freedns" selected>freedns.afraid.org</option> + <option value="dyn">dyn.com</option> <option value="zoneedit.com">zoneedit.com</option> <option value="no-ip.com">no-ip.com</option> <option value="easydns.com">easydns.com</option> @@ -153,8 +154,8 @@ <option value="cloudxns.net">cloudxns.net</option> </select> <br><br> - Username: <input type="text" name="ddns_username"><br><br> - Password: <input type="password" name="ddns_password"><br><br><br> + Username: <input type="text" name="ddns_username" value="DDNS_USERNAME"><br><br> + Password: <input type="password" name="ddns_password" value="DDNS_PASSWORD"><br><br><br> <input type="submit" name="submitddnscancel" value="Cancel"> <input type="submit" name="submitddns" value="Continue"> </form> diff --git a/webadmin/dynamicdns.php b/webadmin/dynamicdns.php new file mode 100755 index 0000000000000000000000000000000000000000..3a95ef5d66b832ec4391b41326ed81096ef3ac10 --- /dev/null +++ b/webadmin/dynamicdns.php @@ -0,0 +1,21 @@ +<?php + +// Change dynamic DNS settings + +$output_filename = "settings.html"; + +if (isset($_POST['submitddns'])) { + $ddns = htmlspecialchars($_POST['dynamicdns']); + $ddns_username = htmlspecialchars($_POST['ddns_username']); + $ddns_password = htmlspecialchars($_POST['ddns_password']); + + $ddns_file = fopen(".dynamicdns.txt", "w") or die("Unable to create setup file"); + fwrite($ddns_file, $ddns.','.$ddns_username.','.$ddns_password); + fclose($ddns_file); +} + +$htmlfile = fopen("$output_filename", "r") or die("Unable to open $output_filename"); +echo fread($htmlfile,filesize("$output_filename")); +fclose($htmlfile); + +?>