From 50ab349d1b3b0e2f700806baf0a335e88f68807c Mon Sep 17 00:00:00 2001 From: Federico Frigo Date: Thu, 30 Sep 2021 11:04:57 +0100 Subject: [PATCH 01/48] Custom settings --- app/js/custom.js | 2 +- app/js/custom.min.js | 2 +- config/config.php | 6 +++--- config/defaults.json | 6 +++--- config/dhcpcd.conf | 8 ++++---- config/hostapd.conf | 9 +++++---- installers/common.sh | 2 +- installers/raspapd.service | 2 +- installers/uninstall.sh | 2 +- templates/wifi_stations.php | 29 +++++++++++++++++++++++++++++ 10 files changed, 49 insertions(+), 19 deletions(-) diff --git a/app/js/custom.js b/app/js/custom.js index da92097d..7edb4187 100644 --- a/app/js/custom.js +++ b/app/js/custom.js @@ -341,7 +341,7 @@ $(document).on("click", ".js-toggle-password", function(e) { } }); -$(document).on("keyup", ".js-validate-psk", function(e) { +$(document).on("input", ".js-validate-psk", function(e) { var field = $(e.target); var colors = field.data("colors").split(","); var target = $(field.data("target")); diff --git a/app/js/custom.min.js b/app/js/custom.min.js index 67444fb6..23a7c9b2 100644 --- a/app/js/custom.min.js +++ b/app/js/custom.min.js @@ -4,4 +4,4 @@ * Licensed under MIT (https://github.com/raspap-webgui/raspap-webgui/blob/master/LICENSE) */ -function msgShow(t,a){if(0==t)var e="success";else if(2==t||1==t)e="danger";return'"}function createNetmaskAddr(t){var a=[];for(i=0;i<4;i++){var e=Math.min(t,8);a.push(256-Math.pow(2,8-e)),t-=e}return a.join(".")}function loadSummary(a){$.post("/ajax/networking/get_ip_summary.php",{interface:a},function(t){jsonData=JSON.parse(t),console.log(jsonData),0==jsonData.return?$("#"+a+"-summary").html(jsonData.output.join("
")):2==jsonData.return&&$("#"+a+"-summary").append('")})}function getAllInterfaces(){$.get("/ajax/networking/get_all_interfaces.php",function(t){jsonData=JSON.parse(t),$.each(jsonData,function(t,a){loadSummary(a)})})}function setupTabs(){$('a[data-toggle="tab"]').on("shown.bs.tab",function(t){var a=$(t.target).attr("href");a.match("summary")||loadCurrentSettings(a.replace("#",""))})}function loadCurrentSettings(t){$.post("/ajax/networking/get_int_config.php",{interface:t},function(t){jsonData=JSON.parse(t),$.each(jsonData.output,function(t,a){var n=a.interface;$.each(a,function(t,a){switch(t){case"static":"true"==a?($("#"+n+"-static").click(),$("#"+n+"-nofailover").click()):$("#"+n+"-dhcp").click();break;case"failover":"true"===a?$("#"+n+"-failover").click():$("#"+n+"-nofailover").click();break;case"ip_address":var e=a.split("/");$("#"+n+"-ipaddress").val(e[0]),$("#"+n+"-netmask").val(createNetmaskAddr(e[1]));break;case"routers":$("#"+n+"-gateway").val(a);break;case"domain_name_server":svrsDNS=a.split(" "),$("#"+n+"-dnssvr").val(svrsDNS[0]),$("#"+n+"-dnssvralt").val(svrsDNS[1])}})})})}function saveNetworkSettings(t){var a=$("#frm-"+t).find(":input"),e={};$.each(a,function(t,a){"radio"==$(a).attr("type")?e[$(a).attr("id")]=$(a).prop("checked"):e[$(a).attr("id")]=$(a).val()}),e.interface=t,$.post("/ajax/networking/save_int_config.php",e,function(t){var a=JSON.parse(t);$("#msgNetworking").html(msgShow(a.return,a.output))})}function applyNetworkSettings(){$(this).data("int");arrFormData={generate:""},$.post("/ajax/networking/gen_int_config.php",arrFormData,function(t){console.log(t);var a=JSON.parse(t);$("#msgNetworking").html(msgShow(a.return,a.output))})}function setupBtns(){$("#btnSummaryRefresh").click(function(){getAllInterfaces()}),$(".intsave").click(function(){saveNetworkSettings($(this).data("int"))}),$(".intapply").click(function(){applyNetworkSettings()})}function setCSRFTokenHeader(t,a,e){var n=$("meta[name=csrf_token]").attr("content");/^(POST|PATCH|PUT|DELETE)$/i.test(e.type)&&a.setRequestHeader("X-CSRF-Token",n)}function contentLoaded(){switch(pageCurrent=window.location.href.split("?")[1].split("=")[1],pageCurrent=pageCurrent.replace("#",""),$("#side-menu").metisMenu(),pageCurrent){case"network_conf":getAllInterfaces(),setupTabs(),setupBtns()}}function loadWifiStations(a){return function(){var t=!0===a?"?refresh":"";$(".js-wifi-stations").addClass("loading-spinner").empty().load("/ajax/networking/wifi_stations.php"+t,function(){$(this).removeClass("loading-spinner")})}}$(document).on("click",".js-add-dhcp-static-lease",function(t){t.preventDefault();var a=$(".js-new-dhcp-static-lease"),e=$("input[name=mac]",a).val().trim(),n=$("input[name=ip]",a).val().trim();if(""!=e&&""!=n){var i=$("#js-dhcp-static-lease-row").html().replace("{{ mac }}",e).replace("{{ ip }}",n);$(".js-dhcp-static-lease-container").append(i),$("input[name=mac]",a).val(""),$("input[name=ip]",a).val("")}}),$(document).on("click",".js-remove-dhcp-static-lease",function(t){t.preventDefault(),$(this).parents(".js-dhcp-static-lease-row").remove()}),$(document).on("submit",".js-dhcp-settings-form",function(t){$(".js-add-dhcp-static-lease").trigger("click")}),$(".js-reload-wifi-stations").on("click",loadWifiStations(!0)),$(document).on("click",".js-toggle-password",function(t){var a=$(t.target),e=$(a.data("target"));e.is(":input")&&(t.preventDefault(),a.data("__toggle-with-initial")||a.data("__toggle-with-initial",a.text()),"password"===e.attr("type")?(a.text(a.data("toggle-with")),e.attr("type","text")):(a.text(a.data("__toggle-with-initial")),e.attr("type","password")))}),$(document).on("keyup",".js-validate-psk",function(t){var a=$(t.target),e=a.data("colors").split(","),n=$(a.data("target"));a.val().length<8||63'+a+""}function createNetmaskAddr(t){var a=[];for(i=0;i<4;i++){var e=Math.min(t,8);a.push(256-Math.pow(2,8-e)),t-=e}return a.join(".")}function loadSummary(a){$.post("/ajax/networking/get_ip_summary.php",{interface:a},function(t){jsonData=JSON.parse(t),console.log(jsonData),0==jsonData.return?$("#"+a+"-summary").html(jsonData.output.join("
")):2==jsonData.return&&$("#"+a+"-summary").append('")})}function getAllInterfaces(){$.get("/ajax/networking/get_all_interfaces.php",function(t){jsonData=JSON.parse(t),$.each(jsonData,function(t,a){loadSummary(a)})})}function setupTabs(){$('a[data-toggle="tab"]').on("shown.bs.tab",function(t){var a=$(t.target).attr("href");a.match("summary")||loadCurrentSettings(a.replace("#",""))})}function loadCurrentSettings(t){$.post("/ajax/networking/get_int_config.php",{interface:t},function(t){jsonData=JSON.parse(t),$.each(jsonData.output,function(t,a){var n=a.interface;$.each(a,function(t,a){switch(t){case"static":"true"==a?($("#"+n+"-static").click(),$("#"+n+"-nofailover").click()):$("#"+n+"-dhcp").click();break;case"failover":"true"===a?$("#"+n+"-failover").click():$("#"+n+"-nofailover").click();break;case"ip_address":var e=a.split("/");$("#"+n+"-ipaddress").val(e[0]),$("#"+n+"-netmask").val(createNetmaskAddr(e[1]));break;case"routers":$("#"+n+"-gateway").val(a);break;case"domain_name_server":svrsDNS=a.split(" "),$("#"+n+"-dnssvr").val(svrsDNS[0]),$("#"+n+"-dnssvralt").val(svrsDNS[1])}})})})}function saveNetworkSettings(t){var a=$("#frm-"+t).find(":input"),e={};$.each(a,function(t,a){"radio"==$(a).attr("type")?e[$(a).attr("id")]=$(a).prop("checked"):e[$(a).attr("id")]=$(a).val()}),e.interface=t,$.post("/ajax/networking/save_int_config.php",e,function(t){var a=JSON.parse(t);$("#msgNetworking").html(msgShow(a.return,a.output))})}function applyNetworkSettings(){$(this).data("int");arrFormData={generate:""},$.post("/ajax/networking/gen_int_config.php",arrFormData,function(t){console.log(t);var a=JSON.parse(t);$("#msgNetworking").html(msgShow(a.return,a.output))})}function setupBtns(){$("#btnSummaryRefresh").click(function(){getAllInterfaces()}),$(".intsave").click(function(){saveNetworkSettings($(this).data("int"))}),$(".intapply").click(function(){applyNetworkSettings()})}function setCSRFTokenHeader(t,a,e){var n=$("meta[name=csrf_token]").attr("content");/^(POST|PATCH|PUT|DELETE)$/i.test(e.type)&&a.setRequestHeader("X-CSRF-Token",n)}function contentLoaded(){switch(pageCurrent=window.location.href.split("?")[1].split("=")[1],pageCurrent=pageCurrent.replace("#",""),$("#side-menu").metisMenu(),pageCurrent){case"network_conf":getAllInterfaces(),setupTabs(),setupBtns()}}function loadWifiStations(a){return function(){var t=!0===a?"?refresh":"";$(".js-wifi-stations").addClass("loading-spinner").empty().load("/ajax/networking/wifi_stations.php"+t,function(){$(this).removeClass("loading-spinner")})}}$(document).on("click",".js-add-dhcp-static-lease",function(t){t.preventDefault();var a=$(".js-new-dhcp-static-lease"),e=$("input[name=mac]",a).val().trim(),n=$("input[name=ip]",a).val().trim();if(""!=e&&""!=n){var i=$("#js-dhcp-static-lease-row").html().replace("{{ mac }}",e).replace("{{ ip }}",n);$(".js-dhcp-static-lease-container").append(i),$("input[name=mac]",a).val(""),$("input[name=ip]",a).val("")}}),$(document).on("click",".js-remove-dhcp-static-lease",function(t){t.preventDefault(),$(this).parents(".js-dhcp-static-lease-row").remove()}),$(document).on("submit",".js-dhcp-settings-form",function(t){$(".js-add-dhcp-static-lease").trigger("click")}),$(".js-reload-wifi-stations").on("click",loadWifiStations(!0)),$(document).on("click",".js-toggle-password",function(t){var a=$(t.target),e=$(a.data("target"));e.is(":input")&&(t.preventDefault(),a.data("__toggle-with-initial")||a.data("__toggle-with-initial",a.text()),"password"===e.attr("type")?(a.text(a.data("toggle-with")),e.attr("type","text")):(a.text(a.data("__toggle-with-initial")),e.attr("type","password")))}),$(document).on("input",".js-validate-psk",function(t){var a=$(t.target),e=a.data("colors").split(","),n=$(a.data("target"));a.val().length<8||63 /dev/null; then diff --git a/installers/raspapd.service b/installers/raspapd.service index c5738465..7ec927f8 100644 --- a/installers/raspapd.service +++ b/installers/raspapd.service @@ -12,7 +12,7 @@ [Unit] Description=RaspAP Service Daemon DefaultDependencies=no -After=multi-user.target +After=network.target [Service] Type=oneshot diff --git a/installers/uninstall.sh b/installers/uninstall.sh index d0a3d9fb..4f155cac 100755 --- a/installers/uninstall.sh +++ b/installers/uninstall.sh @@ -158,7 +158,7 @@ function _restore_networking() { echo "Checking iptables rules" rules=( "-A POSTROUTING -j MASQUERADE" - "-A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE" + "-A POSTROUTING -s 192.168.200.0/24 ! -d 192.168.200.0/24 -j MASQUERADE" ) for rule in "${rules[@]}"; do if grep -- "$rule" $rulesv4 > /dev/null; then diff --git a/templates/wifi_stations.php b/templates/wifi_stations.php index 6949a51a..32cf8760 100755 --- a/templates/wifi_stations.php +++ b/templates/wifi_stations.php @@ -45,3 +45,32 @@ + +

+
+
+
+ + + +
+
+ +
+
+ +
+ +
+
+
+ +
+ " id="update" name="update" data-toggle="modal" data-target="#configureClientModal" /> +
+
+
+ + + +
From fd1c48b710bc730daefd583f3c97e2d3d434c81d Mon Sep 17 00:00:00 2001 From: Federico Frigo Date: Tue, 19 Oct 2021 18:51:44 +0200 Subject: [PATCH 02/48] Automated ssid and country code updates --- config/hostapd.conf | 2 +- installers/servicestart.sh | 64 ++++++++++++++++++++++++-------------- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/config/hostapd.conf b/config/hostapd.conf index be3f7a71..792989f5 100644 --- a/config/hostapd.conf +++ b/config/hostapd.conf @@ -12,6 +12,7 @@ interface=uap0 wpa=2 wpa_pairwise=CCMP country_code=IT +ignore_broadcast_ssid=0 ## Rapberry Pi 3 specific to on board WLAN/WiFi #ieee80211n=1 # 802.11n support (Raspberry Pi 3) #wmm_enabled=1 # QoS support (Raspberry Pi 3) @@ -22,4 +23,3 @@ country_code=IT ## RaspAP bridge AP mode (disabled by default) #bridge=br0 -ignore_broadcast_ssid=0 diff --git a/installers/servicestart.sh b/installers/servicestart.sh index 377678ca..fa0edbe4 100755 --- a/installers/servicestart.sh +++ b/installers/servicestart.sh @@ -10,27 +10,26 @@ DAEMONPATH="/lib/systemd/system/raspapd.service" OPENVPNENABLED=$(pidof openvpn | wc -l) positional=() -while [[ $# -gt 0 ]] -do -key="$1" +while [[ $# -gt 0 ]]; do + key="$1" -case $key in - -i|--interface) - interface="$2" - shift # past argument - shift # past value - ;; - -s|--seconds) - seconds="$2" - shift - shift - ;; - -a|--action) - action="$2" - shift - shift - ;; -esac + case $key in + -i | --interface) + interface="$2" + shift # past argument + shift # past value + ;; + -s | --seconds) + seconds="$2" + shift + shift + ;; + -a | --action) + action="$2" + shift + shift + ;; + esac done set -- "${positional[@]}" @@ -48,6 +47,24 @@ if [ "${action}" = "stop" ]; then exit 0 fi +HOSTAPD_CONF="/etc/hostapd/hostapd.conf" + +old_ssid=$(grep ^ssid $HOSTAPD_CONF | cut -d "=" -f 2) +new_ssid="isobox-$(cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2)" + +if [[ "$old_ssid" != "$new_ssid" ]]; then + sed -i "s/$old_ssid/$new_ssid/" $HOSTAPD_CONF + echo "Updated ssid: $new_ssid" +fi + +new_country_code=$(curl -s -H "Authorization: Bearer 9da1eb466ed052" https://ipinfo.io/json | jq -r ".country // empty") +old_country_code=$(grep ^country_code $HOSTAPD_CONF | cut -d "=" -f 2) + +if [[ ! -z "$new_country_code" ]] && [[ "$old_country_code" != "$new_country_code" ]]; then + sed -i "s/$old_country_code/$new_country_code/" $HOSTAPD_CONF + echo "Updated country code: $new_country_code" +fi + if [ -f "$DAEMONPATH" ] && [ ! -z "$interface" ]; then echo "Changing RaspAP Daemon --interface to $interface" sed -i "s/\(--interface \)[[:alnum:]]*/\1$interface/" "$DAEMONPATH" @@ -57,7 +74,7 @@ if [ -r "$CONFIGFILE" ]; then declare -A config while IFS=" = " read -r key value; do config["$key"]="$value" - done < "$CONFIGFILE" + done <"$CONFIGFILE" if [ "${config[BridgedEnable]}" = 1 ]; then if [ "${interface}" = "br0" ]; then @@ -79,7 +96,7 @@ if [ -r "$CONFIGFILE" ]; then echo "Disabling systemd-networkd" systemctl disable systemd-networkd - ip link ls up | grep -q 'br0' &> /dev/null + ip link ls up | grep -q 'br0' &>/dev/null if [ $? == 0 ]; then echo "Removing br0 interface..." ip link set down br0 @@ -89,7 +106,7 @@ if [ -r "$CONFIGFILE" ]; then if [ "${config[WifiAPEnable]}" = 1 ]; then if [ "${interface}" = "uap0" ]; then - ip link ls up | grep -q 'uap0' &> /dev/null + ip link ls up | grep -q 'uap0' &>/dev/null if [ $? == 0 ]; then echo "Removing uap0 interface..." iw dev uap0 del @@ -127,4 +144,3 @@ if [ "${config[WifiAPEnable]}" = 1 ]; then fi echo "RaspAP service start DONE" - From ec2e0af7db1a46b211c3ddc1c576e9237e3ae26b Mon Sep 17 00:00:00 2001 From: Federico Frigo Date: Tue, 19 Oct 2021 19:30:47 +0200 Subject: [PATCH 03/48] Hostname automatic update --- installers/servicestart.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/installers/servicestart.sh b/installers/servicestart.sh index fa0edbe4..c4bc1eb3 100755 --- a/installers/servicestart.sh +++ b/installers/servicestart.sh @@ -50,7 +50,8 @@ fi HOSTAPD_CONF="/etc/hostapd/hostapd.conf" old_ssid=$(grep ^ssid $HOSTAPD_CONF | cut -d "=" -f 2) -new_ssid="isobox-$(cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2)" +rpi_serial=$(cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2) +new_ssid="isobox-$rpi_serial" if [[ "$old_ssid" != "$new_ssid" ]]; then sed -i "s/$old_ssid/$new_ssid/" $HOSTAPD_CONF @@ -65,6 +66,15 @@ if [[ ! -z "$new_country_code" ]] && [[ "$old_country_code" != "$new_country_cod echo "Updated country code: $new_country_code" fi +old_hostname=$(hostname) +new_hostname=$(isobox-$rpi_serial) + +if [[ "$old_hostname" != "$new_hostname" ]]; then + echo $new_hostname >/etc/hostname + sed -i "s/$old_hostname/$new_hostname/" /etc/hosts + hostname $new_hostname +fi + if [ -f "$DAEMONPATH" ] && [ ! -z "$interface" ]; then echo "Changing RaspAP Daemon --interface to $interface" sed -i "s/\(--interface \)[[:alnum:]]*/\1$interface/" "$DAEMONPATH" From 6a08924dd19d4370bfe54d9d9a44c17487e9f2e1 Mon Sep 17 00:00:00 2001 From: Federico Frigo Date: Tue, 19 Oct 2021 20:23:19 +0200 Subject: [PATCH 04/48] servicestart.sh fixes --- installers/servicestart.sh | 57 +++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/installers/servicestart.sh b/installers/servicestart.sh index c4bc1eb3..0c3cc557 100755 --- a/installers/servicestart.sh +++ b/installers/servicestart.sh @@ -33,6 +33,35 @@ while [[ $# -gt 0 ]]; do done set -- "${positional[@]}" +HOSTAPD_CONF="/etc/hostapd/hostapd.conf" + +new_country_code=$(curl -s -H "Authorization: Bearer 9da1eb466ed052" https://ipinfo.io/json | jq -r ".country // empty") +old_country_code=$(grep ^country_code $HOSTAPD_CONF | cut -d "=" -f 2) + +if [[ ! -z "$new_country_code" ]] && [[ "$old_country_code" != "$new_country_code" ]]; then + sudo sed -i "s/country_code=$old_country_code/country_code=$new_country_code/" /etc/hostapd/hostapd.conf + echo "Updated country code: $new_country_code" +fi + +old_ssid=$(grep ^ssid $HOSTAPD_CONF | cut -d "=" -f 2) +rpi_serial=$(cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2) +new_ssid="isobox-$rpi_serial" + +if [[ "$old_ssid" != "$new_ssid" ]]; then + sed -i "s/ssid=$old_ssid/ssid=$new_ssid/" $HOSTAPD_CONF + echo "Updated ssid: $new_ssid" +fi + +old_hostname=$(hostname) +new_hostname="isobox-$rpi_serial" + +if [[ "$old_hostname" != "$new_hostname" ]]; then + echo $new_hostname >/etc/hostname + sed -i "s/$old_hostname/$new_hostname/" /etc/hosts + hostname $new_hostname + echo "Updated hostname: $new_hostname" +fi + echo "Stopping network services..." if [ $OPENVPNENABLED -eq 1 ]; then systemctl stop openvpn-client@client @@ -47,34 +76,6 @@ if [ "${action}" = "stop" ]; then exit 0 fi -HOSTAPD_CONF="/etc/hostapd/hostapd.conf" - -old_ssid=$(grep ^ssid $HOSTAPD_CONF | cut -d "=" -f 2) -rpi_serial=$(cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2) -new_ssid="isobox-$rpi_serial" - -if [[ "$old_ssid" != "$new_ssid" ]]; then - sed -i "s/$old_ssid/$new_ssid/" $HOSTAPD_CONF - echo "Updated ssid: $new_ssid" -fi - -new_country_code=$(curl -s -H "Authorization: Bearer 9da1eb466ed052" https://ipinfo.io/json | jq -r ".country // empty") -old_country_code=$(grep ^country_code $HOSTAPD_CONF | cut -d "=" -f 2) - -if [[ ! -z "$new_country_code" ]] && [[ "$old_country_code" != "$new_country_code" ]]; then - sed -i "s/$old_country_code/$new_country_code/" $HOSTAPD_CONF - echo "Updated country code: $new_country_code" -fi - -old_hostname=$(hostname) -new_hostname=$(isobox-$rpi_serial) - -if [[ "$old_hostname" != "$new_hostname" ]]; then - echo $new_hostname >/etc/hostname - sed -i "s/$old_hostname/$new_hostname/" /etc/hosts - hostname $new_hostname -fi - if [ -f "$DAEMONPATH" ] && [ ! -z "$interface" ]; then echo "Changing RaspAP Daemon --interface to $interface" sed -i "s/\(--interface \)[[:alnum:]]*/\1$interface/" "$DAEMONPATH" From 6a361b80aa8b0d3f667814a2dcde920ff62bece7 Mon Sep 17 00:00:00 2001 From: Federico Frigo Date: Sat, 23 Oct 2021 14:27:36 +0200 Subject: [PATCH 05/48] Update 50-raspap-router.conf --- config/50-raspap-router.conf | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/config/50-raspap-router.conf b/config/50-raspap-router.conf index 1c10d26f..249c7c9a 100644 --- a/config/50-raspap-router.conf +++ b/config/50-raspap-router.conf @@ -1,9 +1,8 @@ server.modules += ( - "mod_rewrite", + "mod_rewrite", ) -$HTTP["url"] =~ "^/REPLACE_ME/(?!(dist|app|ajax|config)).*" { - url.rewrite-once = ( "^/REPLACE_ME/(.*?)(\?.+)?$"=>"/REPLACE_ME/index.php/$1$2" ) - server.error-handler-404 = "/REPLACE_ME/index.php" +$HTTP["url"] =~ "^/var/www/html/(?!(dist|app|ajax|config)).*" { + url.rewrite-once = ( "^/var/www/html/(.*?)(\?.+)?$"=>"/var/www/html/index.php/$1$2" ) + server.error-handler-404 = "/var/www/html/index.php" } - From 70088732777ed2749b9ffaaee6e5cdee0b939e48 Mon Sep 17 00:00:00 2001 From: Federico Frigo Date: Sat, 23 Oct 2021 16:22:50 +0200 Subject: [PATCH 06/48] Update 50-raspap-router.conf --- config/50-raspap-router.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/50-raspap-router.conf b/config/50-raspap-router.conf index 249c7c9a..0248d545 100644 --- a/config/50-raspap-router.conf +++ b/config/50-raspap-router.conf @@ -1,8 +1,8 @@ server.modules += ( - "mod_rewrite", + "mod_rewrite", ) -$HTTP["url"] =~ "^/var/www/html/(?!(dist|app|ajax|config)).*" { - url.rewrite-once = ( "^/var/www/html/(.*?)(\?.+)?$"=>"/var/www/html/index.php/$1$2" ) - server.error-handler-404 = "/var/www/html/index.php" +$HTTP["url"] =~ "^/REPLACE_ME/(?!(dist|app|ajax|config)).*" { + url.rewrite-once = ( "^/REPLACE_ME/(.*?)(\?.+)?$"=>"/REPLACE_ME/index.php/$1$2" ) + server.error-handler-404 = "/REPLACE_ME/index.php" } From 6b276a8c4e703008a74dd04a1a30ba7d6ec4ad82 Mon Sep 17 00:00:00 2001 From: Federico Frigo Date: Sat, 23 Oct 2021 16:38:28 +0200 Subject: [PATCH 07/48] Update 50-raspap-router.conf --- config/50-raspap-router.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/50-raspap-router.conf b/config/50-raspap-router.conf index 0248d545..23c13b2d 100644 --- a/config/50-raspap-router.conf +++ b/config/50-raspap-router.conf @@ -1,8 +1,8 @@ server.modules += ( - "mod_rewrite", + "mod_rewrite", ) -$HTTP["url"] =~ "^/REPLACE_ME/(?!(dist|app|ajax|config)).*" { - url.rewrite-once = ( "^/REPLACE_ME/(.*?)(\?.+)?$"=>"/REPLACE_ME/index.php/$1$2" ) - server.error-handler-404 = "/REPLACE_ME/index.php" +$HTTP["url"] =~ "^/(?!(dist|app|ajax|config)).*" { + url.rewrite-once = ( "^/(.*?)(\?.+)?$"=>"/index.php/$1$2" ) + server.error-handler-404 = "/index.php" } From c0b0d87ff4ef9beff7776511f5b54ae1c9be9259 Mon Sep 17 00:00:00 2001 From: BANKA2017 <17263253+BANKA2017@users.noreply.github.com> Date: Sun, 20 Feb 2022 15:59:43 +0800 Subject: [PATCH 08/48] Fix: function usedMemory While language in console is not English, this function may return `nan` --- app/lib/system.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/system.php b/app/lib/system.php index 3b09fb84..ee21ad84 100644 --- a/app/lib/system.php +++ b/app/lib/system.php @@ -42,7 +42,7 @@ class Sysinfo public function usedMemory() { - $used = shell_exec("free -m | awk '/Mem:/ { total=$2 ; used=$3 } END { print used/total*100}'"); + $used = shell_exec("free -m | awk 'NR==2{ total=$2 ; used=$3 } END { print used/total*100}'"); return floor($used); } From eeaed09f51a3132662d4c42f7e7ba1825eccf5e6 Mon Sep 17 00:00:00 2001 From: Jonny1797 Date: Mon, 7 Mar 2022 17:50:10 +0100 Subject: [PATCH 09/48] Wrong assumption of default behaviour As the default behaviour is the reboot, the "yes" option should (like before) stand out. Alternatively one can make default that the device does not reboot. --- installers/common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installers/common.sh b/installers/common.sh index d43e287b..d24708d8 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -675,7 +675,7 @@ function _install_complete() { # Prompt to reboot if wired ethernet (eth0) is connected. # With default_configuration this will create an active AP on restart. if ip a | grep -q ': eth0:.*state UP'; then - echo -n "The system needs to be rebooted as a final step. Reboot now? [y/N]: " + echo -n "The system needs to be rebooted as a final step. Reboot now? [Y/n]: " read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then echo "Installation reboot aborted." From fc2637be6b0c368bcb97af4e9406ef9a20fd5b3e Mon Sep 17 00:00:00 2001 From: Flavio Capitao Date: Mon, 14 Mar 2022 11:23:54 +0100 Subject: [PATCH 10/48] fix: uninstall script default option #1140 --- installers/uninstall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installers/uninstall.sh b/installers/uninstall.sh index d0a3d9fb..06173755 100755 --- a/installers/uninstall.sh +++ b/installers/uninstall.sh @@ -202,7 +202,7 @@ function _remove_installed_packages() { fi echo -n "Remove the following installed packages? lighttpd hostapd iptables-persistent $php_package $dhcpcd_package vnstat qrencode [y/N]: " read answer - if [ "$answer" != 'n' ] && [ "$answer" != 'N' ]; then + if [ "$answer" == 'y' ] || [ "$answer" == 'Y' ]; then echo "Removing packages." sudo apt-get remove lighttpd hostapd iptables-persistent $php_package $dhcpcd_package vnstat qrencode || _install_error "Unable to remove installed packages" sudo apt-get autoremove || _install_error "Unable to run apt autoremove" From 1ed490786ea3d535b7c6565c3fef3f796ded24a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Mar 2022 19:22:59 +0000 Subject: [PATCH 11/48] Bump minimist from 1.2.5 to 1.2.6 Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9ecde714..71c854e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2757,9 +2757,9 @@ minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: brace-expansion "^1.1.7" minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + version "1.2.6" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" From 0aad7c8f0e941a7210a7489b23b6c48736a5772c Mon Sep 17 00:00:00 2001 From: billz Date: Thu, 31 Mar 2022 10:47:55 +0100 Subject: [PATCH 12/48] Fix: filter dhcdpcd.log for ad block --- includes/adblock.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/adblock.php b/includes/adblock.php index b9bcd74c..c61c25f6 100755 --- a/includes/adblock.php +++ b/includes/adblock.php @@ -78,8 +78,8 @@ function DisplayAdBlockConfig() $adblock_custom_content = file_get_contents(RASPI_ADBLOCK_LISTPATH .'custom.txt'); $adblock_log = ''; - exec('sudo chmod o+r '. RASPI_DHCPCD_LOG); - $handle = fopen("/tmp/dnsmasq.log", "r"); + exec('sudo chmod o+r '.RASPI_DHCPCD_LOG); + $handle = fopen(RASPI_DHCPCD_LOG, "r"); if ($handle) { while (($line = fgets($handle)) !== false) { if (preg_match('/(0.0.0.0)/', $line)) { From 5a7eb090e266c863550870b763f9830cd7dfc3e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 3 Apr 2022 19:15:47 +0000 Subject: [PATCH 13/48] Bump copy-props from 2.0.4 to 2.0.5 Bumps [copy-props](https://github.com/gulpjs/copy-props) from 2.0.4 to 2.0.5. - [Release notes](https://github.com/gulpjs/copy-props/releases) - [Changelog](https://github.com/gulpjs/copy-props/blob/master/CHANGELOG.md) - [Commits](https://github.com/gulpjs/copy-props/compare/2.0.4...2.0.5) --- updated-dependencies: - dependency-name: copy-props dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 71c854e0..a22d0e85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -936,12 +936,12 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= copy-props@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.4.tgz#93bb1cadfafd31da5bb8a9d4b41f471ec3a72dfe" - integrity sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A== + version "2.0.5" + resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-2.0.5.tgz#03cf9ae328d4ebb36f8f1d804448a6af9ee3f2d2" + integrity sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw== dependencies: - each-props "^1.3.0" - is-plain-object "^2.0.1" + each-props "^1.3.2" + is-plain-object "^5.0.0" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -1143,7 +1143,7 @@ duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -each-props@^1.3.0: +each-props@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.2.tgz#ea45a414d16dd5cfa419b1a81720d5ca06892333" integrity sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA== @@ -2321,6 +2321,11 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" From 4d93834e28698c4c5d59a3785de8624b44048ec2 Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Fri, 8 Apr 2022 18:37:24 +0200 Subject: [PATCH 14/48] Update BACKERS.md --- BACKERS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/BACKERS.md b/BACKERS.md index 2c5721bf..1a1159ae 100644 --- a/BACKERS.md +++ b/BACKERS.md @@ -22,6 +22,7 @@ The following features are currently available exclusively to sponsors. A tangib ✅ [WPA3-Personal AP security](https://docs.raspap.com/ap-basics/#wpa3-personal) ✅ [802.11w Protected Management Frames](https://docs.raspap.com/ap-basics/#80211w) ✅ [Printable Wi-Fi signs](https://docs.raspap.com/ap-basics/#printable-signs) + ✅ [Drag & drop dashboard widgets](https://docs.raspap.com/ap-basics/#drag-drop-widgets) ⚙️ Traffic shaping (in progress) Look for the list above to grow as we add more exclusive features. Be sure to visit this page from time to time to learn about what's new, check the [Insiders docs page](https://docs.raspap.com/insiders/) and follow [@RaspAP on Twitter](https://twitter.com/rasp_ap) to stay updated. From 55959257d97f3daaeec950afbd70c276ee021c0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Apr 2022 05:16:52 +0000 Subject: [PATCH 15/48] Bump moment from 2.24.0 to 2.29.2 Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.29.2. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.24.0...2.29.2) --- updated-dependencies: - dependency-name: moment dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a22d0e85..ea34ed15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2822,9 +2822,9 @@ mkdirp@^1.0.3: integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== moment@^2.10.2: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + version "2.29.2" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4" + integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg== ms@2.0.0: version "2.0.0" From 00fe51f0053dca778ae132cae576989ef358381b Mon Sep 17 00:00:00 2001 From: Federico Frigo Date: Sun, 10 Apr 2022 20:09:23 +0200 Subject: [PATCH 16/48] Reverting files to correct ones --- app/js/custom.js | 13 ------- app/js/custom.min.js | 2 +- config/50-raspap-router.conf | 9 +++-- config/config.php | 6 +-- config/defaults.json | 6 +-- config/dhcpcd.conf | 8 ++-- config/hostapd.conf | 9 ++--- installers/common.sh | 2 +- installers/raspapd.service | 2 +- installers/servicestart.sh | 75 ++++++++++++------------------------ installers/uninstall.sh | 2 +- templates/wifi_stations.php | 29 -------------- 12 files changed, 47 insertions(+), 116 deletions(-) diff --git a/app/js/custom.js b/app/js/custom.js index d6ed0576..0e842ebf 100644 --- a/app/js/custom.js +++ b/app/js/custom.js @@ -459,19 +459,6 @@ $(document).on("click", ".js-toggle-password", function(e) { } }); -$(document).on("input", ".js-validate-psk", function(e) { - var field = $(e.target); - var colors = field.data("colors").split(","); - var target = $(field.data("target")); - if (field.val().length < 8 || field.val().length > 63) { - field.css("backgroundColor", colors[0]); - target.attr("disabled", true); - } else { - field.css("backgroundColor", colors[1]); - target.attr("disabled", false); - } -}); - $(function() { $('#theme-select').change(function() { var theme = themes[$( "#theme-select" ).val() ]; diff --git a/app/js/custom.min.js b/app/js/custom.min.js index 23a7c9b2..67444fb6 100644 --- a/app/js/custom.min.js +++ b/app/js/custom.min.js @@ -4,4 +4,4 @@ * Licensed under MIT (https://github.com/raspap-webgui/raspap-webgui/blob/master/LICENSE) */ -function msgShow(t,a){if(0==t)var e="success";else if(2==t||1==t)e="danger";return'"}function createNetmaskAddr(t){var a=[];for(i=0;i<4;i++){var e=Math.min(t,8);a.push(256-Math.pow(2,8-e)),t-=e}return a.join(".")}function loadSummary(a){$.post("/ajax/networking/get_ip_summary.php",{interface:a},function(t){jsonData=JSON.parse(t),console.log(jsonData),0==jsonData.return?$("#"+a+"-summary").html(jsonData.output.join("
")):2==jsonData.return&&$("#"+a+"-summary").append('")})}function getAllInterfaces(){$.get("/ajax/networking/get_all_interfaces.php",function(t){jsonData=JSON.parse(t),$.each(jsonData,function(t,a){loadSummary(a)})})}function setupTabs(){$('a[data-toggle="tab"]').on("shown.bs.tab",function(t){var a=$(t.target).attr("href");a.match("summary")||loadCurrentSettings(a.replace("#",""))})}function loadCurrentSettings(t){$.post("/ajax/networking/get_int_config.php",{interface:t},function(t){jsonData=JSON.parse(t),$.each(jsonData.output,function(t,a){var n=a.interface;$.each(a,function(t,a){switch(t){case"static":"true"==a?($("#"+n+"-static").click(),$("#"+n+"-nofailover").click()):$("#"+n+"-dhcp").click();break;case"failover":"true"===a?$("#"+n+"-failover").click():$("#"+n+"-nofailover").click();break;case"ip_address":var e=a.split("/");$("#"+n+"-ipaddress").val(e[0]),$("#"+n+"-netmask").val(createNetmaskAddr(e[1]));break;case"routers":$("#"+n+"-gateway").val(a);break;case"domain_name_server":svrsDNS=a.split(" "),$("#"+n+"-dnssvr").val(svrsDNS[0]),$("#"+n+"-dnssvralt").val(svrsDNS[1])}})})})}function saveNetworkSettings(t){var a=$("#frm-"+t).find(":input"),e={};$.each(a,function(t,a){"radio"==$(a).attr("type")?e[$(a).attr("id")]=$(a).prop("checked"):e[$(a).attr("id")]=$(a).val()}),e.interface=t,$.post("/ajax/networking/save_int_config.php",e,function(t){var a=JSON.parse(t);$("#msgNetworking").html(msgShow(a.return,a.output))})}function applyNetworkSettings(){$(this).data("int");arrFormData={generate:""},$.post("/ajax/networking/gen_int_config.php",arrFormData,function(t){console.log(t);var a=JSON.parse(t);$("#msgNetworking").html(msgShow(a.return,a.output))})}function setupBtns(){$("#btnSummaryRefresh").click(function(){getAllInterfaces()}),$(".intsave").click(function(){saveNetworkSettings($(this).data("int"))}),$(".intapply").click(function(){applyNetworkSettings()})}function setCSRFTokenHeader(t,a,e){var n=$("meta[name=csrf_token]").attr("content");/^(POST|PATCH|PUT|DELETE)$/i.test(e.type)&&a.setRequestHeader("X-CSRF-Token",n)}function contentLoaded(){switch(pageCurrent=window.location.href.split("?")[1].split("=")[1],pageCurrent=pageCurrent.replace("#",""),$("#side-menu").metisMenu(),pageCurrent){case"network_conf":getAllInterfaces(),setupTabs(),setupBtns()}}function loadWifiStations(a){return function(){var t=!0===a?"?refresh":"";$(".js-wifi-stations").addClass("loading-spinner").empty().load("/ajax/networking/wifi_stations.php"+t,function(){$(this).removeClass("loading-spinner")})}}$(document).on("click",".js-add-dhcp-static-lease",function(t){t.preventDefault();var a=$(".js-new-dhcp-static-lease"),e=$("input[name=mac]",a).val().trim(),n=$("input[name=ip]",a).val().trim();if(""!=e&&""!=n){var i=$("#js-dhcp-static-lease-row").html().replace("{{ mac }}",e).replace("{{ ip }}",n);$(".js-dhcp-static-lease-container").append(i),$("input[name=mac]",a).val(""),$("input[name=ip]",a).val("")}}),$(document).on("click",".js-remove-dhcp-static-lease",function(t){t.preventDefault(),$(this).parents(".js-dhcp-static-lease-row").remove()}),$(document).on("submit",".js-dhcp-settings-form",function(t){$(".js-add-dhcp-static-lease").trigger("click")}),$(".js-reload-wifi-stations").on("click",loadWifiStations(!0)),$(document).on("click",".js-toggle-password",function(t){var a=$(t.target),e=$(a.data("target"));e.is(":input")&&(t.preventDefault(),a.data("__toggle-with-initial")||a.data("__toggle-with-initial",a.text()),"password"===e.attr("type")?(a.text(a.data("toggle-with")),e.attr("type","text")):(a.text(a.data("__toggle-with-initial")),e.attr("type","password")))}),$(document).on("input",".js-validate-psk",function(t){var a=$(t.target),e=a.data("colors").split(","),n=$(a.data("target"));a.val().length<8||63'+a+""}function createNetmaskAddr(t){var a=[];for(i=0;i<4;i++){var e=Math.min(t,8);a.push(256-Math.pow(2,8-e)),t-=e}return a.join(".")}function loadSummary(a){$.post("/ajax/networking/get_ip_summary.php",{interface:a},function(t){jsonData=JSON.parse(t),console.log(jsonData),0==jsonData.return?$("#"+a+"-summary").html(jsonData.output.join("
")):2==jsonData.return&&$("#"+a+"-summary").append('")})}function getAllInterfaces(){$.get("/ajax/networking/get_all_interfaces.php",function(t){jsonData=JSON.parse(t),$.each(jsonData,function(t,a){loadSummary(a)})})}function setupTabs(){$('a[data-toggle="tab"]').on("shown.bs.tab",function(t){var a=$(t.target).attr("href");a.match("summary")||loadCurrentSettings(a.replace("#",""))})}function loadCurrentSettings(t){$.post("/ajax/networking/get_int_config.php",{interface:t},function(t){jsonData=JSON.parse(t),$.each(jsonData.output,function(t,a){var n=a.interface;$.each(a,function(t,a){switch(t){case"static":"true"==a?($("#"+n+"-static").click(),$("#"+n+"-nofailover").click()):$("#"+n+"-dhcp").click();break;case"failover":"true"===a?$("#"+n+"-failover").click():$("#"+n+"-nofailover").click();break;case"ip_address":var e=a.split("/");$("#"+n+"-ipaddress").val(e[0]),$("#"+n+"-netmask").val(createNetmaskAddr(e[1]));break;case"routers":$("#"+n+"-gateway").val(a);break;case"domain_name_server":svrsDNS=a.split(" "),$("#"+n+"-dnssvr").val(svrsDNS[0]),$("#"+n+"-dnssvralt").val(svrsDNS[1])}})})})}function saveNetworkSettings(t){var a=$("#frm-"+t).find(":input"),e={};$.each(a,function(t,a){"radio"==$(a).attr("type")?e[$(a).attr("id")]=$(a).prop("checked"):e[$(a).attr("id")]=$(a).val()}),e.interface=t,$.post("/ajax/networking/save_int_config.php",e,function(t){var a=JSON.parse(t);$("#msgNetworking").html(msgShow(a.return,a.output))})}function applyNetworkSettings(){$(this).data("int");arrFormData={generate:""},$.post("/ajax/networking/gen_int_config.php",arrFormData,function(t){console.log(t);var a=JSON.parse(t);$("#msgNetworking").html(msgShow(a.return,a.output))})}function setupBtns(){$("#btnSummaryRefresh").click(function(){getAllInterfaces()}),$(".intsave").click(function(){saveNetworkSettings($(this).data("int"))}),$(".intapply").click(function(){applyNetworkSettings()})}function setCSRFTokenHeader(t,a,e){var n=$("meta[name=csrf_token]").attr("content");/^(POST|PATCH|PUT|DELETE)$/i.test(e.type)&&a.setRequestHeader("X-CSRF-Token",n)}function contentLoaded(){switch(pageCurrent=window.location.href.split("?")[1].split("=")[1],pageCurrent=pageCurrent.replace("#",""),$("#side-menu").metisMenu(),pageCurrent){case"network_conf":getAllInterfaces(),setupTabs(),setupBtns()}}function loadWifiStations(a){return function(){var t=!0===a?"?refresh":"";$(".js-wifi-stations").addClass("loading-spinner").empty().load("/ajax/networking/wifi_stations.php"+t,function(){$(this).removeClass("loading-spinner")})}}$(document).on("click",".js-add-dhcp-static-lease",function(t){t.preventDefault();var a=$(".js-new-dhcp-static-lease"),e=$("input[name=mac]",a).val().trim(),n=$("input[name=ip]",a).val().trim();if(""!=e&&""!=n){var i=$("#js-dhcp-static-lease-row").html().replace("{{ mac }}",e).replace("{{ ip }}",n);$(".js-dhcp-static-lease-container").append(i),$("input[name=mac]",a).val(""),$("input[name=ip]",a).val("")}}),$(document).on("click",".js-remove-dhcp-static-lease",function(t){t.preventDefault(),$(this).parents(".js-dhcp-static-lease-row").remove()}),$(document).on("submit",".js-dhcp-settings-form",function(t){$(".js-add-dhcp-static-lease").trigger("click")}),$(".js-reload-wifi-stations").on("click",loadWifiStations(!0)),$(document).on("click",".js-toggle-password",function(t){var a=$(t.target),e=$(a.data("target"));e.is(":input")&&(t.preventDefault(),a.data("__toggle-with-initial")||a.data("__toggle-with-initial",a.text()),"password"===e.attr("type")?(a.text(a.data("toggle-with")),e.attr("type","text")):(a.text(a.data("__toggle-with-initial")),e.attr("type","password")))}),$(document).on("keyup",".js-validate-psk",function(t){var a=$(t.target),e=a.data("colors").split(","),n=$(a.data("target"));a.val().length<8||63"/index.php/$1$2" ) - server.error-handler-404 = "/index.php" +$HTTP["url"] =~ "^/REPLACE_ME/(?!(dist|app|ajax|config)).*" { + url.rewrite-once = ( "^/REPLACE_ME/(.*?)(\?.+)?$"=>"/REPLACE_ME/index.php/$1$2" ) + server.error-handler-404 = "/REPLACE_ME/index.php" } + diff --git a/config/config.php b/config/config.php index 44670716..d4f9266e 100755 --- a/config/config.php +++ b/config/config.php @@ -1,6 +1,6 @@ /dev/null; then diff --git a/installers/raspapd.service b/installers/raspapd.service index 7ec927f8..c5738465 100644 --- a/installers/raspapd.service +++ b/installers/raspapd.service @@ -12,7 +12,7 @@ [Unit] Description=RaspAP Service Daemon DefaultDependencies=no -After=network.target +After=multi-user.target [Service] Type=oneshot diff --git a/installers/servicestart.sh b/installers/servicestart.sh index 0c3cc557..377678ca 100755 --- a/installers/servicestart.sh +++ b/installers/servicestart.sh @@ -10,58 +10,30 @@ DAEMONPATH="/lib/systemd/system/raspapd.service" OPENVPNENABLED=$(pidof openvpn | wc -l) positional=() -while [[ $# -gt 0 ]]; do - key="$1" +while [[ $# -gt 0 ]] +do +key="$1" - case $key in - -i | --interface) - interface="$2" - shift # past argument - shift # past value - ;; - -s | --seconds) - seconds="$2" - shift - shift - ;; - -a | --action) - action="$2" - shift - shift - ;; - esac +case $key in + -i|--interface) + interface="$2" + shift # past argument + shift # past value + ;; + -s|--seconds) + seconds="$2" + shift + shift + ;; + -a|--action) + action="$2" + shift + shift + ;; +esac done set -- "${positional[@]}" -HOSTAPD_CONF="/etc/hostapd/hostapd.conf" - -new_country_code=$(curl -s -H "Authorization: Bearer 9da1eb466ed052" https://ipinfo.io/json | jq -r ".country // empty") -old_country_code=$(grep ^country_code $HOSTAPD_CONF | cut -d "=" -f 2) - -if [[ ! -z "$new_country_code" ]] && [[ "$old_country_code" != "$new_country_code" ]]; then - sudo sed -i "s/country_code=$old_country_code/country_code=$new_country_code/" /etc/hostapd/hostapd.conf - echo "Updated country code: $new_country_code" -fi - -old_ssid=$(grep ^ssid $HOSTAPD_CONF | cut -d "=" -f 2) -rpi_serial=$(cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2) -new_ssid="isobox-$rpi_serial" - -if [[ "$old_ssid" != "$new_ssid" ]]; then - sed -i "s/ssid=$old_ssid/ssid=$new_ssid/" $HOSTAPD_CONF - echo "Updated ssid: $new_ssid" -fi - -old_hostname=$(hostname) -new_hostname="isobox-$rpi_serial" - -if [[ "$old_hostname" != "$new_hostname" ]]; then - echo $new_hostname >/etc/hostname - sed -i "s/$old_hostname/$new_hostname/" /etc/hosts - hostname $new_hostname - echo "Updated hostname: $new_hostname" -fi - echo "Stopping network services..." if [ $OPENVPNENABLED -eq 1 ]; then systemctl stop openvpn-client@client @@ -85,7 +57,7 @@ if [ -r "$CONFIGFILE" ]; then declare -A config while IFS=" = " read -r key value; do config["$key"]="$value" - done <"$CONFIGFILE" + done < "$CONFIGFILE" if [ "${config[BridgedEnable]}" = 1 ]; then if [ "${interface}" = "br0" ]; then @@ -107,7 +79,7 @@ if [ -r "$CONFIGFILE" ]; then echo "Disabling systemd-networkd" systemctl disable systemd-networkd - ip link ls up | grep -q 'br0' &>/dev/null + ip link ls up | grep -q 'br0' &> /dev/null if [ $? == 0 ]; then echo "Removing br0 interface..." ip link set down br0 @@ -117,7 +89,7 @@ if [ -r "$CONFIGFILE" ]; then if [ "${config[WifiAPEnable]}" = 1 ]; then if [ "${interface}" = "uap0" ]; then - ip link ls up | grep -q 'uap0' &>/dev/null + ip link ls up | grep -q 'uap0' &> /dev/null if [ $? == 0 ]; then echo "Removing uap0 interface..." iw dev uap0 del @@ -155,3 +127,4 @@ if [ "${config[WifiAPEnable]}" = 1 ]; then fi echo "RaspAP service start DONE" + diff --git a/installers/uninstall.sh b/installers/uninstall.sh index 56ca1d87..06173755 100755 --- a/installers/uninstall.sh +++ b/installers/uninstall.sh @@ -158,7 +158,7 @@ function _restore_networking() { echo "Checking iptables rules" rules=( "-A POSTROUTING -j MASQUERADE" - "-A POSTROUTING -s 192.168.200.0/24 ! -d 192.168.200.0/24 -j MASQUERADE" + "-A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE" ) for rule in "${rules[@]}"; do if grep -- "$rule" $rulesv4 > /dev/null; then diff --git a/templates/wifi_stations.php b/templates/wifi_stations.php index cde0bf45..9ccfa779 100755 --- a/templates/wifi_stations.php +++ b/templates/wifi_stations.php @@ -46,32 +46,3 @@ - -

-
-
-
- - - -
-
- -
-
- -
- -
-
-
- -
- " id="update" name="update" data-toggle="modal" data-target="#configureClientModal" /> -
-
-
- - - -
From 658a300d630bc40477bb1030cde42a9c39a60781 Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Tue, 12 Apr 2022 09:47:34 +0200 Subject: [PATCH 17/48] Update BACKERS.md --- BACKERS.md | 66 +++++++++++++++--------------------------------------- 1 file changed, 18 insertions(+), 48 deletions(-) diff --git a/BACKERS.md b/BACKERS.md index 1a1159ae..ced82a5d 100644 --- a/BACKERS.md +++ b/BACKERS.md @@ -1,26 +1,24 @@ -## Insiders +Insiders logo -Development of RaspAP is made possible thanks to a sponsorware release model. This means that new features are first exclusively released to sponsors as part of [**Insiders**](https://github.com/sponsors/RaspAP). Read on to learn how sponsorship works, and how easy it is to get access to Insiders. +Development of RaspAP is made possible thanks to a sponsorware release model. This means that new features are first exclusively released to sponsors as part of **Insiders**. Read on to learn how sponsorship works, and how easy it is to get access to Insiders. -Untitled - -### How sponsorship works +## How sponsorship works New features first land in **Insiders**, which means that *sponsors will have access to them immediately*. Every feature is tied to a funding goal in monthly subscriptions. When a funding goal is hit, the features that are tied to it are merged back into the [public RaspAP repository](https://github.com/RaspAP/raspap-webgui) and released for general availability. Bugfixes and minor enhancements are always released simultaneously in both editions. -Don't want to sponsor? No problem, RaspAP already has tons of features available, so chances are that most of your requirements are already satisfied. See the list of exclusive features to learn which features are currently only available to sponsors. +Don't want to sponsor? No problem, RaspAP already has tons of features available, so chances are that most of your requirements are already satisfied. See the list of **exclusive features** to learn which features are currently only available to sponsors. -### How to become a sponsor -You can [become a sponsor](https://github.com/sponsors/RaspAP) using your individual or organization's GitHub account. Just pick any tier from $10/month and complete the checkout. Then, after a few hours, you will be added as a team member to the super-secret private GitHub repository containing the Insiders edition, which has all exclusive features. In addition, you get access to Insiders-only team discussions and content. +## How to become a sponsor +You can become a sponsor using your individual or organization's GitHub account. Just pick any tier from $10/month and complete the checkout. Then, after a few hours, you will be added as a team member to the super-secret private GitHub repository containing the Insiders edition, which has all exclusive features. In addition, you get access to Insiders-only team discussions and content. -> ℹ️ **Important**: If you're sponsoring [RaspAP](https://github.com/RaspAP/sponsors) through a GitHub organization, please send a short email to [sponsors@raspap.com](mailto:sponsors@raspap.com) with the name of your organization and the account that should be added as a collaborator. +> :information_source: **Important**: If you're sponsoring [RaspAP](https://github.com/RaspAP/sponsors) through a GitHub organization, please send a short email to [sponsors@raspap.com](mailto:sponsors@raspap.com) with the name of your organization and the account that should be added as a collaborator. -### Exclusive features +## Exclusive features The following features are currently available exclusively to sponsors. A tangible side benefit of sponsorship is that Insiders are able to help steer future development of RaspAP. This is done through Insiders' access to discussions, feature requests, issues and pull requests in the private GitHub repository. ✅ [Network device management](https://docs.raspap.com/net-devices/) - ✅ [Firewall settings](https://docs.raspap.com/firewall/) + ✅ [Firewall settings](https://docs.raspap.com/firewall/) ✅ [WPA3-Personal AP security](https://docs.raspap.com/ap-basics/#wpa3-personal) - ✅ [802.11w Protected Management Frames](https://docs.raspap.com/ap-basics/#80211w) + ✅ [802.11w Protected Management Frames](https://docs.raspap.com/ap-basics/#80211w) ✅ [Printable Wi-Fi signs](https://docs.raspap.com/ap-basics/#printable-signs) ✅ [Drag & drop dashboard widgets](https://docs.raspap.com/ap-basics/#drag-drop-widgets) ⚙️ Traffic shaping (in progress) @@ -36,43 +34,15 @@ The second **Insiders Edition** includes the features listed above. ### $500 The [first Insiders Edition goal](https://docs.raspap.com/insiders/#500-1st-insiders-edition) was reached in December 2021. Thank you sponsors! -### Frequently asked questions +## Quarterly giving +Beginning in 2022, each quarter 15% of all proceeds from Insiders will be donated directly to the [Raspberry Pi Foundation](https://www.raspberrypi.org/). The Raspberry Pi Foundation is a UK-based charity that works to put the power of computing and digital making into the hands of people all over the world. -#### How do I install Insiders? -*How do I install Insiders?* +[![Get involved with the Raspberry Pi Foundation](https://img.youtube.com/vi/dEzg92g1LHw/0.jpg)](https://www.youtube.com/watch?v=dEzg92g1LHw) -Invoke the [Quick Installer](https://docs.raspap.com/quick/) with the `--insiders` switch, like so: +When you become an Insider, not only do you support development of RaspAP but you also help inspire young people by harnessing the power of computing to solve problems and express themselves creatively. -``` -curl -sL https://install.raspap.com | bash -s -- --insiders -``` +## Frequently asked questions +We've covered all you need to know [here](https://docs.raspap.com/insiders/#frequently-asked-questions). -This will automatically pull from the private Insiders repo during the installation process. - -#### Upgrading -*I have an existing RaspAP installation. How do I upgrade to Insiders?* - -Upgrading is easy. Invoke the [Quick Installer](https://docs.raspap.com/quick/) with the `--upgrade` switch, specifying the private Insiders edition, like so: - -``` -curl -sL https://install.raspap.com | bash -s -- --upgrade --insiders -``` - -If you haven't [added SSH keys to your GitHub account](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh) you will be prompted to authenticate. If so, just enter your GitHub credentials during the install: - -``` -RaspAP Install: Cloning latest files from github -Cloning into '/tmp/raspap-webgui'... -Username for 'https://github.com': octocat -Password for 'https://octocat@github.com': -``` - -> ℹ️ **Note**: your password is sent securely via SSH to GitHub. The above prompt is actually from GitHub, so the installer does _not_ know your credentials. - -#### Terms -*We're using RaspAP for a commercial project. Can we use Insiders under the same terms and conditions?* - -Yes. Whether you're an individual or a company, you may use RaspAP Insiders precisely under the same terms as RaspAP, which are defined by the GNU GPL 3.0 license. However, we kindly ask you to respect the following guidelines: - -* Please **don't distribute the source code** of Insiders. You may freely use it for public, private or commercial projects, fork it, mirror it, do whatever you want with it, but please don't release the source code, as it would counteract the sponsorware strategy. -* If you cancel your subscription, you're removed as a collaborator and will miss out on future updates of Insiders. However, you may *use the latest version* that's available to you as long as you like. Just remember that [GitHub deletes private forks](https://docs.github.com/en/github/setting-up-and-managing-your-github-user-account/removing-a-collaborator-from-a-personal-repository). +### Terms +See our [official project documentation](https://docs.raspap.com/insiders/#terms). From f0d1fe9b841bb0641f32ebb0c2254b0b0adc2a6c Mon Sep 17 00:00:00 2001 From: billz Date: Thu, 21 Apr 2022 09:52:09 +0100 Subject: [PATCH 18/48] Implement routing table raw output --- includes/internetRoute.php | 11 +++++++++++ includes/networking.php | 2 ++ locale/en_US/LC_MESSAGES/messages.mo | Bin 30851 -> 31005 bytes locale/en_US/LC_MESSAGES/messages.po | 6 ++++++ templates/networking.php | 23 +++++++++++++++++++++++ 5 files changed, 42 insertions(+) diff --git a/includes/internetRoute.php b/includes/internetRoute.php index e83dca22..f172b847 100755 --- a/includes/internetRoute.php +++ b/includes/internetRoute.php @@ -55,3 +55,14 @@ function getRouteInfo($checkAccess) return $rInfo; } +/* + * Fetches raw output of ip route + * + * @return string + */ +function getRouteInfoRaw() +{ + exec('ip route list', $routes); + return $routes; +} + diff --git a/includes/networking.php b/includes/networking.php index ac5d39bc..345ca14e 100755 --- a/includes/networking.php +++ b/includes/networking.php @@ -14,6 +14,7 @@ function DisplayNetworkingConfig() exec("ls /sys/class/net | grep -v lo", $interfaces); $routeInfo = getRouteInfo(true); + $routeInfoRaw = getRouteInfoRaw(); $arrHostapdConf = parse_ini_file(RASPI_CONFIG.'/hostapd.ini'); $bridgedEnabled = $arrHostapdConf['BridgedEnable']; @@ -21,6 +22,7 @@ function DisplayNetworkingConfig() "status", "interfaces", "routeInfo", + "routeInfoRaw", "bridgedEnabled") ); } diff --git a/locale/en_US/LC_MESSAGES/messages.mo b/locale/en_US/LC_MESSAGES/messages.mo index 84b77220b4b858a61a67557f3c256c36e87886af..3433cbf6ee28d819ec2cb9cac01e5a2ec37f3f59 100644 GIT binary patch delta 8622 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 Z{BePqTV7Ja&8BSL>^XC$7MSum=06c%v>E^a delta 8489 zcmYk>33v|I9>?($i9{qK36dZr)@;-kYwU^G6T~jI+Jgv51i@=bl`c_K(W*B)w;&Q*gcaG=jJkQ_foHH|L`Jb6d(!PDiWA1Ga*U!OTOAW_- z4`aeH-QO6$V#cftQ>!uGL>d!~-(n`-!2ldu#Tbev3%SKC!cbg=C2+f~e~w+KpTtzG zUe%aj%t1e6T;@dz6=_(4p11|eVG*jsZ_x*T#SpxP8o*RDCJ1~n2`gd*4naCLv#>0_ zf~9Z`*1#>O1sumv#y1x!RHETAY9bY?J2pZM*aMZBF<1fTS=XRC+J&0vLF)x9PW_QR z@4=|0sRyDK5{b${wAvZpBv44f&Zw2WX?+*Hsc%N5xCm?F9@~D!w%d3XYqx|AsA!v3g^GLWpB**E~#VsX@iA-z#6@<*jS z0+pF~)B+Px1Ad9xvcsqaor~tQW^{uFAAD?2c*Ph~i+T`hPg|m{8-$E)GBFU}z+_yH z+M=7N1^C4}6A496>a|b{t&5s)0&1ddVws*Vh2HjpA*hFMENZ~nSb&Sr8$;rp^Odjx z^#-W+QRs)6SRSV#yJ22OO>`%gz=KFv<`^ooPhAw0x)7GDmBe6W%tGC;(AJk@B=sGr ziJd~F@+#`#dx%PTaBXKIRZvfTZLEh0XgrJ=kGT{xpEG6~x-L@aLt$ARV>;q3?2Aq7 z8q)+9TMyzy>R$Awt(uIQ$V?2vLexrEqaMPosFfZ@E#v_zvmQK&T5u?mDVK?*5JW=~ zYT(|e3~WI^Jc3%`kEoR0K|K?`WRynov5H#Bn$g^H5uK4Yk#Opcg*G5Ivqx z?TL_hXMjiy=7PqknRmiSOhc_a2i4(p)QaY!23&#uxYoKAYf|5hn(!rS@rF*l2G(PI z)6O>Jp;EUDwX!1Qt7(p+W_}OL;S90ZTmzlLw!DKK`SvD z*P%=A^$`jh;5O>@c!avpqp{O*NmR#GP%CYKT3JifibtR(KFOXhL_G^DQ1`uun$RxP z#1Elf%QKD1zxMbX4e~eC>+=_Cpdg+=wTGip9&PJ&P+OFMWibV{HN!9j$D*#EgBo}N zy0-}3TZH+%&Vz0K$x{QYJj%Lj|*Ox z_b{LO7Ss>7xCH0^ju=V32WnhbHU+)+^H3@K9yQ=e)QZldCUzUMu~>6w1(Q)LoQWFX zWz@5?5p~}dRDZisnfwYz;Az|5s)f7VWs)gqCH<`#&IvOOwbDY=)4Bwe+FeK=<^U=q zJ}sSxED&|RD#l=4jKlu+{5;gemZP>{JqGLj-$Fqv{sJ|T!`KVYVk9UHdg z8aN-7fdW*=i%|Ek###6Qs^5C8oe4HaO)v%Zwxy%{=l@6wIx*Q=fZEH&sMM`O-LMVy zI_*MTe*`taPpFApK~3x)YC``*wfnbmERWjrnyCAlqDuoMQHaHE7>@bY<)~DBgxbr` zP#x?;eTYtCdHmhB`?Pfiu7H|w4D!I62AG25F&THECg_<+{>hRFPBf-9_P~y~1c%~T z?24_DoZn<##dg$>V*ysAl7_2s5Z*%#l*TC8_zo&#A?+QbQ5kK9nm|f>m-G4zq(OT( z36+sKSOE*MI&MUDbOe=&Ur;H$g37=h)P4RP?Dqn7U2W8s#G^9S0@ZIC>U^e)LVXIk zSQ9s3D1L{U&=vH-zt9Vxq6YFJObO96hn>lUXIGZYTI6fB*A=% zT3B!o$BL+juR6Mv;y4O=_?p-ggHi1xQ5|QaR*;XH`7&&e?_+(ukD5pf@1mZ8rdSda zF%MHvncI)L?kK9C^J(N?Pwn3{48ZW7&I+ekXJRnz1y~lBp;EjVmAOw*119jj4#IY* ziT6PbG#s^n9NRt}Yf)c-+S2X4=tUQvpdkt`V;~0fcD_^*s4wD3)C%UJCbAIqP_0F+ zbOUN@itPDMP!l_1&!56_)GwgM`x^_;*VV__i$c@|OR)iNvhC+k17Ak>hX(bq`S*1u zS|7Eyi5QDrFa+~ZnJdI(T!WSID(ZTleooyLNFkDjI;fd-L#1*EhTPo5XPWZ+77jnEL7&EqE@^R%i}w!`*)!RK7y4oYOu4AWOV=i--CiumVpsC z8+G9tEQ5Pc6FP?4>x-xf-$K1cLx(tfJsR~ToP_Qzu2PtUf zH&7kkL#^l$YQUhO&Ql$3jX}MxjW7ZST4z|_#(K1WX6v_5nJfLgv#>aGp7$Q^JPSdn`>LWQ6pxyC5_)19>S66;9fo=)CZNVy zVB23GPX3kh)wW?hYLALg8Q727nlq>wUqD^|5H+yJ2)jk735TOT|R_c49UB0mJZ5)XD-zI*7LU!bEtWtR>LHtN&%cQ=)Hh%p9<}G6pe7bL)>%LV zDg#ki5}TnW(hhrJFO0-Z=%x4n5Cy%DKcEJ_i^{-bRL8#KoDRZp7WHUU#~V=-{1CN( z{pgFwPy_yK+izMQqaW=h$2*w|LHGL~OF&pWhBT;y=BN)*D(Zb5VcT68Kz%W4g=?@WZo(A2 zgvl5`!MQFUTTy=rTjK%jh<;hl-xa;EEA<^&3zJ|JP9coK9qcZjps^f$9{AH|9{dcU1k-5%~^Y*9-4Mx3ft_c+MI^>}SnvP{~ zKI#Lr67?x?*q4qo)TVQ=uhgsGsSd98C^uU4qGZWik1EK?E9kq0lqaiU%1&$Z>OW$=0 zwTS1{!lCs4;4bl`a}$q(nY_fKd>L1DY9ZA4Y2-f6^RIH!geWAm?&(~kbyvdYP{&I| z4`M%2fp#xqE@d6R5mD6Z5jwJPk}Yc=bgU=p>07yj0xz*SKy>7ybfOpK$rx^L`keZ+ zgUxquis~IWzZ!dBdE#TroiKptM!6g@i1IT0lOUZYgL*TZht>71e1pn5B7}ye_$l%1 z_`())IH#khgK0#)m2F!@+i1$Q32o*A;xl3;p<{}@u8CDU`XVuchn^H($q8;x(c+QH^Wf#AnAfTiAk;g!*n|+dAWRVjJ-xF@Z?oJnMIk3AR!f z3kV&#9w2j6#w!Jd-JmOVb{|j#ub!aP2bfNq%5yUV;#}eWJ z(al|F{lzE@uqOv`;tZkhW)<7!i-FX6t<3+3O@xkx#2-X|q7>J>i#jF|8;Loz{Rit3 zI))PNuadjQZ=hKJS^mGF^4OlZf%?x0&4_)Jf4A*PScPaz)FHe%ucIuX@8&;`PpE`( z{wWTzCr;s2B9!*GFqv?VA7?x2Lql(3Jn@8hc0|~MC)ahNoJmC5dtxd36Q>CscZtUK z+|QKf6P>A#!J9-Id+sC3^*tEBFAZN&>4$sqWg>;>V=wfftfL0uLEB8*uD15J`~pr> z14jiSf%*k3fhVxJy>1Np*>W81F(a#j4+o;-(@h-`QMDa_!4);OKe(VR%4tvk*kjuL*v3xtj%M1Z@* z&pqr&T(R}4+;^GsZsH*Ew{5?OKAh80oG2h%O=)OKVFaP0rGvST`v2!T))Ip$hvRZJ za10~@Y3pUL8HrtqMA|3XHeIJ9ntDGhi{E1zT!Y8-{2iyDBaPTY+#>! + +

+
+
+
+
+
+
+ + + + +
+ + + +
+
+
+
+
+
+

From b5b2e81d3bf8383950e05acd04887a092f1332c8 Mon Sep 17 00:00:00 2001 From: Lukas <47783030+luke23489@users.noreply.github.com> Date: Fri, 22 Apr 2022 18:50:18 +0200 Subject: [PATCH 19/48] fix overwrite issues The $jsonobj array is iterated from the back, so the first entries overwrite the newest entries (that is, the ones from the back). So it happens that instead of the traffic for today 16 o'clock ,the traffic from the day before yesterday 16 o'clock ends up in the array $data_template and is displayed in the graph. But this should not be like this! --- ajax/bandwidth/get_bandwidth_hourly.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ajax/bandwidth/get_bandwidth_hourly.php b/ajax/bandwidth/get_bandwidth_hourly.php index a8e0f5cc..31442f1e 100644 --- a/ajax/bandwidth/get_bandwidth_hourly.php +++ b/ajax/bandwidth/get_bandwidth_hourly.php @@ -41,7 +41,7 @@ if (filter_input(INPUT_GET, 'tu') == 'h') { $jsonobj = json_decode($jsonstdoutvnstat[0], true)['interfaces'][0]; $jsonData = $jsonobj['traffic']['hour']; - for ($i = count($jsonData) - 1; $i >= 0; --$i) { + for ($i = count($jsonData) - 1; $i >= 0 && $i >= count($jsonData)-25; --$i) { $data_template[$jsonData[$i]['time']['hour']]['rx'] = round($jsonData[$i]['rx'] / 1024, 0); $data_template[$jsonData[$i]['time']['hour']]['tx'] = round($jsonData[$i]['tx'] / 1024, 0); } From 2b3b0eb6c24a038b0631d71f43e28da47d236b9b Mon Sep 17 00:00:00 2001 From: Lukas Date: Fri, 22 Apr 2022 19:06:05 +0200 Subject: [PATCH 20/48] fix #1068 data size units --- ajax/bandwidth/get_bandwidth.php | 10 +++------- ajax/bandwidth/get_bandwidth_hourly.php | 7 +++++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/ajax/bandwidth/get_bandwidth.php b/ajax/bandwidth/get_bandwidth.php index 04c1fc03..4fcf8057 100644 --- a/ajax/bandwidth/get_bandwidth.php +++ b/ajax/bandwidth/get_bandwidth.php @@ -49,6 +49,7 @@ if ($timeunits === 'm') { } $datasizeunits = filter_input(INPUT_GET, 'dsu'); +$dsu_factor = $datasizeunits == "mb" ? 1024 * 1024 : 1024; header('X-Content-Type-Options: nosniff'); header('Content-Type: application/json'); echo '[ '; @@ -73,13 +74,8 @@ for ($i = count($jsonData) - 1; $i >= 0; --$i) { echo ','; } - if ($datasizeunits == 'mb') { - $datasend = round($jsonData[$i]['tx'] / 1024, 0); - $datareceived = round($jsonData[$i]['rx'] / 1024, 0); - } else { - $datasend = $jsonData[$i]['rx']; - $datareceived = $jsonData[$i]['rx']; - } + $datasend = round($jsonData[$i]['tx'] / $dsu_factor, 0); + $datareceived = round($jsonData[$i]['rx'] / $dsu_factor, 0); if ($timeunits === 'm') { echo '{ "date": "' , $dt->format('Y-m') , '", "rx": "' , $datareceived , diff --git a/ajax/bandwidth/get_bandwidth_hourly.php b/ajax/bandwidth/get_bandwidth_hourly.php index 31442f1e..5e2f93f1 100644 --- a/ajax/bandwidth/get_bandwidth_hourly.php +++ b/ajax/bandwidth/get_bandwidth_hourly.php @@ -39,11 +39,14 @@ if (filter_input(INPUT_GET, 'tu') == 'h') { exit('vnstat error'); } + $datasizeunits = filter_input(INPUT_GET, 'dsu'); + $dsu_factor = $datasizeunits == "mb" ? 1024 * 1024 : 1024; + $jsonobj = json_decode($jsonstdoutvnstat[0], true)['interfaces'][0]; $jsonData = $jsonobj['traffic']['hour']; for ($i = count($jsonData) - 1; $i >= 0 && $i >= count($jsonData)-25; --$i) { - $data_template[$jsonData[$i]['time']['hour']]['rx'] = round($jsonData[$i]['rx'] / 1024, 0); - $data_template[$jsonData[$i]['time']['hour']]['tx'] = round($jsonData[$i]['tx'] / 1024, 0); + $data_template[$jsonData[$i]['time']['hour']]['rx'] = round($jsonData[$i]['rx'] / $dsu_factor, 0); + $data_template[$jsonData[$i]['time']['hour']]['tx'] = round($jsonData[$i]['tx'] / $dsu_factor, 0); } $data = array(); From c4a2649267e14bc121547c6fc1dd6987fd33303e Mon Sep 17 00:00:00 2001 From: billz Date: Sun, 24 Apr 2022 10:11:01 +0100 Subject: [PATCH 21/48] Update picker w/ correct default --- app/js/huebee.js | 2 +- dist/raspap/css/style.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/js/huebee.js b/app/js/huebee.js index 895e1287..486d28b2 100644 --- a/app/js/huebee.js +++ b/app/js/huebee.js @@ -11,7 +11,7 @@ var hueb = new Huebee( elem, { // Set custom color if defined var color = getCookie('color'); if (color == null || color == '') { - color = '#d8224c'; + color = '#2b8080'; } hueb.setColor(color); diff --git a/dist/raspap/css/style.css b/dist/raspap/css/style.css index 45305ca1..c589341e 100644 --- a/dist/raspap/css/style.css +++ b/dist/raspap/css/style.css @@ -48,7 +48,7 @@ span.ra-wireguard:before { .ra-raspap:before { font-size: 4.35rem; content: "\e901"; - color: #d8224c; + color: #2b8080; margin-left: 0.1em; } From 993e65483d9820ae666c5086e5ffb4d4860c4422 Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Sun, 24 Apr 2022 11:18:08 +0200 Subject: [PATCH 22/48] Update picker w/ new default --- app/js/huebee.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/js/huebee.js b/app/js/huebee.js index 895e1287..486d28b2 100644 --- a/app/js/huebee.js +++ b/app/js/huebee.js @@ -11,7 +11,7 @@ var hueb = new Huebee( elem, { // Set custom color if defined var color = getCookie('color'); if (color == null || color == '') { - color = '#d8224c'; + color = '#2b8080'; } hueb.setColor(color); From 5d9ad372f9e8ed1769f3cecd71e290ff1ee42e09 Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Wed, 25 May 2022 19:57:06 +0200 Subject: [PATCH 23/48] Update bug_report.md --- .github/ISSUE_TEMPLATE/bug_report.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 6c8e00f2..de6bcee7 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -11,10 +11,12 @@ assignees: '' - [ ] This is a bug report +- [ ] I observed this bug on a clean install of the OS +- [ ] I have followed the project prerequisites - [ ] I have searched this repository for existing issues - [ ] I checked the FAQ and official documentation before creating this issue - [ ] I have read and understand the issue reporting guidelines @@ -38,7 +42,7 @@ Be sure there are no issues similar to yours that are already open. You can chec 1. Operating System: **ENTER HERE** 2. Hardware and version: 3. RaspAP version: -4. Followed the project prerequisites? +4. Clean install of a compatible operating system? 5. RaspAP Quick Install or Manual setup? 6. Using default configuration? 7. Simultaneous AP and managed mode? From 41cff2387824e7651ab686b6efc4a18d1069a6fc Mon Sep 17 00:00:00 2001 From: billz Date: Tue, 31 May 2022 12:04:54 +0100 Subject: [PATCH 24/48] Update pt_BR translation + compile .mo --- locale/pt_BR/LC_MESSAGES/messages.mo | Bin 14308 -> 13098 bytes locale/pt_BR/LC_MESSAGES/messages.po | 593 +++++++++++++++++++++++++-- 2 files changed, 558 insertions(+), 35 deletions(-) diff --git a/locale/pt_BR/LC_MESSAGES/messages.mo b/locale/pt_BR/LC_MESSAGES/messages.mo index 7a612375be7716407fd8acc4129129ccd19c28f6..48ed7d1ae94b181c03527fe4c03a19d6935f7294 100644 GIT binary patch delta 5000 zcmZYCdvKK19meq!35f}WOCUl4;SB@=B%2$gBmv4L0ZbtfNDveh7P5qeWD_CLlyKr>i+l;t?}HLj;N9JvlgHVD8nS2 zjcRBSs=%eF23%B!+fhq#1Xb7>RN+@pOLz^{@eOqFOVs_Lc9f+x>y7$ie^kdgsHb`q zs-tpyekSVvYE3y?j$BN|t*8!;qh{hP-d25JCbV2If_U$c{k?RnQ! z`6yI_6OqX=bFeQi$0_)VJ^l){1f6+@HAAVWrN~C!Ff-IT$)2x5&4Ay!qz~)=04JW} zL<&1Au#w}Wa;gATUqAH6>lwSX>n; zwXd?*7bB}}mZ6p|w1pjwWFM-41E`KKpgQ~rRZzkJ`%of(W+)#T!7S8MzX&y@O{kG? zu)d6%p+l(lFQ5wh9Mkpwx8YM2XP}C1PRZPNDsAuO=h@JNA{1r9gTlPX+ zcJ#)csI?npkB6ZCtr&yqU!njZaWZ8~TPFeW3&I zgid%+9Zo=fVJfOpKWge$+T%^A`}bi9zKfdjwz<*o_d?x2098mKYR1N50s4`Fhs+*! z)WJby@a6;5LvtJJv1eZNKeIQYX6hJf3eTd}{6o~pKS34nE$Sgm8WLUmE*QsgZ`A$$ zF$SZX-oO9Z)CoW1<~e(w`y&nO&`*+yI?&ccc0~4g4N-->V2{<={oCUlsPNaw?}%ns zzdvRT(Nt>F>-9lokJk@>L%NVt3+NW7^&& zKO>>#e7Iyh(e@-%(f@S;tcW(nLu`v zS!5Hrx6NVa02xm5$UriHM4pm2U_|7A|8uqOwTd?P?Q6G?gvnI$1ku)?4AYKVmfRX1 z-DP}Cukz_mrLVT$6fg7!s(nu7LSL;fauD#g%7uJL(X&I9;w4(;)-khzCfcpyKkv`uy1-? z(A!Y&t#@1dR`$-z^W@}ua`K(r+@hgF5+`{Z8aV% zN}sp3$SJQ2Ha1l^`5Jtg&e)*$X@8C18*n%ETO2B{X$pF4Jmc$vwGBm1pgwZgFfwnr z6Wtv-FyN$)baDp`Pn_u~4%RKL@&`QS!Ma7h`He+Rw5b2T;wddDa)uP<7v$vLcky0P zMNWOAXY4dxnPOWU@2~L{IoY)g#TU%3shjVu@n!o0bEa2hPb!{MHm;&#%!F|j*|olg z21eD8RbO{syZUmZ$J`t@CGGogM*mPuf31lx=xtVeGlDVhcbP5jHqRD!YSx5~(;MoXDz8)Pt34eK z`n_&TR(9+(UzN|jlJ%*3HG909mUB4Vn)7iR_q(B|!WZ-1nD)`t^Eos8au*vQp Hhjsfe-up%w literal 14308 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\n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2019-10-27 15:30-0300\n" -"Last-Translator: Matheus Dal Mago \n" -"Language-Team: \n" +"PO-Revision-Date: 2022-01-05 11:43\n" +"Last-Translator: Bill Zimmerman \n" +"Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.2.4\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Crowdin-Project: raspap\n" +"X-Crowdin-Project-ID: 395801\n" +"X-Crowdin-Language: pt-BR\n" +"X-Crowdin-File: /master/locale/en_US/LC_MESSAGES/messages.po\n" +"X-Crowdin-File-ID: 10\n" #: index.php msgid "RaspAP Wifi Configuration Portal" @@ -37,8 +36,14 @@ msgstr "Cliente WiFi" msgid "Hotspot" msgstr "Ponto de acesso" +msgid "Memory Use" +msgstr "Uso da memória" + +msgid "CPU Temp" +msgstr "Temperatura do CPU" + msgid "Networking" -msgstr "Networking" +msgstr "Rede" msgid "DHCP Server" msgstr "Servidor DHCP" @@ -141,9 +146,33 @@ msgstr "Esconder" msgid "Not configured" msgstr "Não configurado" +msgid "Connected" +msgstr "" + +msgid "Known" +msgstr "" + +msgid "Nearby" +msgstr "" + msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" msgstr "Nota: pontos de acesso WEP aparecem como 'Open'. Atualmente, o RaspAP não suporta conexão com WEP" +msgid "No Wifi stations found" +msgstr "" + +msgid "Reinitializing wpa_supplicant" +msgstr "" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "" + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "" + +msgid "Reinitialize" +msgstr "" + #: includes/dashboard.php msgid "Interface Information" msgstr "Informação da Interface" @@ -178,8 +207,8 @@ msgstr "Pacotes Transferidos" msgid "Transferred Bytes" msgstr "Bytes Transferidos" -msgid "Wireless Information" -msgstr "Informação de Wireless" +msgid "Wireless Client" +msgstr "Cliente WiFi" msgid "Connected To" msgstr "Conectado em" @@ -238,6 +267,60 @@ msgstr "Parar wlan0" msgid "Connected Devices" msgstr "Dispositivos Conectados" +msgid "Client: Ethernet cable" +msgstr "" + +msgid "Ethernet" +msgstr "" + +msgid "Client: Smartphone (USB tethering)" +msgstr "" + +msgid "Smartphone" +msgstr "" + +msgid "WiFi" +msgstr "" + +msgid "Mobile Data Client" +msgstr "" + +msgid "Mobile Data" +msgstr "" + +msgid "No information available" +msgstr "" + +msgid "Interface name invalid" +msgstr "" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "" + +msgid "Waiting for the interface to start ..." +msgstr "" + +msgid "Stop the Interface" +msgstr "" + +msgid "Connection mode" +msgstr "" + +msgid "Signal quality" +msgstr "" + +msgid "WAN IP" +msgstr "" + +msgid "Web-GUI" +msgstr "" + +msgid "Signal strength" +msgstr "" + +msgid "No Client device or not yet configured" +msgstr "" + #: includes/dhcp.php msgid "DHCP server settings" msgstr "Configurações do servidor DHCP" @@ -246,7 +329,16 @@ msgid "Client list" msgstr "Lista de Clientes" msgid "Interface" -msgstr "Interface" +msgstr "Inteface" + +msgid "Enable DHCP for this interface" +msgstr "" + +msgid "Enable this option if you want RaspAP to assign IP addresses on the selected interface." +msgstr "" + +msgid "DNS Server" +msgstr "Servidor DNS" msgid "Starting IP Address" msgstr "Endereço IP Inicial" @@ -275,6 +367,9 @@ msgstr "Tempo para expirar" msgid "MAC Address" msgstr "Endereço MAC" +msgid "Optional comment" +msgstr "" + msgid "Host name" msgstr "Nome de host" @@ -318,31 +413,55 @@ msgid "Dnsmasq is not running" msgstr "Dnsmasq não executando" msgid "Upstream DNS servers" -msgstr "Upstream DNS servers" +msgstr "" msgid "Only ever query DNS servers configured below" -msgstr "Only ever query DNS servers configured below" +msgstr "" msgid "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." -msgstr "Enable this option if you want RaspAP to send DNS queries to the servers configured below exclusively. By default RaspAP also uses its upstream DHCP server's name servers." +msgstr "" msgid "This option adds no-resolv to the dnsmasq configuration." -msgstr "This option adds no-resolv to the dnsmasq configuration." +msgstr "" msgid "Add upstream DNS server" -msgstr "Add upstream DNS server" +msgstr "" msgid "Format" -msgstr "Format" +msgstr "" msgid "Choose a hosted server" -msgstr "Choose a hosted server" +msgstr "" + +msgid "Enable these options to log DHCP server activity." +msgstr "" msgid "Log DHCP requests" -msgstr "Log DHCP requests" +msgstr "" msgid "Log DNS queries" -msgstr "Log DNS queries" +msgstr "" + +msgid "Restrict access" +msgstr "" + +msgid "Limit network access to static clients" +msgstr "" + +msgid "Enable this option if you want RaspAP to ignore any clients which are not specified in the static leases list." +msgstr "" + +msgid "This option adds dhcp-ignore to the dnsmasq configuration." +msgstr "" + +msgid "Clients with a particular hardware MAC address can always be allocated the same IP address." +msgstr "" + +msgid "This option adds dhcp-host entries to the dnsmasq configuration." +msgstr "" + +msgid "This toggles the gateway/nogateway option for this interface in the DHCPCD configuration." +msgstr "" #: includes/hostapd.php msgid "Basic" @@ -367,7 +486,7 @@ msgid "Encryption Type" msgstr "Tipo de Criptografia" msgid "PSK" -msgstr "PSK" +msgstr "" msgid "Advanced settings" msgstr "Configurações avançadas" @@ -426,28 +545,58 @@ msgstr "Arquivo de Log" msgid "WiFi client AP mode" msgstr "WiFi modo cliente AP" +msgid "Bridged AP mode" +msgstr "" + msgid "Hide SSID in broadcast" msgstr "Esconder SSID em transmissão" msgid "Maximum number of clients" msgstr "Número máximo de clientes" -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "Configura a opção max_num_sta do hostapd. O valor padrão e máximo é 2007. Se deixado vazio ou 0, o valor padrão é aplicado." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "" + +msgid "Beacon interval" +msgstr "" + +msgid "Disable disassoc_low_ack" +msgstr "" + +msgid "Do not disassociate stations based on excessive transmission failures." +msgstr "" + +msgid "Executing RaspAP service start" +msgstr "" + +msgid "Close" +msgstr "" + +msgid "Enable this option to log hostapd activity." +msgstr "" + +msgid "Transmit power (dBm)" +msgstr "" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "" + +msgid "dBm is a unit of level used to indicate that a power ratio is expressed in decibels (dB) with reference to one milliwatt (mW). 30 dBm is equal to 1000 mW, while 0 dBm equals 1.25 mW." +msgstr "" #: includes/networking.php msgid "Summary" msgstr "Sumário" +msgid "Internet connection" +msgstr "" + msgid "Current settings" msgstr "Configurações atuais" msgid "Default Gateway" msgstr "Gateway Padrão" -msgid "DNS Server" -msgstr "Servidor DNS" - msgid "Alternate DNS Server" msgstr "Servidor DNS Alternativo" @@ -469,12 +618,66 @@ msgstr "Desabilitado" msgid "Static IP Options" msgstr "Opções de IP Estático" +msgid "Metric" +msgstr "" + msgid "Apply settings" msgstr "Aplicar Configurações" msgid "Information provided by /sys/class/net" msgstr "Informação Provida por /sys/class/net" +msgid "Network Devices" +msgstr "" + +msgid "Mobile Data Settings" +msgstr "" + +msgid "Properties of network devices" +msgstr "" + +msgid "Device" +msgstr "" + +msgid "MAC" +msgstr "" + +msgid "USB vid/pid" +msgstr "" + +msgid "Device type" +msgstr "" + +msgid "Fixed name" +msgstr "" + +msgid "Change" +msgstr "" + +msgid "Settings for Mobile Data Devices" +msgstr "" + +msgid "PIN of SIM card" +msgstr "" + +msgid "APN Settings (Modem device ppp0)" +msgstr "" + +msgid "Access Point Name (APN)" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Successfully Updated Network Configuration" +msgstr "" + +msgid "Error saving network configuration to file" +msgstr "" + +msgid "Unable to detect interface" +msgstr "" + #: includes/system.php msgid "System Information" msgstr "Informação do sistema" @@ -492,10 +695,10 @@ msgid "Language setting saved" msgstr "Configuração de idioma salva" msgid "Console" -msgstr "Console" +msgstr "" msgid "Hostname" -msgstr "Hostname" +msgstr "" msgid "Pi Revision" msgstr "Revisão do Pi" @@ -521,6 +724,12 @@ msgstr "Sistema Reiniciando Agora!" msgid "System Shutting Down Now!" msgstr "Sistema Desligando Agora!" +msgid "Web server port" +msgstr "" + +msgid "Web server bind address" +msgstr "" + #: includes/themes.php msgid "Theme settings" msgstr "Configurações de tema" @@ -528,6 +737,9 @@ msgstr "Configurações de tema" msgid "Select a theme" msgstr "Selecione um tema" +msgid "Color" +msgstr "" + #: includes/data_usage.php msgid "Data usage" msgstr "Uso de dados" @@ -554,7 +766,7 @@ msgid "Monthly" msgstr "Por mês" msgid "interface" -msgstr "interface" +msgstr "" msgid "date" msgstr "data" @@ -606,7 +818,7 @@ msgid "Diffie Hellman parameters" msgstr "Parâmetros Diffie Hellman" msgid "KeepAlive" -msgstr "KeepAlive" +msgstr "" msgid "Server log" msgstr "Log do servidor" @@ -626,6 +838,66 @@ msgstr "Tentando iniciar openvpn" msgid "Attempting to stop openvpn" msgstr "Tentando parar openvpn" +msgid "Configurations" +msgstr "" + +msgid "Currently available OpenVPN client configurations are displayed below." +msgstr "" + +msgid "Activating a configuraton will restart the openvpn-client service." +msgstr "" + +msgid "Delete OpenVPN client" +msgstr "" + +msgid "Delete client configuration? This cannot be undone." +msgstr "" + +msgid "Activate OpenVPN client" +msgstr "" + +msgid "Activate client configuration? This will restart the openvpn-client service." +msgstr "" + +msgid "Activate" +msgstr "" + +msgid "Cancel" +msgstr "" + +msgid "Enable this option to log openvpn activity." +msgstr "" + +msgid "Authentification Method" +msgstr "" + +msgid "Username and password" +msgstr "" + +msgid "Certificates" +msgstr "" + +msgid "Enter username and password" +msgstr "" + +msgid "Certificates in the configuration file" +msgstr "" + +msgid "RaspAP supports certificates by including them in the configuration file." +msgstr "" + +msgid "Signing certification authority (CA) certificate (e.g. ca.crt): enclosed in <ca> ... </ca> tags." +msgstr "" + +msgid "Client certificate (public key) (e.g. client.crt): enclosed in <cert> ... </cert> tags." +msgstr "" + +msgid "Private key of the client certificate (e.g. client.key): enclosed in <key> ... </key> tags." +msgstr "" + +msgid "Configuration File" +msgstr "" + #: includes/torproxy.php msgid "TOR is not running" msgstr "TOR não está sendo executado" @@ -634,7 +906,7 @@ msgid "TOR is running" msgstr "TOR está sendo executado" msgid "Relay" -msgstr "Relay" +msgstr "" msgid "Relay settings" msgstr "Configurações de relay" @@ -660,6 +932,10 @@ msgstr "Tentando iniciar TOR" msgid "Attempting to stop TOR" msgstr "Tentando parar TOR" +#: template/dashboard.php +msgid "Bridged AP mode is enabled. For Hostname and IP, see your router's admin page." +msgstr "" + #: common form controls msgid "Save settings" msgstr "Salvar configurações" @@ -681,3 +957,250 @@ msgstr "cima" msgid "down" msgstr "baixo" + +msgid "adblock" +msgstr "" + +msgid "Ad Blocking" +msgstr "" + +msgid "Start Ad Blocking" +msgstr "" + +msgid "Restart Ad Blocking" +msgstr "" + +msgid "Blocklist settings" +msgstr "" + +msgid "Enable blocklists" +msgstr "" + +msgid "Enable this option if you want RaspAP to block DNS requests for ads, tracking and other virtual garbage. Blocklists are gathered from multiple, actively maintained sources and automatically updated, cleaned, optimized and moderated on a daily basis." +msgstr "" + +msgid "This option adds conf-file and addn-hosts to the dnsmasq configuration." +msgstr "" + +msgid "Choose a blocklist provider" +msgstr "" + +msgid "Hostnames blocklist last updated" +msgstr "" + +msgid "Domains blocklist last updated" +msgstr "" + +msgid "Update now" +msgstr "" + +msgid "Statistics" +msgstr "" + +msgid "Information provided by adblock" +msgstr "" + +msgid "Enable custom blocklist" +msgstr "" + +msgid "Define custom hosts to be blocked by entering an IPv4 or IPv6 address followed by any whitespace (spaces or tabs) and the host name." +msgstr "" + +msgid "IPv4 example: 0.0.0.0 badhost.com" +msgstr "" + +msgid "This option adds an addn-hosts directive to the dnsmasq configuration." +msgstr "" + +msgid "Custom blocklist not defined" +msgstr "" + +msgid "Invalid custom IP address found on line " +msgstr "" + +msgid "Invalid custom host found on line " +msgstr "" + +msgid "Tunnel settings" +msgstr "" + +msgid "Configuration Method" +msgstr "" + +msgid "Upload file" +msgstr "" + +msgid "Create manually" +msgstr "" + +msgid "Upload a WireGuard config" +msgstr "" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "" + +msgid "Apply iptables rules for AP interface" +msgstr "" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "" + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "" + +msgid "Select WireGuard configuration file (.conf)" +msgstr "" + +msgid "Create a local WireGuard config" +msgstr "" + +msgid "Enable server" +msgstr "" + +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "" + +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "" + +msgid "Local public key" +msgstr "" + +msgid "Local Port" +msgstr "" + +msgid "IP Address" +msgstr "" + +msgid "DNS" +msgstr "" + +msgid "Peer" +msgstr "" + +msgid "Enable peer" +msgstr "" + +msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and this peer." +msgstr "" + +msgid "This option adds client.conf to the WireGuard configuration." +msgstr "" + +msgid "Peer public key" +msgstr "" + +msgid "Endpoint address" +msgstr "" + +msgid "Allowed IPs" +msgstr "" + +msgid "Persistent keepalive" +msgstr "" + +msgid "Enable this option to display an updated wg-quick debug log." +msgstr "" + +msgid "WireGuard debug log updated" +msgstr "" + +msgid "Scan this QR code with your client to connect to this tunnel" +msgstr "" + +msgid "or download the client.conf file to your device." +msgstr "" + +msgid "Download" +msgstr "" + +msgid "Start WireGuard" +msgstr "" + +msgid "Stop WireGuard" +msgstr "" + +msgid "Information provided by wireguard" +msgstr "" + +msgid "Attempting to start WireGuard" +msgstr "" + +msgid "Attempting to stop WireGuard" +msgstr "" + +msgid "WireGuard configuration updated successfully" +msgstr "" + +msgid "WireGuard configuration failed to be updated" +msgstr "" + +msgid "Client Firewall" +msgstr "" + +msgid "Firewall is ENABLED" +msgstr "" + +msgid "Firewall is OFF" +msgstr "" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "" + +msgid "No incoming UDP traffic is allowed." +msgstr "" + +msgid "There are no restrictions for the access point %s." +msgstr "" + +msgid "Exception: Service" +msgstr "" + +msgid "allow SSH access on port 22" +msgstr "" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "" + +msgid "Exception: network device" +msgstr "" + +msgid "Exclude device(s)" +msgstr "" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "" + +msgid "Current client devices: %s" +msgstr "" + +msgid "The access point %s is per default excluded." +msgstr "" + +msgid "Exception: IP-Address" +msgstr "" + +msgid "Allow incoming connections from" +msgstr "" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "" + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "" + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "" + +msgid "Disable Firewall" +msgstr "" + +msgid "Enable Firewall" +msgstr "" + +msgid "Apply changes" +msgstr "" + From 9d5088adf01c6f22ecd53603a02f7557d731009c Mon Sep 17 00:00:00 2001 From: billz Date: Sun, 5 Jun 2022 13:42:00 +0100 Subject: [PATCH 25/48] Backup/apply auth + config with --upgrade. Related to #1162 --- installers/common.sh | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/installers/common.sh b/installers/common.sh index d24708d8..de7226e3 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -43,8 +43,8 @@ function _install_raspap() { _update_system_packages _install_dependencies _enable_php_lighttpd - _check_for_old_configs _create_raspap_directories + _check_for_old_configs _optimize_php _download_latest_files _change_file_ownership @@ -184,6 +184,13 @@ function _enable_php_lighttpd() { # Verifies existence and permissions of RaspAP directory function _create_raspap_directories() { + if [ "$upgrade" == 1 ]; then + if [ -f $raspap_dir/raspap.auth ]; then + _install_log "Moving existing raspap.auth file to /tmp" + sudo mv $raspap_dir/raspap.auth /tmp || _install_status 1 "Unable to backup raspap.auth to /tmp" + fi + fi + _install_log "Creating RaspAP directories" if [ -d "$raspap_dir" ]; then sudo mv $raspap_dir "$raspap_dir.`date +%F-%R`" || _install_status 1 "Unable to move old '$raspap_dir' out of the way" @@ -267,7 +274,6 @@ function _install_lighttpd_configs() { _install_status 0 } - # Prompt to install ad blocking function _prompt_install_adblock() { _install_log "Configure ad blocking (Beta)" @@ -275,7 +281,7 @@ function _prompt_install_adblock() { if [ "$assume_yes" == 0 ]; then read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then - echo -e + _install_status 0 "(Skipped)" else _install_adblock fi @@ -339,7 +345,7 @@ function _prompt_install_openvpn() { if [ "$assume_yes" == 0 ]; then read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then - echo -e + _install_status 0 "(Skipped)" else _install_openvpn fi @@ -357,7 +363,7 @@ function _prompt_install_wireguard() { if [ "$assume_yes" == 0 ]; then read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then - echo -e + _install_status 0 "(Skipped)" else _install_wireguard fi @@ -420,13 +426,14 @@ function _download_latest_files() { _install_log "Cloning latest files from github" git clone --branch $branch --depth 1 -c advice.detachedHead=false $git_source_url /tmp/raspap-webgui || _install_status 1 "Unable to download files from github" - sudo mv /tmp/raspap-webgui $webroot_dir || _install_status 1 "Unable to move raspap-webgui to web root" + if [ "$upgrade" == 1 ]; then _install_log "Applying existing configuration to ${webroot_dir}/includes" sudo mv /tmp/config.php $webroot_dir/includes || _install_status 1 "Unable to move config.php to ${webroot_dir}/includes" if [ -f /tmp/raspap.auth ]; then + _install_log "Applying existing authentication file to ${raspap_dir}" sudo mv /tmp/raspap.auth $raspap_dir || _install_status 1 "Unable to restore authentification credentials file to ${raspap_dir}" fi fi @@ -449,10 +456,6 @@ function _check_for_old_configs() { if [ "$upgrade" == 1 ]; then _install_log "Moving existing configuration to /tmp" sudo mv $webroot_dir/includes/config.php /tmp || _install_status 1 "Unable to move config.php to /tmp" - - if [ -f $raspap_dir/raspap.auth ]; then - sudo mv $raspap_dir/raspap.auth /tmp || _install_status 1 "Unable to backup raspap.auth to /tmp" - fi else _install_log "Backing up existing configs to ${raspap_dir}/backups" if [ -f /etc/network/interfaces ]; then @@ -577,7 +580,7 @@ function _configure_networking() { if [ "$assume_yes" == 0 ]; then read answer < /dev/tty if [ "$answer" != "${answer#[Nn]}" ]; then - echo -e + _install_status 0 "(Skipped)" else _enable_raspap_daemon fi From d216cf612f9f3706e15b63c4603d7d82ab2d0387 Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Sun, 5 Jun 2022 18:57:28 +0200 Subject: [PATCH 26/48] Update supported distros --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1142af30..8909a69c 100644 --- a/README.md +++ b/README.md @@ -123,6 +123,7 @@ RaspAP was originally made for Raspbian, but now also installs on the following | Distribution | Release | Architecture | Support | |---|:---:|:---:|:---:| | Raspberry Pi OS | (32-bit) Lite Bullseye | ARM | Official | +| Raspberry Pi OS | (64-bit) Lite Bullseye | ARM | Official | | Armbian | Bullseye | [ARM](https://docs.armbian.com/#supported-socs) | Official | | Debian | Bullseye | ARM / x86_64 | Beta | | Ubuntu | 18.04 LTS / 19.10 | ARM / x86_64 | Beta | From 6eded85bcd12c4f964c7c7f02f1311c0d39ff4fb Mon Sep 17 00:00:00 2001 From: billz Date: Sun, 5 Jun 2022 18:36:14 +0100 Subject: [PATCH 27/48] Detect Ubuntu 20.04 / Armbian 22.05 + set php package --- installers/common.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/installers/common.sh b/installers/common.sh index de7226e3..f63a5baa 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -139,7 +139,7 @@ function _get_linux_distro() { # Sets php package option based on Linux version, abort if unsupported distro function _set_php_package() { case $RELEASE in - 18.04|19.10|11*) # Ubuntu Server & Debian 11 + 20.04|18.04|19.10|11*) # Ubuntu Server, Debian 11 & Armbian 22.05 php_package="php7.4-cgi" phpcgiconf="/etc/php/7.4/cgi/php.ini" ;; 10*|11*) @@ -149,9 +149,11 @@ function _set_php_package() { php_package="php7.0-cgi" phpcgiconf="/etc/php/7.0/cgi/php.ini" ;; 8) - _install_status 1 "${DESC} and php5 are not supported. Please upgrade." ;; + _install_status 1 "${DESC} and php5 are not supported. Please upgrade." + exit 1 ;; *) - _install_status 1 "${DESC} is unsupported. Please install on a supported distro." ;; + _install_status 1 "${DESC} is unsupported. Please install on a supported distro." + exit 1 ;; esac } @@ -159,10 +161,12 @@ function _set_php_package() { function _install_dependencies() { _install_log "Installing required packages" _set_php_package - if [ "$php_package" = "php7.4-cgi" ] && [ ${OS,,} = "ubuntu" ]; then + if [ "$php_package" = "php7.4-cgi" ] && [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(18.04|19.10|11) ]]; then echo "Adding apt-repository ppa:ondrej/php" sudo apt-get install $apt_option software-properties-common || _install_status 1 "Unable to install dependency" sudo add-apt-repository $apt_option ppa:ondrej/php || _install_status 1 "Unable to add-apt-repository ppa:ondrej/php" + else + echo "PHP will be installed from the main deb sources list" fi if [ ${OS,,} = "debian" ] || [ ${OS,,} = "ubuntu" ]; then dhcpcd_package="dhcpcd5" From ac46e6dfcbf4240b3e4d8f75879326cf655d5b9e Mon Sep 17 00:00:00 2001 From: billz Date: Tue, 7 Jun 2022 19:57:16 +0100 Subject: [PATCH 28/48] Initial commit --- config/raspap-bridge-br0.netplan | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 config/raspap-bridge-br0.netplan diff --git a/config/raspap-bridge-br0.netplan b/config/raspap-bridge-br0.netplan new file mode 100644 index 00000000..e00b2833 --- /dev/null +++ b/config/raspap-bridge-br0.netplan @@ -0,0 +1,11 @@ +network: + version: 2 + renderer: networkd + ethernets: + eth0: + dhcp4: no + bridges: + br0: + dhcp4: yes + interfaces: + - eth0 From a75ead776ff956f7db4a8846655c11b4e2c2eee3 Mon Sep 17 00:00:00 2001 From: billz Date: Tue, 7 Jun 2022 19:58:04 +0100 Subject: [PATCH 29/48] Created _manage_systemd_services() --- installers/common.sh | 49 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/installers/common.sh b/installers/common.sh index f63a5baa..e4f6107f 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -41,6 +41,7 @@ function _install_raspap() { _display_welcome _config_installation _update_system_packages + _manage_systemd_services _install_dependencies _enable_php_lighttpd _create_raspap_directories @@ -157,6 +158,52 @@ function _set_php_package() { esac } +# Prompts the user to stop & disable Debian's systemd-networkd services +# It isn't possible to mix Debian networking with dhcpcd +# On Ubuntu 20.04 / Armbian 22, the systemd-resolved service uses port 53 +# by default which prevents dnsmasq from starting. +function _manage_systemd_services() { + _install_log "Checking for systemd-networkd services" + + # Prompt to disable systemd-networkd service + if systemctl is-active --quiet systemd-networkd.service; then + echo -n "Stop and disable systemd-networkd service? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + echo -e + else + sudo systemctl stop systemd-networkd.service + sudo systemctl disable systemd-networkd.service + fi + else + sudo systemctl stop systemd-networkd.service + sudo systemctl disable systemd-networkd.service + fi + else + echo "systemd-networkd.service is not running (OK)" + fi + + # Prompt to disable systemd-resolved service + if systemctl is-active --quiet systemd-resolved.service; then + echo -n "Stop and disable systemd-resolved service? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + echo -e + else + sudo systemctl stop systemd-resolved.service + sudo systemctl disable systemd-resolved.service + fi + else + sudo systemctl stop systemd-resolved.service + sudo systemctl disable systemd-resolved.service + fi + else + echo "systemd-resolved.service is not running (OK)" + fi +} + # Runs a system software update to make sure we're using all fresh packages function _install_dependencies() { _install_log "Installing required packages" @@ -528,8 +575,6 @@ function _default_configuration() { [ -d /etc/dnsmasq.d ] || sudo mkdir /etc/dnsmasq.d echo "Copying bridged AP config to /etc/systemd/network" - sudo systemctl stop systemd-networkd - sudo systemctl disable systemd-networkd sudo cp $webroot_dir/config/raspap-bridge-br0.netdev /etc/systemd/network/raspap-bridge-br0.netdev || _install_status 1 "Unable to move br0 netdev file" sudo cp $webroot_dir/config/raspap-br0-member-eth0.network /etc/systemd/network/raspap-br0-member-eth0.network || _install_status 1 "Unable to move br0 member file" From fcd3a7f204f6febf6612012edd308315af50fa55 Mon Sep 17 00:00:00 2001 From: billz Date: Tue, 7 Jun 2022 20:46:55 +0100 Subject: [PATCH 30/48] Tidy function w/ do loop --- installers/common.sh | 55 ++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 35 deletions(-) diff --git a/installers/common.sh b/installers/common.sh index e4f6107f..4017dfc9 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -163,45 +163,30 @@ function _set_php_package() { # On Ubuntu 20.04 / Armbian 22, the systemd-resolved service uses port 53 # by default which prevents dnsmasq from starting. function _manage_systemd_services() { - _install_log "Checking for systemd-networkd services" + _install_log "Checking for systemd network services" - # Prompt to disable systemd-networkd service - if systemctl is-active --quiet systemd-networkd.service; then - echo -n "Stop and disable systemd-networkd service? [Y/n]: " - if [ "$assume_yes" == 0 ]; then - read answer < /dev/tty - if [ "$answer" != "${answer#[Nn]}" ]; then - echo -e + services=( "systemd-networkd" "systemd-resolved" ) + for svc in "${services[@]}"; do + # Prompt to disable systemd service + if systemctl is-active --quiet "$svc".service; then + echo -n "Stop and disable ${svc} service? [Y/n]: " + if [ "$assume_yes" == 0 ]; then + read answer < /dev/tty + if [ "$answer" != "${answer#[Nn]}" ]; then + echo -e + else + sudo systemctl stop "$svc".service + sudo systemctl disable "$svc".service + fi else - sudo systemctl stop systemd-networkd.service - sudo systemctl disable systemd-networkd.service + sudo systemctl stop "$svc".service + sudo systemctl disable "$svc".service fi else - sudo systemctl stop systemd-networkd.service - sudo systemctl disable systemd-networkd.service + echo "${svc}.service is not running (OK)" fi - else - echo "systemd-networkd.service is not running (OK)" - fi - - # Prompt to disable systemd-resolved service - if systemctl is-active --quiet systemd-resolved.service; then - echo -n "Stop and disable systemd-resolved service? [Y/n]: " - if [ "$assume_yes" == 0 ]; then - read answer < /dev/tty - if [ "$answer" != "${answer#[Nn]}" ]; then - echo -e - else - sudo systemctl stop systemd-resolved.service - sudo systemctl disable systemd-resolved.service - fi - else - sudo systemctl stop systemd-resolved.service - sudo systemctl disable systemd-resolved.service - fi - else - echo "systemd-resolved.service is not running (OK)" - fi + done + _install_status 0 } # Runs a system software update to make sure we're using all fresh packages @@ -213,7 +198,7 @@ function _install_dependencies() { sudo apt-get install $apt_option software-properties-common || _install_status 1 "Unable to install dependency" sudo add-apt-repository $apt_option ppa:ondrej/php || _install_status 1 "Unable to add-apt-repository ppa:ondrej/php" else - echo "PHP will be installed from the main deb sources list" + echo "${php_package} will be installed from the main deb sources list" fi if [ ${OS,,} = "debian" ] || [ ${OS,,} = "ubuntu" ]; then dhcpcd_package="dhcpcd5" From 316b1616712d889ae0b1bb34c4d2f7b01307e08a Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 8 Jun 2022 07:24:36 +0100 Subject: [PATCH 31/48] Catch error & return install_status on failure --- installers/common.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/installers/common.sh b/installers/common.sh index 4017dfc9..a32bf8f4 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -158,8 +158,8 @@ function _set_php_package() { esac } -# Prompts the user to stop & disable Debian's systemd-networkd services -# It isn't possible to mix Debian networking with dhcpcd +# Prompts the user to stop & disable Debian's systemd-networkd services. +# It isn't possible to mix Debian networking with dhcpcd. # On Ubuntu 20.04 / Armbian 22, the systemd-resolved service uses port 53 # by default which prevents dnsmasq from starting. function _manage_systemd_services() { @@ -175,12 +175,12 @@ function _manage_systemd_services() { if [ "$answer" != "${answer#[Nn]}" ]; then echo -e else - sudo systemctl stop "$svc".service - sudo systemctl disable "$svc".service + sudo systemctl stop "$svc".service || _install_status 1 "Unable to stop ${svc}.service" + sudo systemctl disable "$svc".service || _install_status 1 "Unable to disable ${svc}.service" fi else - sudo systemctl stop "$svc".service - sudo systemctl disable "$svc".service + sudo systemctl stop "$svc".service || _install_status 1 "Unable to stop ${svc}.service" + sudo systemctl disable "$svc".service || _install_status 1 "Unable to disable ${svc}.service" fi else echo "${svc}.service is not running (OK)" From 9187691b3e19b027c7ab3b999d1c4d54e67a9a64 Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 8 Jun 2022 16:16:56 +0000 Subject: [PATCH 32/48] Add --uninstall option to loader --- installers/raspbian.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/installers/raspbian.sh b/installers/raspbian.sh index 5c865625..7df63832 100755 --- a/installers/raspbian.sh +++ b/installers/raspbian.sh @@ -21,6 +21,7 @@ # -u, --upgrade Upgrades an existing installation to the latest release version # -i, --insiders Installs from the Insiders Edition (RaspAP/raspap-insiders) # -v, --version Outputs release info and exits +# -n, --uninstall Loads and executes the uninstaller # -h, --help Outputs usage notes and exits # # Depending on options passed to the installer, ONE of the following @@ -29,6 +30,8 @@ # https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/common.sh # - or - # https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/mkcert.sh +# - or - +# https://raw.githubusercontent.com/raspap/raspap-webgui/master/installers/uninstall.sh # # You are not obligated to bundle the LICENSE file with your RaspAP projects as long # as you leave these references intact in the header comments of your source files. @@ -96,6 +99,9 @@ function _parse_params() { -v|--version) _version ;; + -n|--uninstall) + uninstall=1 + ;; -*|--*) echo "Unknown option: $1" _usage @@ -141,6 +147,7 @@ OPTIONS: -u, --upgrade Upgrades an existing installation to the latest release version -i, --insiders Installs from the Insiders Edition (RaspAP/raspap-insiders) -v, --version Outputs release info and exits +-n, --uninstall Loads and executes the uninstaller -h, --help Outputs usage notes and exits Examples: @@ -245,11 +252,17 @@ function _load_installer() { if [[ ! -z "$acctoken" ]]; then header=(--header "Authorization: token $acctoken") fi + if [ "${install_cert:-}" = 1 ]; then source="mkcert" wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh _install_certificate || _install_status 1 "Unable to install certificate" + elif [ "${uninstall}" = 1 ]; then + source="uninstall" + wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh + source /tmp/raspap_${source}.sh && rm -f /tmp/raspap_${source}.sh + _remove_raspap || _install_status 1 "Unable to uninstall RaspAP" else source="common" wget "${header[@]}" -q ${UPDATE_URL}installers/${source}.sh -O /tmp/raspap_${source}.sh From 705477a0116d61c69c642d9e629c284a6cdee6bf Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 8 Jun 2022 16:45:56 +0000 Subject: [PATCH 33/48] Install OS-specific bridge default config --- installers/common.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/installers/common.sh b/installers/common.sh index a32bf8f4..7a76849c 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -553,15 +553,21 @@ function _default_configuration() { sudo cp $webroot_dir/config/dhcpcd.conf /etc/dhcpcd.conf || _install_status 1 "Unable to move dhcpcd configuration file" sudo cp $webroot_dir/config/defaults.json $raspap_network || _install_status 1 "Unable to move defaults.json settings" - echo "Changing file ownership of ${raspap_network}/defaults.json" + echo "Changing file ownership of ${raspap_network}defaults.json" sudo chown $raspap_user:$raspap_user "$raspap_network"/defaults.json || _install_status 1 "Unable to change file ownership for defaults.json" echo "Checking for existence of /etc/dnsmasq.d" [ -d /etc/dnsmasq.d ] || sudo mkdir /etc/dnsmasq.d - echo "Copying bridged AP config to /etc/systemd/network" - sudo cp $webroot_dir/config/raspap-bridge-br0.netdev /etc/systemd/network/raspap-bridge-br0.netdev || _install_status 1 "Unable to move br0 netdev file" - sudo cp $webroot_dir/config/raspap-br0-member-eth0.network /etc/systemd/network/raspap-br0-member-eth0.network || _install_status 1 "Unable to move br0 member file" + # Copy OS-specific bridge default config + if [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(20.04|19.10|18.04) ]]; then + echo "Copying bridged AP config to /etc/netplan" + sudo cp $webroot_dir/config/raspap-bridge-br0.netplan /etc/netplan/raspap-bridge-br0.netplan || _install_status 1 "Unable to move br0 netplan file" + else + echo "Copying bridged AP config to /etc/systemd/network" + sudo cp $webroot_dir/config/raspap-bridge-br0.netdev /etc/systemd/network/raspap-bridge-br0.netdev || _install_status 1 "Unable to move br0 netdev file" + sudo cp $webroot_dir/config/raspap-br0-member-eth0.network /etc/systemd/network/raspap-br0-member-eth0.network || _install_status 1 "Unable to move br0 member file" + fi echo "Copying primary RaspAP config to includes/config.php" if [ ! -f "$webroot_dir/includes/config.php" ]; then From 86bb8458b8eaacce462a292da4bce0046428cb8c Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 8 Jun 2022 16:47:00 +0000 Subject: [PATCH 34/48] Add sbin/netplan to sudoers --- installers/raspap.sudoers | 1 + 1 file changed, 1 insertion(+) diff --git a/installers/raspap.sudoers b/installers/raspap.sudoers index 945aa0c8..000f8057 100644 --- a/installers/raspap.sudoers +++ b/installers/raspap.sudoers @@ -62,4 +62,5 @@ www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wireguard/*.conf www-data ALL=(ALL) NOPASSWD:/bin/cat /etc/wireguard/wg-*.key www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/wireguard/*.conf www-data ALL=(ALL) NOPASSWD:/bin/rm /etc/wireguard/wg-*.key +www-data ALL=(ALL) NOPASSWD:/usr/sbin/netplan From b5886882eefc8807682cbc7060886d6c4234d3e2 Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 8 Jun 2022 17:21:50 +0000 Subject: [PATCH 35/48] Add os_desc + kernel version functions --- app/lib/system.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/lib/system.php b/app/lib/system.php index ee21ad84..22f7255a 100644 --- a/app/lib/system.php +++ b/app/lib/system.php @@ -75,5 +75,16 @@ class Sysinfo return $status; } + public function operatingSystem() + { + $os_desc = shell_exec("lsb_release -sd"); + return $os_desc; + } + + public function kernelVersion() + { + $kernel = shell_exec("uname -r"); + return $kernel; + } } From affc0396f1e254c04f94e36c35501e03e68b68ba Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 8 Jun 2022 17:22:52 +0000 Subject: [PATCH 36/48] Display os + kernel info on system > basic tab --- includes/system.php | 4 ++++ templates/system/basic.php | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/includes/system.php b/includes/system.php index db7f3c48..56f5e111 100755 --- a/includes/system.php +++ b/includes/system.php @@ -159,6 +159,8 @@ function DisplaySystem() $hostname = $system->hostname(); $uptime = $system->uptime(); $cores = $system->processorCount(); + $os = $system->operatingSystem(); + $kernel = $system->kernelVersion(); // mem used $memused = $system->usedMemory(); @@ -215,6 +217,8 @@ function DisplaySystem() "hostname", "uptime", "cores", + "os", + "kernel", "memused", "memused_status", "memused_led", diff --git a/templates/system/basic.php b/templates/system/basic.php index dd7fc278..887eeea7 100644 --- a/templates/system/basic.php +++ b/templates/system/basic.php @@ -16,6 +16,12 @@ include('includes/sysstats.php');
+
+
+
+
+
+
From 08a76445aec12f453e6dcbddd03bdc2411559135 Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 8 Jun 2022 17:24:13 +0000 Subject: [PATCH 37/48] Add new messages to en_US locale --- locale/en_US/LC_MESSAGES/messages.mo | Bin 31005 -> 31057 bytes locale/en_US/LC_MESSAGES/messages.po | 6 ++++++ 2 files changed, 6 insertions(+) diff --git a/locale/en_US/LC_MESSAGES/messages.mo b/locale/en_US/LC_MESSAGES/messages.mo index 3433cbf6ee28d819ec2cb9cac01e5a2ec37f3f59..703307ef8c8d5c280183c231012a55e26b511a6e 100644 GIT binary patch delta 8162 zcmZYC2XIzZ8piPxAR&#CgcS0n5kg2H)Sw}h009z^P7J+;UW1_*^`fA3ko{mN3W%tP zz(~=ESP)?mRFJkP)yA?GjPxeR{-50A%+Bl`UVi7ix14(K2WzkU9KY`4TnsI@!f-6| zF(w9|4mKvXj4|hc)6Tc(5#HU^q5KJ+K>=$59x8MW_bmVF)h6HnS&&I4Ej=^jXFOc zE8!~CK;A;lz;@+n-|VN*8Bd}{mYD2X8~vy^LQQc~0j}-Hv2p0QL6h1X9SOFck-&rtUPV$3LPTbRAhP6Tn93i)rYK^Q=oyBU+A{ z@=d6be}o#~m#79iq`FI%kLvh{RINXSNhHeS9D8CBrcqywTGNB5>n+= z2kW7hXbNfoUQ|ccV_AF`193O1(kVl(-sF|JXP|(z^Lycqy#^GJm4Uu)+dIBa; zZ-MIAAk^-E3bpy3M@{(}R7W;r1$+-1;C?hd#@xcm6mQoxW+ysh>lxFNLVSHT1Wv_X zxDOj+G4hW}x=OGSqcDFbt2OI&=vG@g^4GBh=CrHFB4F8kVE}JVuxy ztbskTt~9~>iJ@Gu7uE9N(y5-!MmA-bRLL zGe=PMN2s}qf7~5PQ{;1M`k;2@(-@8~q89fRtb$uG0zXAf-8ZPA|6=p^FpPTT40i-c z8O(DEi8>_oBKJTwFda3N*{Jto0cyxEVFa#5HLx8u#LrMeI)WPNP1FE<*daO}i=~?Y zbzdf`V;vgvo@oSqN$7kQO;^CId&uiE?;R0rR;^-oZ1^95=qE}+)rI;z9> zQP+oLx(!F6o|ocKP><75AMci^k@iK6XejDI3sF<&MK!R=`Vp#uhMF<_VsJ( zUKfPws0THp^-<@W;Y@6W{JJ^jV+wk}IZVJysD^!;xi5YcYU&1~8XSdMvPr0p&Blqi z95n#{=I#h9qkcYPQG2K<>b_Q}=XJ#}+BZEZ3?nhdo;Y55!kBMSBfesNVDrIQ?vy5= zMpPG5Fx}?+A$>8UQ3KnArJL2B{|r;fAH&+TZ|>U*l3TbvY>XO7E@~#aphi9z)uC~i zkI!HNoSmJ-x!_yBc-Un@5s zVNF7)P>i(gq57bnwii>T26RP1os16^_cK8@jI7y;2R%q@1-1S3U zxDlC6vlCn5b!?C6ZHy_vXRs4~hq+j%Ew2_%=C3*UA?9Jr9R3x9%Tevzz=@dcaF?d6 z*m?*xrDstcC_%kO4^c}I+RmMkM2x0h7n86(>N$m|nV5x|!MUgz_y=kxx1yf68+Dy? zgn~bXQ>ZDsfO_x^)CCn8ZbJ;mWNe3#I3CrZxmX@oVmVxoYUp*;K(?a?4`3pGk6p0r z6Qy;>V{*e2Ckqs(*smPfgRlQp;(`KT`b0ds18JQbUWy=rlay5FaWzE zZ?frwfqMT}QP6`oTDM>s>bvkUA0Cb=)UUA6g&58PYH8+R0(vnR-$l*LKJ>>kw*DjX z2y-7b@?8GXCS8d^v~S*~pb-~iSv-MSiqohEUO{!RTvzwg9E@t9I%>_+unlHmJkG`- z+=yE1cTh8U0Bhh0tcZ8fQ3K_>xu42-R7aXyd!v2}CZk@vMX0^8*?Iu=pzl!6DY5!> zcR#stsPjo!3DZ#nX^o-Sp*!=h69Y&vJEjmdvX89?QJe5<)D)jaZNi^yK9F}y`4H5D z<4^-gMs++JbFnuz#0{wSPNDX~r99?8kU|NGsdx`Hbwy9Q7e0e}&|=i?eI5Ja=je;o z`3}oe48?j_1+!5j?}=LC;iv{LV+dYFb-awz!)>S%Y6S796E!gn8==;;0M+y7uqH0U z%J>21;1{SR3hC(%pf0K-O;CHP3u>Tws16UX=bfPx)U)aKg4q~OeF>_;*KrQMi&~1z zUhespm`=S1D!%|VbIVX4oVBRU_CBhk7f?%Eg0=7tMrd*pd%IJYi5f{qj6*N#hMl(l zAtq2ii|W{)sHqI<<8HoK)RaGl>PQ>ZuJ4KsZ~z)!=a+CY#bvDHPAyLPe(wJ?_F#KX zg!Xs;!QT%XQ-9A|f<@G8@*&q!twwcZ1F9oCP$S)s+JvW2BfW|mh-aWXb4jSZ(gds0 zzUf3k4;X>WikXgacmg$&YZ!?Skts9bgWNrlhPtjJhT#}ghaA*eFGY2D4Qh#k3*4m+ zLwylr(a{4F?TJiOy)~+beNa6ghY2_ZHS(3H2d+o$l{ZlheuUb*pIc91GW8!Y9{mTq zrdZnzX8s#+VxK~3Er)W}X_HN1t|q>)412CJdgIs>)Kb5I@ci<-#^sF|2!^UF~) zv;{Swy_kZBhB)qfeT{?~s4~9Av3egnKp+-uRe%Y)&Q4Ng6>Np#ta1&}| zpQ2vBudxhXKsES1YKDHtG`;@;Bix1_M?EkLHKKgf)Qv>-d^&2T=A%Zi7}eobSPnO! zu6q;J(PGrw^QAri4bG%~9%HfBNZrr+Poa=N!a+6sD(XA13;pmRs=;!j+>up6bu11i zVm&O68&MKSjGRY3?>E$DypF?Y-}sGoPmD#Kn1~w5TxL>b_&#naRe|&5F9OKc?astc@$s(FOY`sD~#}Bl!_E6Tf00K16lMf2{i- zk0?x_UWn?*Qq*g@9R0BvgK;nFxnH5~KZmpMH`H^-j${7SfvMx%9?r)A>MKzzjhgXJbXoM|F58W@4d3p)-ZIFbD6TF3ft$ z{f|c{Y)O4Fw#TDbfKf&6e>`SjF7-p$7AsG1f3ACA9`$p`?~kcB(QRi5^2c1@FU^?K zZIW9Uf?*^kqdG7jtKcfEgxgRv@-garaTt^E66!$#{HAIqJg6B=M18>Opzh1XDwv15 zZX~iKju}rOoWwNLgO{K#*o+NvJ0{~#s9(XrDQ<@nQA^MewF#S`8ft+WNC(u1W*{cw zOzeW|Y`p~2^!|rTb^ocAg}Px3YQ%FNevIlWCmN1?YtbXeP(|8vW$WHrV5M@1i-e~)qv$_H={ zF@ji2=on1?ckJq&AMGjVLhT^6r8;E~E!3|>Jm)^Mxoy_brE`RHAdvzIG z&%jmW5(z(VwV24vwq)|{Rih}sMY$*H|J6DkxR}+r(w1{D!CMp)<~xk5u6gIjcQ4M3*y4sE})b_Mn`kXJ@DVebtUZa6BZMBoZpEB*p1Nf3K8Y~AkI@^Dw*f0 z-5@S_e~615Ud~?gHkk>;GGdI)O~EVFPZHV0M4PXL^QlJ>pAtH{lWRt-p!_^;D9!Sg zVl^M{fcWUleKsXRiMzy2Vh)i@R3@GzBDg)Ds6}}iQP;a8KGGRZrWLj0#3P~t@e83N zfOFCKuhN?P*VE+wK3<~m1odiIpO{L-5RJ+G6Ppn_4iO%50r)JDNVyM=^x=26J(U#V z9TJaw^Aj>0A8JL!6J!Px4Jh|T9g`@JB{GSbgpSTQndm`$Lp_VAsuLWSi7fJ?iPMxr zu@%veNY@4Ss6@RD(c6dr!s|Cx$IrxT#3^Dfk;?@-z9)9=>(nU1ci4o&VPkjQ7_z5~ UPu{LA!zYC9TGVk=?+TX2xzV8~g8KSIp*;*`}G?ZI)YN<}wjBW*BBIP4Q!qYeoM&l8VZy zkjkMbr=t@~X{8H_^Lp?1?VR&_^x5y$ZAV?W8`aPeWOvLrI0}P#AnM{I>onAi z?n5p4BGk;EMNRNkREKR++%4;f8hCCBr`6F=67{gio|uYlsaK-*^kvj_dyz4i6W9oE zVjpbS+TEgIs0oy#2I62Hd=dk3HEQ7NQRg?dW_SSZf zxE{}9dtz>Fg7*_cxnLb?d>d7`&0*8BQc455^BH$t)<{^*KFbo)Y9ET%`EzMWB96?&Zvj<9&CyeQG5LmHo;{Wj?bf3atCT9_S^g^45R)7 zYC?XQ?k7D29lh7LQ&0yZQLjfK>cSEX$C;>xm!M|)3~FXCV=#V<8u+L7{4c0y!G{M( z_l2Sc)B-i|4Ag7cyA$iLJZOkk6MB4sI57G8t_rn z_1~g8uEE+Z%CcL8`jkgzvHqHA1_{lmE2^O))RIj_buiDm3e~|TzsFk>mYPenx_x^C4M?DGE?klJPZbeO?8Uq{(M<}Sn)2I{QS+Aq^ zw0=)_37eo^(_~abX{hV7Q5_6H4P-QGV3Sb;D!2J6>*J^iKZ~`$|KFgXj&@>e+>6by z#@e8lyXS3Cdzy}Fpfl=&G!P@P(B|i$I$nVq@H*thFdOkM{0jSET5r~07gqM>4@6vy zJ#ZiDp$y12W*p|>Kzs{xu}+RL{Ac>}V*#$jJPfDRF*q63(SFoJ8^KLlvE|masE2Y( zF6*xWRFlwabQHA}mryJ68%CkuoqWA84%JXL`r|Ov(vL>1z$DatRjBqJLtVEX>*FTW zifu!+yWgRp3(jL2UdAMhW%?e>K@Dg$*27Zt!wOVKvr#j71fy{cCgOG+gr{shrJwr& z8epwNUGKb1K^^QyJxoVX9erspxP+)}JJbMctN{bud;$iLPeR^YlZt^j z4b^U?bw2vizga?|qYrz7$y~6Tjh=>=QCm~MM#f_a2IEpx$4_B>e8bk?Mw&2(P&1F= zhaS>W48nP+881hDSvO!)z5kmjsKMQ+5q^sLHlIUva1FKRzIVI-&}f2j)JLKku0-wi zLevVb!IroI8{j9X_CLoM{24Wnu)#?Grac99*dO)UjYmBkj&%*Hp|?;CRa;MEUFuiu z`Rmw_dcY8OB9W*SNI>N?ki{|CsEK*eQQ=t%dI(=aE%9d5L->x(e`)g+)T0f)S{dX@^?LE~pOQ#m2Z7HKCKJe!fOc;AflvBcHq4k_a5;?rA3K!r|Boi?ITovdOSTlX6%9wY z7ldOv^|q+|SX9Tws1Hs#>S22nHPCISEv?4Z_%Vj#Z>W`PIMSU+BF0j8N+{@t#Wt}L z>W&IersnS~n2BGgQuMm>a^P&3_&nn(?5X|JPZ+~{6+rJAGe z?}~J624Sq8nhg}Rq#vSYcoel{moW}~$GS_Eh+))wq6UzN8S71J z?09!;x}na`K&{*gbYdxNrjURKP$T>v)#0zGy$&gKpYmp?nRGxc<(;UND6sj-s1=%z zn$Rjt#7-x=m)3?eS&J|XNQ88>cF?yZ6^>lkp$F=WuOM^nDtU@j2 zQ}+CNe31GEjKLO@-1~cBJoWylj;CT@bkHC7BmFt%5CzTXGt|hw#d5rX^>BKLJHuJ1 z4i;ctd=Yiu22_JPP%F6$Sxj@p<~vPx^W9Ms$+H&L=Gp&p3R=oVs2Q)qWL#tOd$0@j z!&o01OmQDJ59+=YOu2j6x7TjatH& zP&d4Tn#mpv!Q-e7zQSOBWJMx zeJQLVF%Hk;K)D!8~LFXi@DFWJ!(aJ zq6UzUO|S?XVx>btOR@y@p;(12a0{xT+|x-YE4Z7>dXT?T4P?!cy) zjcT_5b-n`A@F7e>=M4(_t#<-7qARE^xQTij{O@-=3PR1qgZj|4L4DJ6aS%?n^_|$3 z`sdcbS?=|jsP^+P1PhUV98+d5sKiuGtitWM7d3!654Z!YvaUhpx1#oZ2X@8xQ7d!{ zHG#lN*HHAO9)&)r<5OaIZHZ5xkGCem)A(1aLx_(EhHjR6BO_ZmJ-OpvYUA-c)bTOF zn`Zt+bR*vp&k{T$ri%JBLPs5|R$~<9H*2$eXDDY=?rYC0y^u0HYPJy5m2eO5dyxUo z70M5AK9TsGa%=oMPQV1BKQW7VhTMK)G?79uU(PQDeu9ZL^1Ikp<^uh%XpV} zV^s9Gfz&>r_P9>jLpybeh~eD(Husu!opmw(X3IfbmrS`Kwjw^U`DT94-`18o4 z@DQ!(co6yf_P@uMw)7WV;H`=FWL=>2FjtMhCH5|V>qL9?pO35lb-bFKUN=8)&t{&i z-emIaRmGGyP|nA6LdSI%^E5tX%Y87`yRunW-9oPVw|8T+=yo^kxkt#%C9(;<+`EV# zly!t5-vV>MThlCha5S~Il_hQ?%88pqDUn136FTPGyBk|OlS{E>ogYI4QxEixj%nVv z1*JCjY$?_yrVybvcN^~Gj$yX07IdUh??Z%BUQYb(-5=9DXC#?^_R4#3v@Pon9Uki6 zyT#g{YxudFSZZ^rod2h{Lu^>r07@IlwzDln;m_3htzjM`>f5}7-%#&_2eBy*@y?G8 z%UMh*lZ=i#C=bK)#1Bf?;~eUXH<|0B^D7m)OCEZZD2xX__k%4Z~JaLJ8?$nw(SE-JpZfy2ZuzY!T Date: Wed, 8 Jun 2022 17:29:23 +0000 Subject: [PATCH 38/48] Get system->operatingSystem() --- includes/hostapd.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/includes/hostapd.php b/includes/hostapd.php index 812d81ee..fc301417 100755 --- a/includes/hostapd.php +++ b/includes/hostapd.php @@ -7,6 +7,9 @@ require_once 'includes/config.php'; getWifiInterface(); +$system = new \RaspAP\System\Sysinfo; +$os = $system->operatingSystem(); + /** * Initialize hostapd values, display interface * From 7674feaf6141d7e27dbe3dc3175359bc821343c2 Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 22 Jun 2022 11:50:00 +0100 Subject: [PATCH 39/48] Add operatingSystem check to bridge option --- includes/hostapd.php | 4 +++- templates/hostapd/advanced.php | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/includes/hostapd.php b/includes/hostapd.php index fc301417..d1160d6d 100755 --- a/includes/hostapd.php +++ b/includes/hostapd.php @@ -18,6 +18,7 @@ function DisplayHostAPDConfig() { $status = new StatusMessages(); $system = new \RaspAP\System\Sysinfo; + $operatingSystem = $system->operatingSystem(); $arrConfig = array(); $arr80211Standard = [ 'a' => '802.11a - 5 GHz', @@ -122,7 +123,8 @@ function DisplayHostAPDConfig() "arrEncType", "arrTxPower", "txpower", - "arrHostapdConf" + "arrHostapdConf", + "operatingSystem" ) ); } diff --git a/templates/hostapd/advanced.php b/templates/hostapd/advanced.php index f331734b..89d90c72 100644 --- a/templates/hostapd/advanced.php +++ b/templates/hostapd/advanced.php @@ -4,7 +4,8 @@
- /> + + />
From a743f84529e9d1dc1ab463e84be697510f309b97 Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 22 Jun 2022 11:56:42 +0100 Subject: [PATCH 40/48] Minor: case change --- installers/common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installers/common.sh b/installers/common.sh index 7a76849c..fc661394 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -183,7 +183,7 @@ function _manage_systemd_services() { sudo systemctl disable "$svc".service || _install_status 1 "Unable to disable ${svc}.service" fi else - echo "${svc}.service is not running (OK)" + echo "${svc}.service is not running (ok)" fi done _install_status 0 From 7f593bfe3143f66b3e87cdd1cdd54cdf2a4dcaf5 Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 22 Jun 2022 14:04:53 +0100 Subject: [PATCH 41/48] Add timeout to wget to extract public IP, thx @zbchristian --- includes/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/functions.php b/includes/functions.php index 526b3ae1..6cfbeddd 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -787,7 +787,7 @@ class validation */ function get_public_ip() { - exec('wget https://ipinfo.io/ip -qO -', $public_ip); + exec('wget --timeout=5 --tries=1 https://ipinfo.io/ip -qO -', $public_ip); return $public_ip[0]; } From 52b11b092c1d8968ba567b96312e0fdd249c937d Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Wed, 22 Jun 2022 21:52:09 +0200 Subject: [PATCH 42/48] Set default country_code --- config/hostapd.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/hostapd.conf b/config/hostapd.conf index 856e4a1b..c058a308 100644 --- a/config/hostapd.conf +++ b/config/hostapd.conf @@ -11,7 +11,7 @@ wpa_passphrase=ChangeMe interface=wlan0 wpa=2 wpa_pairwise=CCMP -country_code= +country_code=UK ## Rapberry Pi 3 specific to on board WLAN/WiFi #ieee80211n=1 # 802.11n support (Raspberry Pi 3) #wmm_enabled=1 # QoS support (Raspberry Pi 3) From 10942aa8aebaea2170a075f8a3417905a8262d6d Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Thu, 23 Jun 2022 00:19:31 +0200 Subject: [PATCH 43/48] Update country_code --- config/hostapd.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/hostapd.conf b/config/hostapd.conf index c058a308..cdb2a881 100644 --- a/config/hostapd.conf +++ b/config/hostapd.conf @@ -11,7 +11,7 @@ wpa_passphrase=ChangeMe interface=wlan0 wpa=2 wpa_pairwise=CCMP -country_code=UK +country_code=GB ## Rapberry Pi 3 specific to on board WLAN/WiFi #ieee80211n=1 # 802.11n support (Raspberry Pi 3) #wmm_enabled=1 # QoS support (Raspberry Pi 3) From c1db8d64093b8e4a681c3fc5a535762e9280586b Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Thu, 23 Jun 2022 17:06:58 +0200 Subject: [PATCH 44/48] Set DAEMON_CONF path for hostapd --- installers/common.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/installers/common.sh b/installers/common.sh index fc661394..6e89f307 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -649,6 +649,15 @@ function _patch_system_files() { _install_log "Unmasking and enabling hostapd service" sudo systemctl unmask hostapd.service sudo systemctl enable hostapd.service + + # Set correct DAEMON_CONF path for hostapd (Ubuntu20 + Armbian22) + if [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(20.04|19.10|18.04) ]]; then + conf="/etc/default/hostapd" + key="DAEMON_CONF" + value="/etc/hostapd/hostapd.conf" + echo "Setting default ${key} path to ${value}" + sudo sed -i "/^$key/ { s/^#//; s%=.*%=\"$value\"%; }" "$conf" || _install_status 1 "Unable to set value in ${conf}" + fi _install_status 0 } From 5625e13ef158456d9f60e61d494357b47d495385 Mon Sep 17 00:00:00 2001 From: billz Date: Thu, 23 Jun 2022 21:05:40 +0100 Subject: [PATCH 45/48] Detect Ubuntu 22.04, extended regex to match daemon_conf --- installers/common.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/installers/common.sh b/installers/common.sh index 6e89f307..15b5dbe0 100755 --- a/installers/common.sh +++ b/installers/common.sh @@ -140,7 +140,7 @@ function _get_linux_distro() { # Sets php package option based on Linux version, abort if unsupported distro function _set_php_package() { case $RELEASE in - 20.04|18.04|19.10|11*) # Ubuntu Server, Debian 11 & Armbian 22.05 + 22.04|20.04|18.04|19.10|11*) # Ubuntu Server, Debian 11 & Armbian 22.05 php_package="php7.4-cgi" phpcgiconf="/etc/php/7.4/cgi/php.ini" ;; 10*|11*) @@ -193,7 +193,7 @@ function _manage_systemd_services() { function _install_dependencies() { _install_log "Installing required packages" _set_php_package - if [ "$php_package" = "php7.4-cgi" ] && [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(18.04|19.10|11) ]]; then + if [ "$php_package" = "php7.4-cgi" ] && [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(22.04|20.04|18.04|19.10|11) ]]; then echo "Adding apt-repository ppa:ondrej/php" sudo apt-get install $apt_option software-properties-common || _install_status 1 "Unable to install dependency" sudo add-apt-repository $apt_option ppa:ondrej/php || _install_status 1 "Unable to add-apt-repository ppa:ondrej/php" @@ -560,7 +560,7 @@ function _default_configuration() { [ -d /etc/dnsmasq.d ] || sudo mkdir /etc/dnsmasq.d # Copy OS-specific bridge default config - if [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(20.04|19.10|18.04) ]]; then + if [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(22.04|20.04|19.10|18.04) ]]; then echo "Copying bridged AP config to /etc/netplan" sudo cp $webroot_dir/config/raspap-bridge-br0.netplan /etc/netplan/raspap-bridge-br0.netplan || _install_status 1 "Unable to move br0 netplan file" else @@ -651,12 +651,12 @@ function _patch_system_files() { sudo systemctl enable hostapd.service # Set correct DAEMON_CONF path for hostapd (Ubuntu20 + Armbian22) - if [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(20.04|19.10|18.04) ]]; then + if [ ${OS,,} = "ubuntu" ] && [[ ${RELEASE} =~ ^(22.04|20.04|19.10|18.04) ]]; then conf="/etc/default/hostapd" key="DAEMON_CONF" value="/etc/hostapd/hostapd.conf" echo "Setting default ${key} path to ${value}" - sudo sed -i "/^$key/ { s/^#//; s%=.*%=\"$value\"%; }" "$conf" || _install_status 1 "Unable to set value in ${conf}" + sudo sed -i -E "/^#?$key/ { s/^#//; s%=.*%=\"$value\"%; }" "$conf" || _install_status 1 "Unable to set value in ${conf}" fi _install_status 0 } From f0ef11bcf5413b1c8a762d9264fab3441e8ecd9e Mon Sep 17 00:00:00 2001 From: billz Date: Fri, 24 Jun 2022 06:25:11 +0100 Subject: [PATCH 46/48] Update release version --- README.md | 2 +- includes/defaults.php | 2 +- index.php | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8909a69c..b3ea7cc9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ![](https://i.imgur.com/xeKD93p.png) -[![Release 2.8.4](https://img.shields.io/badge/release-v2.8.4-green)](https://github.com/raspap/raspap-webgui/releases) [![Awesome](https://awesome.re/badge.svg)](https://github.com/thibmaek/awesome-raspberry-pi) [![Join Insiders](https://img.shields.io/static/v1?label=Join%20Insiders&message=%E2%9D%A4&logo=GitHub&color=ff69b4)](https://github.com/sponsors/RaspAP) ![https://travis-ci.com/github/raspap/raspap-webgui/](https://api.travis-ci.org/RaspAP/raspap-webgui.svg) [![Crowdin](https://badges.crowdin.net/raspap/localized.svg)](https://crowdin.com/project/raspap) [![Twitter URL](https://img.shields.io/twitter/url?label=%40RaspAP&logoColor=%23d8224c&url=https%3A%2F%2Ftwitter.com%2Frasp_ap)](https://twitter.com/rasp_ap) [![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/RaspAP?style=social)](https://www.reddit.com/r/RaspAP/) +[![Release 2.8.5](https://img.shields.io/badge/release-v2.8.5-green)](https://github.com/raspap/raspap-webgui/releases) [![Awesome](https://awesome.re/badge.svg)](https://github.com/thibmaek/awesome-raspberry-pi) [![Join Insiders](https://img.shields.io/static/v1?label=Join%20Insiders&message=%E2%9D%A4&logo=GitHub&color=ff69b4)](https://github.com/sponsors/RaspAP) ![https://travis-ci.com/github/raspap/raspap-webgui/](https://api.travis-ci.org/RaspAP/raspap-webgui.svg) [![Crowdin](https://badges.crowdin.net/raspap/localized.svg)](https://crowdin.com/project/raspap) [![Twitter URL](https://img.shields.io/twitter/url?label=%40RaspAP&logoColor=%23d8224c&url=https%3A%2F%2Ftwitter.com%2Frasp_ap)](https://twitter.com/rasp_ap) [![Subreddit subscribers](https://img.shields.io/reddit/subreddit-subscribers/RaspAP?style=social)](https://www.reddit.com/r/RaspAP/) RaspAP is feature-rich wireless router software that _just works_ on many popular [Debian-based devices](#supported-operating-systems), including the Raspberry Pi. Our popular [Quick installer](#quick-installer) creates a known-good default configuration for all current Raspberry Pis with onboard wireless. A fully responsive, mobile-ready interface gives you control over the relevant services and networking options. Advanced DHCP settings, WireGuard and OpenVPN support, [SSL certificates](https://docs.raspap.com/ssl-quick/), security audits, [captive portal integration](https://docs.raspap.com/captive/), themes and [multilingual options](https://docs.raspap.com/translations/) are included. diff --git a/includes/defaults.php b/includes/defaults.php index bdc38dfb..600343e9 100755 --- a/includes/defaults.php +++ b/includes/defaults.php @@ -6,7 +6,7 @@ if (!defined('RASPI_CONFIG')) { $defaults = [ 'RASPI_BRAND_TEXT' => 'RaspAP', - 'RASPI_VERSION' => '2.8.4', + 'RASPI_VERSION' => '2.8.5', 'RASPI_CONFIG_NETWORK' => RASPI_CONFIG.'/networking/defaults.json', 'RASPI_ADMIN_DETAILS' => RASPI_CONFIG.'/raspap.auth', 'RASPI_WIFI_AP_INTERFACE' => 'wlan0', diff --git a/index.php b/index.php index 2a25876c..ccfa3188 100755 --- a/index.php +++ b/index.php @@ -5,16 +5,16 @@ * * Simple AP setup & WiFi management for Debian-based devices. * Enables use of simple web interface rather than SSH to control WiFi and related services on the Raspberry Pi. - * Recommended distribution is Raspberry Pi OS (32-bit) Lite. Specific instructions to install the supported software are + * Recommended distribution is Raspberry Pi OS (64-bit) Lite. Specific instructions to install the supported software are * in the README and original post by @SirLagz. For a quick run through, the packages required for the WebGUI are: * lighttpd (version 1.4.59 installed via apt) - * php-cgi (version 7.4.25 installed via apt) + * php-cgi (version 7.4.28 installed via apt) * along with their supporting packages, php7.3 will also need to be enabled. * * @author Lawrence Yau * @author Bill Zimmerman * @license GNU General Public License, version 3 (GPL-3.0) - * @version 2.8.4 + * @version 2.8.5 * @link https://github.com/RaspAP/raspap-webgui/ * @link https://raspap.com/ * @see http://sirlagz.net/2013/02/08/raspap-webgui/ From f299427ad12ce7057b896bdb31e8672d13fbfcfb Mon Sep 17 00:00:00 2001 From: billz Date: Tue, 28 Jun 2022 10:17:37 +0100 Subject: [PATCH 47/48] Update fr_FR locale + compile .mo, thx @p0lycarpio --- locale/fr_FR/LC_MESSAGES/messages.mo | Bin 25707 -> 35389 bytes locale/fr_FR/LC_MESSAGES/messages.po | 305 +++++++++++++++++++++++++-- 2 files changed, 289 insertions(+), 16 deletions(-) diff --git a/locale/fr_FR/LC_MESSAGES/messages.mo b/locale/fr_FR/LC_MESSAGES/messages.mo index c86cdd43b8a39d2e4fac7592ed57c8b7366ab716..3073b13acf4f514b2f073d62cb8e3760e9ddd8e1 100644 GIT binary patch literal 35389 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�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 diff --git a/locale/fr_FR/LC_MESSAGES/messages.po b/locale/fr_FR/LC_MESSAGES/messages.po index fb11cb2c..4072a743 100644 --- a/locale/fr_FR/LC_MESSAGES/messages.po +++ b/locale/fr_FR/LC_MESSAGES/messages.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: raspap\n" "Report-Msgid-Bugs-To: Bill Zimmerman \n" "POT-Creation-Date: 2017-10-19 08:56+0000\n" -"PO-Revision-Date: 2021-06-12 19:03\n" +"PO-Revision-Date: 2022-06-28 09:13\n" "Last-Translator: Bill Zimmerman \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -146,9 +146,33 @@ msgstr "Dissimuler" msgid "Not configured" msgstr "Pas configuré" +msgid "Connected" +msgstr "Connecté" + +msgid "Known" +msgstr "Connu" + +msgid "Nearby" +msgstr "À proximité" + msgid "Note: WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP" msgstr "Remarque: Les points d'accès WEP apparaissent comme 'ouverts'. RaspAP ne prend actuellement pas en charge la connexion via WEP" +msgid "No Wifi stations found" +msgstr "Aucune station Wi-Fi trouvée" + +msgid "Reinitializing wpa_supplicant" +msgstr "Réinitialisation de wpa_supplicant" + +msgid "Click 'Rescan' to search for nearby Wifi stations." +msgstr "Cliquez sur « Re-scanner » pour rechercher les stations Wifi à proximité." + +msgid "Click 'Reinitialize' to force reinitialize wpa_supplicant." +msgstr "Cliquez sur \"Réinitialiser\" pour forcer la réinitialisation de wpa_supplicant." + +msgid "Reinitialize" +msgstr "Réinitialiser" + #: includes/dashboard.php msgid "Interface Information" msgstr "Informations d'interface" @@ -243,6 +267,60 @@ msgstr "Arrêtez wlan0" msgid "Connected Devices" msgstr "Appareils connectés" +msgid "Client: Ethernet cable" +msgstr "Client : câble Ethernet" + +msgid "Ethernet" +msgstr "Ethernet" + +msgid "Client: Smartphone (USB tethering)" +msgstr "Client : Smartphone (partage de connexion USB)" + +msgid "Smartphone" +msgstr "Smartphone" + +msgid "WiFi" +msgstr "Wi-Fi" + +msgid "Mobile Data Client" +msgstr "Client de données mobiles" + +msgid "Mobile Data" +msgstr "Données mobiles" + +msgid "No information available" +msgstr "Pas d'information disponible" + +msgid "Interface name invalid" +msgstr "Nom d'interface invalide" + +msgid "Required exec function is disabled. Check if exec is not added to php disable_functions." +msgstr "La fonction exec requise est désactivée. Vérifiez si exec n'est pas ajouté à php disable_functions." + +msgid "Waiting for the interface to start ..." +msgstr "En attente du démarrage de l'interface..." + +msgid "Stop the Interface" +msgstr "Arrêter l'interface" + +msgid "Connection mode" +msgstr "Mode de connexion" + +msgid "Signal quality" +msgstr "Qualité du signal" + +msgid "WAN IP" +msgstr "IP WAN" + +msgid "Web-GUI" +msgstr "Interface web" + +msgid "Signal strength" +msgstr "Intensité du signal" + +msgid "No Client device or not yet configured" +msgstr "Aucun appareil client ou pas encore configuré" + #: includes/dhcp.php msgid "DHCP server settings" msgstr "Paramètres du serveur DHCP" @@ -289,6 +367,9 @@ msgstr "Temps d'expiration" msgid "MAC Address" msgstr "Adresse Mac" +msgid "Optional comment" +msgstr "Commentaire optionnel" + msgid "Host name" msgstr "Nom d'hôte" @@ -404,8 +485,8 @@ msgstr "Type de sécurité" msgid "Encryption Type" msgstr "Type de chiffrement" -msgid "PSK" -msgstr "PSK" +msgid "Pre-shared key (PSK)" +msgstr "Clé pré-partagée (PSK)" msgid "Advanced settings" msgstr "Réglages avancés" @@ -417,7 +498,7 @@ msgid "Information provided by hostapd" msgstr "Informations fournies par hostapd" msgid "Attempting to start hotspot" -msgstr "Tentative de démarrage du hotspot" +msgstr "Tentative de démarrage du point d'accès" msgid "Attempting to stop hotspot" msgstr "Tentative d'arrêt du hotspot" @@ -441,7 +522,7 @@ msgid "Country code must be blank or two characters" msgstr "Le code du pays doit être vide ou deux caractères" msgid "Wifi Hotspot settings saved" -msgstr "Paramètres de hotspot WI-FI enregistrés" +msgstr "Paramètres de point d'accès WI-FI enregistrés" msgid "Unable to save wifi hotspot settings" msgstr "Impossible d'enregistrer le réglage du hotspot Wi-Fi" @@ -473,8 +554,8 @@ msgstr "Masquer le SSID en diffusion" msgid "Maximum number of clients" msgstr "Nombre maximum de clients" -msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." -msgstr "l'option max_num_sta de hostapd. La valeur par défaut et maximum est 2007. Si vide ou 0, la valeur par défaut s'applique." +msgid "Configures the max_num_sta option of hostapd. The default and maximum is 2007. If empty or 0, the default applies." +msgstr "Configure l'option max_num_sta de hostapd. La valeur par défaut et maximum est 2007. Si vide ou 0, la valeur par défaut s'applique." msgid "Beacon interval" msgstr "intervalle balise Beacon" @@ -489,11 +570,53 @@ msgid "Executing RaspAP service start" msgstr "Démarrage du service RaspAP" msgid "Close" -msgstr "Fermé" +msgstr "Fermer" msgid "Enable this option to log hostapd activity." msgstr "Activer les logs d'activité avec l'option hostapd" +msgid "Transmit power (dBm)" +msgstr "Puissance de transmission (dBm)" + +msgid "Sets the txpower option for the AP interface and the configured country." +msgstr "Définit l'option txpower pour le point d'accès et le pays configuré." + +msgid "dBm is a unit of level used to indicate that a power ratio is expressed in decibels (dB) with reference to one milliwatt (mW). 30 dBm is equal to 1000 mW, while 0 dBm equals 1.25 mW." +msgstr "dBm est une unité de mesure utilisée pour indiquer qu'un rapport de puissance est exprimé en décibels (dB) avec une référence à un milliwatt (mW). 30 dBm est égal à 1000 mW, tandis que 0 dBm équivaut à 1,25 mW." + +msgid "WPA and WPA2" +msgstr "WPA et WPA2" + +msgid "WPA2 and WPA3-Personal (transitional mode)" +msgstr "WPA2 et WPA3-Personal (mode transitoire)" + +msgid "WPA3-Personal (required)" +msgstr "WPA3-Personnel (obligatoire)" + +msgid "Enabled (for supported clients)" +msgstr "Activé (pour les clients pris en charge)" + +msgid "Required (for supported clients)" +msgstr "Requis (pour les clients pris en charge)" + +msgid "802.11w extends strong cryptographic protection to a select set of robust management frames, including Deauthentication, Disassociation and certain categories of Action Management frames. Collectively, this is known as Management Frame Protection (MFP)." +msgstr "La norme 802.11w étend la protection cryptographique forte à un ensemble sélectionné de trames de gestion robustes, notamment la désauthentification, la dissociation et certaines catégories de trames de gestion d'action. L'ensemble de ces éléments est connu sous le nom de Management Frame Protection (MFP)." + +msgid "Scan this QR code directly or %s %sprint a sign%s for your users." +msgstr "Scannez ce code QR directement ou %s %simprimez un panneau%s pour vos utilisateurs." + +msgid "Printable Wi-Fi sign" +msgstr "Panneau Wi-Fi imprimable" + +msgid "To connect with your phone or tablet, scan the QR code above with your camera app." +msgstr "Pour vous connecter à votre téléphone ou tablette, scannez le QR code ci-dessus avec votre application caméra." + +msgid "For other devices, use the login credentials below." +msgstr "Pour les autres appareils, utilisez les identifiants ci-dessous." + +msgid "Network" +msgstr "Réseau" + #: includes/networking.php msgid "Summary" msgstr "Sommaire" @@ -537,6 +660,57 @@ msgstr "Appliquer les paramètres" msgid "Information provided by /sys/class/net" msgstr "Informations fournies par /sys/class/net" +msgid "Network Devices" +msgstr "Périphériques réseau" + +msgid "Mobile Data Settings" +msgstr "Paramètres des données mobiles" + +msgid "Properties of network devices" +msgstr "Propriétés des périphériques réseau" + +msgid "Device" +msgstr "Appareil" + +msgid "MAC" +msgstr "MAC" + +msgid "USB vid/pid" +msgstr "USB vid/pid" + +msgid "Device type" +msgstr "Type d'appareil" + +msgid "Fixed name" +msgstr "Nom fixe" + +msgid "Change" +msgstr "Modifier" + +msgid "Settings for Mobile Data Devices" +msgstr "Paramètres pour les périphériques de données mobiles" + +msgid "PIN of SIM card" +msgstr "PIN de la carte SIM" + +msgid "APN Settings (Modem device ppp0)" +msgstr "Paramètres APN (modem ppp0)" + +msgid "Access Point Name (APN)" +msgstr "Nom du point d'accès (APN)" + +msgid "Password" +msgstr "Mot de passe" + +msgid "Successfully Updated Network Configuration" +msgstr "Configuration réseau mise à jour" + +msgid "Error saving network configuration to file" +msgstr "Erreur lors de l'enregistrement du fichier de configuration réseau" + +msgid "Unable to detect interface" +msgstr "Impossible de détecter l'interface" + #: includes/system.php msgid "System Information" msgstr "Informations du système" @@ -883,14 +1057,44 @@ msgstr "Un Host personnalisée non valide a été trouvée sur la ligne " msgid "Tunnel settings" msgstr "Paramètres du tunnel" +msgid "Configuration Method" +msgstr "Méthode de configuration" + +msgid "Upload file" +msgstr "Charger un fichier" + +msgid "Create manually" +msgstr "Créer manuellement" + +msgid "Upload a WireGuard config" +msgstr "Charger une configuration WireGuard" + +msgid "This option uploads and installs an existing WireGuard .conf file on this device." +msgstr "Cette option télécharge et installe un fichier WireGuard .conf existant sur cet appareil." + +msgid "Apply iptables rules for AP interface" +msgstr "Appliquer les règles iptables au point d'accès" + +msgid "Recommended if you wish to forward network traffic from the wg0 interface to clients connected on the AP interface." +msgstr "Recommandé si vous souhaitez transférer le trafic réseau de l'interface wg0 aux clients connectés au point d'accès." + +msgid "This option adds iptables Postup and PostDown rules for the configured AP interface (%s)." +msgstr "Cette option ajoute des règles iptables Postup et PostDown pour l'interface AP configurée (%s)." + +msgid "Select WireGuard configuration file (.conf)" +msgstr "Sélectionner le fichier de configuration WireGuard (.conf)" + +msgid "Create a local WireGuard config" +msgstr "Créer une configuration locale WireGuard" + msgid "Enable server" msgstr "Activer le serveur" -msgid "Enable this option to encrypt traffic by creating a tunnel between RaspAP and configured peers." -msgstr "Active cette option pour chiffrer le trafic en créant un tunnel entre RaspAP et les pairs configurés." +msgid "Enable this option to secure network traffic by creating an encrypted tunnel between RaspAP and configured peers." +msgstr "Activer cette option pour sécuriser le trafic réseau en créant un tunnel chiffré entre RaspAP et les pairs configurés." -msgid "This option adds wg0.conf to the WireGuard configuration." -msgstr "Cette option ajoute wg0.conf à la configuration de WireGuard." +msgid "This setting generates a new WireGuard .conf file on this device." +msgstr "Ce paramètre génère un nouveau fichier WireGuard .conf sur cet appareil." msgid "Local public key" msgstr "Clé publique locale" @@ -928,11 +1132,11 @@ msgstr "Adresses IP autorisées" msgid "Persistent keepalive" msgstr "Keepalive persistant" -msgid "Display WireGuard status" -msgstr "Afficher le statut WireGuard" +msgid "Enable this option to display an updated wg-quick debug log." +msgstr "Activer cette option pour afficher un journal de débogage de wg-quick." -msgid "Enable this option to display an updated WireGuard status." -msgstr "Activer cette option pour afficher un statut WireGuard mis à jour." +msgid "WireGuard debug log updated" +msgstr "Journal de débogage WireGuard mis à jour" msgid "Scan this QR code with your client to connect to this tunnel" msgstr "Scannez ce code QR avec votre client pour vous connecter à ce tunnel" @@ -964,3 +1168,72 @@ msgstr "Configuration de WireGuard mise à jour avec succès" msgid "WireGuard configuration failed to be updated" msgstr "La configuration WireGuard n'a pas pu être mise à jour" +msgid "Client Firewall" +msgstr "Pare-feu client" + +msgid "Firewall is ENABLED" +msgstr "Le pare-feu est activé" + +msgid "Firewall is OFF" +msgstr "Le pare-feu est désactivé" + +msgid "The default firewall will only allow outgoing and already established traffic." +msgstr "Le pare-feu par défaut n'autorisera que le trafic sortant et déjà établi." + +msgid "No incoming UDP traffic is allowed." +msgstr "Aucun trafic UDP entrant n'est autorisé." + +msgid "There are no restrictions for the access point %s." +msgstr "Il n'y a pas de restrictions pour le point d'accès %s." + +msgid "Exception: Service" +msgstr "Exception : service" + +msgid "allow SSH access on port 22" +msgstr "Autoriser l'accès SSH sur le port 22" + +msgid "allow access to the RaspAP GUI on port 80 or 443" +msgstr "Autoriser l'accès à l'interface RaspAP sur le port 80 ou 443" + +msgid "Allow incoming connections for some services from the internet side." +msgstr "Autoriser les connexions entrantes pour certains services Internet." + +msgid "Exception: network device" +msgstr "Exception : périphérique réseau" + +msgid "Exclude device(s)" +msgstr "Exclure le(s) appareil(s)" + +msgid "Exclude the given network device(s) (separated by a blank or comma) from firewall rules." +msgstr "Exclure le(s) périphérique(s) réseau (séparés par un vide ou une virgule) des règles de pare-feu." + +msgid "Current client devices: %s" +msgstr "Périphériques clients actuels : %s" + +msgid "The access point %s is per default excluded." +msgstr "Le point d'accès %s est exclu par défaut." + +msgid "Exception: IP-Address" +msgstr "Exception : adresse IP" + +msgid "Allow incoming connections from" +msgstr "Autoriser les connexions entrantes depuis" + +msgid "For the given IP-addresses (separated by a blank or comma) the incoming connection (via TCP and UDP) is accepted." +msgstr "Pour les adresses IP fournies (séparées par un vide ou une virgule) la connexion entrante (via TCP et UDP) est acceptée." + +msgid "This is required for an OpenVPN via UDP or Wireguard connection." +msgstr "Ceci est requis pour une connexion OpenVPN via UDP ou Wireguard." + +msgid "The list of configured VPN server IP addresses: %s" +msgstr "La liste des adresses IP du serveur VPN configurées : %s" + +msgid "Disable Firewall" +msgstr "Désactiver le pare-feu" + +msgid "Enable Firewall" +msgstr "Activer le pare-feu" + +msgid "Apply changes" +msgstr "Appliquer les modifications" + From 78156484bf138283484ddf49ad1cd8e2d630fa64 Mon Sep 17 00:00:00 2001 From: Megan Howell <62813469+cyberqueen-meg@users.noreply.github.com> Date: Sat, 16 Jul 2022 16:07:39 -0700 Subject: [PATCH 48/48] Update to not freak out over vlans https://www.reddit.com/r/RaspAP/comments/w0mm0v/how_to_configure_dhcp_on_vlan_interfaces/ --- includes/dhcp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/dhcp.php b/includes/dhcp.php index 850d5847..62371722 100755 --- a/includes/dhcp.php +++ b/includes/dhcp.php @@ -120,7 +120,7 @@ function validateDHCPInput() { define('IFNAMSIZ', 16); $iface = $_POST['interface']; - if (!preg_match('/^[a-zA-Z0-9]+$/', $iface) + if (!preg_match('/^[^\s\/\\0]+$/', $iface) || strlen($iface) >= IFNAMSIZ ) { $errors .= _('Invalid interface name.').'
'.PHP_EOL;