diff --git a/src/freedombone-app-rsync b/src/freedombone-app-rsync index 20be2f513778a99e814e998b9fcd1135e47bd44d..1e18696f9220d335aafbccc5d7649648a7d1f0dd 100755 --- a/src/freedombone-app-rsync +++ b/src/freedombone-app-rsync @@ -54,6 +54,31 @@ RSYNC_MOBILE_APP_URL=https://f-droid.org/wiki/page/org.amoradi.syncopoli rsync_variables=(ONION_ONLY MY_USERNAME) +function rsync_setting_remote { + rsync_hostname="$1" + rsync_module="$2" + + # Some sanity checks to ensure that the input is valid + if [[ "$rsync_hostname" != *'.'* || "$rsync_hostname" == *'/'* || \ + "$rsync_hostname" == *'$'* || "$rsync_hostname" == *';'* || \ + "$rsync_hostname" == *'\n'* || "$rsync_module" == *'\n'* || \ + "$rsync_module" == *';'* || "$rsync_module" == *'$'* ]]; then + return + fi + + { echo '#!/bin/bash'; + echo "cd $RSYNC_DATA || exit 1"; + echo "if torsocks rsync -arm ${rsync_hostname}::${rsync_module}/ $RSYNC_DATA; then"; + echo " ${PROJECT_NAME}-notification -s 'rsync succeeded' -m 'Sync with ${rsync_hostname}::${rsync_module} succeeded'"; + echo 'else'; + echo " ${PROJECT_NAME}-notification -s 'rsync failed' -m 'Sync with ${rsync_hostname}::${rsync_module} failed'"; + echo 'fi'; + echo "chown -R rsync:rsync $RSYNC_DATA"; } > /etc/rsync/sync.sh + chmod +x /etc/rsync/sync.sh + chown rsync:rsync /etc/rsync/sync.sh + /etc/rsync/sync.sh & +} + function change_default_domain_name_rsync { new_default_domain_name="$1" # If anything references DEFAULT_DOMAIN_NAME then change it here @@ -153,15 +178,22 @@ function install_rsync { mkdir /etc/rsync fi + rsync_translated_str=$(web_admin_translate_text "Files on your local network") + { echo 'pid file = /var/run/rsyncd.pid'; echo 'lock file = /var/run/rsync.lock'; echo 'log file = /dev/null'; echo "port = $RSYNC_PORT"; + echo 'max connections = 2'; + echo 'fake super = yes'; echo ''; echo '[files]'; + echo 'hosts allow = 192.168.0.0/16;10.0.0.0/16'; + echo 'hosts deny = *'; + echo 'list = true'; echo "path = $RSYNC_DATA"; - echo 'comment = RSYNC FILES'; - echo 'read only = true'; + echo "comment = $rsync_translated_str"; + echo 'read only = false'; echo 'timeout = 300'; } > /etc/rsync/rsyncd.conf increment_app_install_progress @@ -186,7 +218,7 @@ function install_rsync { echo 'User=rsync'; echo 'Group=rsync'; echo "WorkingDirectory=$RSYNC_DATA"; - echo 'ExecStart=/usr/bin/rsync --config=/etc/rsync/rsyncd.conf --daemon'; + echo 'ExecStart=/usr/bin/rsync --config=/etc/rsync/rsyncd.conf --bwlimit=100K --daemon'; echo 'Environment=USER=rsync'; echo 'Restart=always'; echo 'StandardError=syslog'; diff --git a/webadmin/EN/settings_rsync.html b/webadmin/EN/settings_rsync.html new file mode 100644 index 0000000000000000000000000000000000000000..ce34d3a646c39cc22057b784e69e7587c6ce1e87 --- /dev/null +++ b/webadmin/EN/settings_rsync.html @@ -0,0 +1,113 @@ +<!DOCTYPE html> +<html lang="en"> + <meta charset="utf-8"> + <style> + body { + margin: 0; + font-family: Arial; + background-color: white; + color: black; + } + + * { + box-sizing: border-box; + } + + a, u { + text-decoration: none; + color: #72a7cf; + font-weight: bold; + } + + a:visited{ + color: #72a7cf; + font-weight: bold; + } + + #headerpic { + width: 60%; + height: auto; + margin-right : auto; + margin-left : auto; + min-width : 220px; + } + + .header { + text-align: center; + padding: 32px; + } + + .headertext { + color: #72a7cf; + text-align: center; + font-size: 120%; + font-weight: bold; + } + .settingtext { + text-align: center; + font-size: 100%; + } + + .row { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding: 0 4px; + } + + .column { + -ms-flex: 25%; + flex: 15%; + max-width: 25%; + padding: 0 4px; + } + + .column img { + margin-top: 8px; + vertical-align: middle; + } + + .card { + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); + max-width: 600px; + margin: auto; + text-align: center; + font-family: arial; + clear: both; + } + + .card input[type=text] { + width: 100%; + clear: both; + text-align: left; + color: black; + background-color: lightblue; + } + + </style> + <body> + + <div class="card"> + <div class="header"> + <a href="app_rsync.html" title="Go Back"><img id="headerpic" class="img-responsive" src="images/logo.png" alt="Go Back"></a> + + <p class="headertext" translate="yes">rsync</p> + + <p class="settingtext"> + <form action="settings_rsync.php" method="post"> + <p translate="yes">Source hostname</p> + <input type="text" name="rsync_hostname" translate="no" value="freedombone.net"> + <br><br> + <p translate="yes">module</p> + <input type="text" name="rsync_module" translate="no" value="images"> + <br><br> + <input type="submit" name="submitrsync" translate="yes" value="Continue" /> + </form> + </p> + + </div> + </div> + + </body> +</html> diff --git a/webadmin/settings_rsync.php b/webadmin/settings_rsync.php new file mode 100755 index 0000000000000000000000000000000000000000..33a40d273de8e89a6712944abd9a1abc4967e44f --- /dev/null +++ b/webadmin/settings_rsync.php @@ -0,0 +1,50 @@ +<?php + +// _____ _ _ +// | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___ +// | __| _| -_| -_| . | . | | . | . | | -_| +// |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___| +// +// Freedom in the Cloud +// +// rsync settings menu +// +// License +// ======= +// +// Copyright (C) 2018-2019 Bob Mottram <bob@freedombone.net> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +$output_filename = "app_rsync.html"; + +if (isset($_POST['submitrsync'])) { + $rsync_hostname = htmlspecialchars($_POST['rsync_hostname']); + if (strpos($rsync_hostname, ' ') === false) { + if (strpos($rsync_hostname, '.') === true) { + $rsync_module = htmlspecialchars($_POST['rsync_module']); + if (strpos($rsync_module, ' ') === false) { + $settings_file = fopen(".appsettings.txt", "w") or die("Unable to write to appsettings file"); + fwrite($settings_file, "rsync,remote,".$rsync_hostname.",".$rsync_module); + fclose($settings_file); + } + } + } +} + +$htmlfile = fopen("$output_filename", "r") or die("Unable to open $output_filename"); +echo fread($htmlfile,filesize("$output_filename")); +fclose($htmlfile); + +?>