Skip to content
Snippets Groups Projects
Commit 8f298c88 authored by Bob Mottram's avatar Bob Mottram
Browse files

Link dynamic dns to the webadmin daemon

parent 07b68cd5
No related branches found
No related tags found
No related merge requests found
......@@ -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
......@@ -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
......
......@@ -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
......@@ -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>
......
<?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);
?>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment