From d8626bd7902945e18012df97dcbeced97a814792 Mon Sep 17 00:00:00 2001 From: zbchristian <33725910+zbchristian@users.noreply.github.com> Date: Thu, 2 Sep 2021 10:58:34 +0200 Subject: [PATCH 01/13] Zbchristian fix wifi client connect #53 --- includes/wifi_functions.php | 17 +++++++++++++---- templates/wifi_stations.php | 9 ++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/includes/wifi_functions.php b/includes/wifi_functions.php index b7b543df..fb7071f4 100755 --- a/includes/wifi_functions.php +++ b/includes/wifi_functions.php @@ -6,9 +6,11 @@ function knownWifiStations(&$networks) { // Find currently configured networks exec(' sudo cat ' . RASPI_WPA_SUPPLICANT_CONFIG, $known_return); + $index = 0; foreach ($known_return as $line) { if (preg_match('/network\s*=/', $line)) { - $network = array('visible' => false, 'configured' => true, 'connected' => false); + $network = array('visible' => false, 'configured' => true, 'connected' => false, 'index' => $index); + ++$index; } elseif (isset($network) && $network !== null) { if (preg_match('/^\s*}\s*$/', $line)) { $networks[$ssid] = $network; @@ -68,6 +70,12 @@ function nearbyWifiStations(&$networks, $cached = true) exec('cat '.RASPI_HOSTAPD_CONFIG.' | sed -rn "s/ssid=(.*)\s*$/\1/p" ', $ap_ssid); $ap_ssid = $ap_ssid[0]; + $index = 0; + if ( !empty($networks) ) { + $lastnet = end($networks); + if ( isset($lastnet['index']) ) $index = $lastnet['index'] + 1; + } + foreach (explode("\n", $scan_results) as $network) { $arrNetwork = preg_split("/[\t]+/", $network); // split result into array @@ -84,8 +92,6 @@ function nearbyWifiStations(&$networks, $cached = true) continue; } - $networks[$ssid]['ssid'] = $ssid; - // If network is saved if (array_key_exists($ssid, $networks)) { $networks[$ssid]['visible'] = true; @@ -93,13 +99,16 @@ function nearbyWifiStations(&$networks, $cached = true) // TODO What if the security has changed? } else { $networks[$ssid] = array( + 'ssid' => $ssid, 'configured' => false, 'protocol' => ConvertToSecurity($arrNetwork[3]), 'channel' => ConvertToChannel($arrNetwork[1]), 'passphrase' => '', 'visible' => true, - 'connected' => false + 'connected' => false, + 'index' => $index ); + ++$index; } // Save RSSI, if the current value is larger than the already stored diff --git a/templates/wifi_stations.php b/templates/wifi_stations.php index 6949a51a..1e3e0d2a 100755 --- a/templates/wifi_stations.php +++ b/templates/wifi_stations.php @@ -19,7 +19,8 @@

- + + @@ -29,7 +30,8 @@

- + + @@ -39,7 +41,8 @@

- + + From 74b6a15a75df36129c0ebf902dd6592ee0ddfc24 Mon Sep 17 00:00:00 2001 From: zbchristian <33725910+zbchristian@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:37:45 +0200 Subject: [PATCH 02/13] Correct non-ASCII SSID read from wpa_supplicant --- includes/wifi_functions.php | 1 + 1 file changed, 1 insertion(+) diff --git a/includes/wifi_functions.php b/includes/wifi_functions.php index fb7071f4..978fb50c 100755 --- a/includes/wifi_functions.php +++ b/includes/wifi_functions.php @@ -20,6 +20,7 @@ function knownWifiStations(&$networks) switch (strtolower($lineArr[0])) { case 'ssid': $ssid = trim($lineArr[1], '"'); + $ssid = str_replace('P"','',$ssid); $network['ssid'] = $ssid; break; case 'psk': From 5cbb785529b263e4d0e2a153cd67b4482fca207a Mon Sep 17 00:00:00 2001 From: zbchristian <33725910+zbchristian@users.noreply.github.com> Date: Wed, 18 Aug 2021 20:24:36 +0200 Subject: [PATCH 04/13] Handle non-ASCII SSID MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Non-ASCII SSID has to be stored in wpa_supplicant.conf identical to the string given by wpa_cli scan. This includes the escaped special chars (e.g. ö = \xc3\xb9 ), with a prescript "P". To obtain a valid psk from wpa_passphrase, the UTF8 string is passed (ssid2utf8 replaces the \x bytes by their binary value) to the exec(). For this to work the shell locale has to be UTF8 (via putenv()). Otherwise the string is converted to the shell encoding. --- includes/configure_client.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/includes/configure_client.php b/includes/configure_client.php index 540f0fef..ddaa4205 100755 --- a/includes/configure_client.php +++ b/includes/configure_client.php @@ -61,7 +61,7 @@ function DisplayWPAConfig() if (strlen($network['passphrase']) >=8 && strlen($network['passphrase']) <= 63) { unset($wpa_passphrase); unset($line); - exec('wpa_passphrase '.escapeshellarg($ssid). ' ' . escapeshellarg($network['passphrase']), $wpa_passphrase); + exec('wpa_passphrase '. ssid2utf8( escapeshellarg($ssid) ) . ' ' . escapeshellarg($network['passphrase']), $wpa_passphrase); foreach ($wpa_passphrase as $line) { if (preg_match('/^\s*}\s*$/', $line)) { if (array_key_exists('priority', $network)) { @@ -69,7 +69,11 @@ function DisplayWPAConfig() } fwrite($wpa_file, $line.PHP_EOL); } else { - fwrite($wpa_file, $line.PHP_EOL); + if ( strpos($ssid, "\x") !== false && strpos($line, "ssid=\"") !== false ) { + fwrite($wpa_file, "\tssid=P\"".$ssid."\"".PHP_EOL); + } else { + fwrite($wpa_file, $line.PHP_EOL); + } } } } else { From 634eb7276092612bb5a8841da9a37358b1aea6f8 Mon Sep 17 00:00:00 2001 From: zbchristian <33725910+zbchristian@users.noreply.github.com> Date: Wed, 18 Aug 2021 21:57:30 +0200 Subject: [PATCH 05/13] Convert non ASCII ssid for display to utf8 Convert hex bytes to binary. Assumes utf8 encoding --- includes/wifi_functions.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/includes/wifi_functions.php b/includes/wifi_functions.php index 978fb50c..3f13738a 100755 --- a/includes/wifi_functions.php +++ b/includes/wifi_functions.php @@ -190,3 +190,12 @@ function reinitializeWPA($force) return $result; } +/* + * Replace escaped bytes (hex) by binary - assume UTF8 encoding + * + * @param string $ssid + */ +function ssid2utf8($ssid) { + return evalHexSequence($ssid); +} + From db9f76eb5ce82b8cd1c8d729e6a7487f918043d1 Mon Sep 17 00:00:00 2001 From: zbchristian <33725910+zbchristian@users.noreply.github.com> Date: Tue, 31 Aug 2021 16:18:00 +0200 Subject: [PATCH 06/13] only lower case hex sequences in non-ASCII SSID --- includes/functions.php | 27 +++++++++++++++++++++++++++ includes/wifi_functions.php | 3 +-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/includes/functions.php b/includes/functions.php index 0e8336b8..5a59bfad 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -648,3 +648,30 @@ function evalHexSequence($string) { return preg_replace_callback('/\\\x(..)/', $evaluator, $string); } +function hexSequence2lower($string) { + return preg_replace_callback('/\\\\x([0-9A-F]{2})/', function($b){ return '\x'.strtolower($b[1]); }, $string); +} + +/* File upload callback object + * + */ +class validation +{ + public function check_name_length($object) + { + if (strlen($object->file['filename']) > 255) { + $object->set_error('File name is too long.'); + } + } +} + +/* Resolves public IP address + * + * @return string $public_ip + */ +function get_public_ip() +{ + exec('wget https://ipinfo.io/ip -qO -', $public_ip); + return $public_ip[0]; +} + diff --git a/includes/wifi_functions.php b/includes/wifi_functions.php index 3f13738a..dcc57ede 100755 --- a/includes/wifi_functions.php +++ b/includes/wifi_functions.php @@ -81,7 +81,6 @@ function nearbyWifiStations(&$networks, $cached = true) $arrNetwork = preg_split("/[\t]+/", $network); // split result into array $ssid = trim($arrNetwork[4]); - $ssid = evalHexSequence($ssid); // exclude raspap ssid if (empty($ssid) || $ssid == $ap_ssid) { @@ -126,7 +125,7 @@ function connectedWifiStations(&$networks) exec('iwconfig ' .$_SESSION['wifi_client_interface'], $iwconfig_return); foreach ($iwconfig_return as $line) { if (preg_match('/ESSID:\"([^"]+)\"/i', $line, $iwconfig_ssid)) { - $networks[$iwconfig_ssid[1]]['connected'] = true; + $networks[hexSequence2lower($iwconfig_ssid[1])]['connected'] = true; } } } From c33cf5f81a86765021dead2f1902c439c9360e4f Mon Sep 17 00:00:00 2001 From: zbchristian <33725910+zbchristian@users.noreply.github.com> Date: Wed, 18 Aug 2021 22:10:33 +0200 Subject: [PATCH 07/13] Fix display of non-ASCII SSID --- ajax/networking/wifi_stations.php | 1 + templates/wifi_stations/network.php | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ajax/networking/wifi_stations.php b/ajax/networking/wifi_stations.php index aca5bc89..ecc9c098 100644 --- a/ajax/networking/wifi_stations.php +++ b/ajax/networking/wifi_stations.php @@ -14,6 +14,7 @@ knownWifiStations($networks); nearbyWifiStations($networks, !isset($_REQUEST["refresh"])); connectedWifiStations($networks); sortNetworksByRSSI($networks); +foreach ($networks as $ssid => $network) $networks[$ssid]["ssidutf8"] = ssid2utf8( $ssid ); $connected = array_filter($networks, function($n) { return $n['connected']; } ); $known = array_filter($networks, function($n) { return !$n['connected'] && $n['configured']; } ); diff --git a/templates/wifi_stations/network.php b/templates/wifi_stations/network.php index 1bdcb786..1199a5e5 100644 --- a/templates/wifi_stations/network.php +++ b/templates/wifi_stations/network.php @@ -3,9 +3,8 @@ -
- + } ?> +
From 4408940a3d3c27d1d637c36b9b93bdf37cb64c52 Mon Sep 17 00:00:00 2001 From: zbchristian <33725910+zbchristian@users.noreply.github.com> Date: Wed, 8 Sep 2021 14:28:43 +0200 Subject: [PATCH 08/13] Improve detection of escaped hex bytes in ssid name --- includes/configure_client.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/configure_client.php b/includes/configure_client.php index ddaa4205..19269025 100755 --- a/includes/configure_client.php +++ b/includes/configure_client.php @@ -69,7 +69,7 @@ function DisplayWPAConfig() } fwrite($wpa_file, $line.PHP_EOL); } else { - if ( strpos($ssid, "\x") !== false && strpos($line, "ssid=\"") !== false ) { + if ( preg_match('/\\\\x[0-9A-Fa-f]{2}/',$ssid) && strpos($line, "ssid=\"") !== false ) { fwrite($wpa_file, "\tssid=P\"".$ssid."\"".PHP_EOL); } else { fwrite($wpa_file, $line.PHP_EOL); From 37bc68c91a7a381827d8894c0f51e3b99d0fd31a Mon Sep 17 00:00:00 2001 From: billz Date: Thu, 25 Nov 2021 08:05:38 +0000 Subject: [PATCH 09/13] Update default getColorOpt() --- includes/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/functions.php b/includes/functions.php index 5a59bfad..b50d1faa 100755 --- a/includes/functions.php +++ b/includes/functions.php @@ -615,7 +615,7 @@ function getThemeOpt() function getColorOpt() { if (!isset($_COOKIE['color'])) { - $color = "#d8224c"; + $color = "#2b8080"; } else { $color = $_COOKIE['color']; } From 6b777ff8c25343834ae34d129cb032ba7332a48b Mon Sep 17 00:00:00 2001 From: billz Date: Thu, 25 Nov 2021 09:02:59 +0000 Subject: [PATCH 10/13] Update release version --- README.md | 2 +- includes/defaults.php | 2 +- index.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0cba7a87..b809448b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ![](https://i.imgur.com/xeKD93p.png) -[![Release 2.7.0](https://img.shields.io/badge/release-v2.7.0-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.7.1](https://img.shields.io/badge/release-v2.7.1-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 cf57e803..431b7f4d 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.7.0', + 'RASPI_VERSION' => '2.7.1', '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 f727ea0c..d8dc0285 100755 --- a/index.php +++ b/index.php @@ -14,7 +14,7 @@ * @author Lawrence Yau * @author Bill Zimmerman * @license GNU General Public License, version 3 (GPL-3.0) - * @version 2.7.0 + * @version 2.7.1 * @link https://github.com/raspap/raspap-webgui/ * @link https://raspap.com/ * @see http://sirlagz.net/2013/02/08/raspap-webgui/ From d75175848fa2b6fa6a11619f8ffa4fa40c935bd7 Mon Sep 17 00:00:00 2001 From: Bill Zimmerman Date: Wed, 29 Dec 2021 12:39:59 +0100 Subject: [PATCH 11/13] Fix for issue RaspAP/raspap-webgui#1016 --- includes/dhcp.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/includes/dhcp.php b/includes/dhcp.php index 3e53017a..850d5847 100755 --- a/includes/dhcp.php +++ b/includes/dhcp.php @@ -180,9 +180,7 @@ function compareIPs($ip1, $ip2) function updateDnsmasqConfig($iface,$status) { $config = '# RaspAP '.$iface.' configuration'.PHP_EOL; - $config .= 'interface='.$iface.PHP_EOL. - 'dhcp-range='.$_POST['RangeStart'].','.$_POST['RangeEnd']. - ',255.255.255.0,'; + $config .= 'interface='.$iface.PHP_EOL.'dhcp-range='.$_POST['RangeStart'].','.$_POST['RangeEnd'].','.$_POST['SubnetMask'].','; if ($_POST['RangeLeaseTimeUnits'] !== 'infinite') { $config .= $_POST['RangeLeaseTime']; } From 0c5ecb549d9bf9672425503908be3ab52a6ac2df Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 29 Dec 2021 13:27:34 +0000 Subject: [PATCH 12/13] Update release version - First Insiders Edition --- README.md | 228 +++++++++++++++++++++++++++++------------- includes/defaults.php | 2 +- index.php | 8 +- 3 files changed, 164 insertions(+), 74 deletions(-) diff --git a/README.md b/README.md index 4f872919..3b78e7e9 100644 --- a/README.md +++ b/README.md @@ -1,87 +1,177 @@ -![](https://i.imgur.com/FRU1tXF.png) -[![Release 2.8.0](https://img.shields.io/badge/release-2.8.0-green)](https://github.com/raspap/raspap-insiders/releases) [![Awesome](https://awesome.re/badge.svg)](https://github.com/thibmaek/awesome-raspberry-pi) [![Insiders Edition](https://img.shields.io/static/v1?label=Insiders%20Edition&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/) +![](https://i.imgur.com/xeKD93p.png) +[![Release 2.8.0](https://img.shields.io/badge/release-v2.8.0-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/) -Welcome to **RaspAP Insiders**. You, the members of the Insiders community, support the sponsorware release model, which means that new features are first exclusively released to sponsors as part of Insiders. Read on for details about how this strategy works—and *thank you* for joining us on this journey. +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. +RaspAP has been featured on sites such as [Instructables](http://www.instructables.com/id/Raspberry-Pi-As-Completely-Wireless-Router/), [Adafruit](https://blog.adafruit.com/2016/06/24/raspap-wifi-configuration-portal-piday-raspberrypi-raspberry_pi/), [Raspberry Pi Weekly](https://www.raspberrypi.org/weekly/commander/) and [Awesome Raspberry Pi](https://project-awesome.org/thibmaek/awesome-raspberry-pi) and implemented in countless projects. + +We hope you enjoy using RaspAP as much as we do creating it. Tell us how you use this with [your own projects](https://github.com/raspap/raspap-awesome). + +![](https://i.imgur.com/uhBFoOB.png) +![](https://i.imgur.com/EiIpdOS.gif) +![](https://i.imgur.com/eCjUS1H.gif) +![](https://i.imgur.com/5FT2BcS.gif) +![](https://i.imgur.com/RKaBFrZ.gif) ## Contents - - [How sponsorship works](#how-sponsorship-works) - - [About your sponsorship](#about-your-sponsorship) - - [Exclusive features](#exclusive-features) - - [Funding targets](#funding-targets) - - [Frequently asked questions](#frequently-asked-questions) + - [Prerequisites](#prerequisites) + - [Quick installer](#quick-installer) + - [Join Insiders](#join-insiders) + - [WireGuard support](#wireguard-support) + - [OpenVPN support](#openvpn-support) + - [Ad Blocking](#ad-blocking) + - [Bridged AP](#bridged-ap) + - [Simultaneous AP and Wifi client](#simultaneous-ap-and-wifi-client) + - [Manual installation](#manual-installation) + - [802.11ac 5GHz support](#80211ac-5ghz-support) + - [Supported operating systems](#supported-operating-systems) + - [Multilingual support](#multilingual-support) + - [HTTPS support](#https-support) + - [How to contribute](#how-to-contribute) + - [Reporting issues](#reporting-issues) + - [License](#license) -## 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](#exclusive-features) to learn which features are currently only available to sponsors. - -## About your sponsorship -Your sponsorship is through your individual or organization's GitHub account. By visiting [**RaspAP's sponsor profile**](https://github.com/sponsors/RaspAP), you may change your sponsorship tier or cancel your sponsorship anytime. [1](#footnote-1) - -As part of the initial rollout of Insiders, all previous one-time backers of RaspAP on GitHub, PayPal or [Open Collective](https://opencollective.com/raspap) will receive unlimited access to Insiders. This is a small gesture for those early financial supporters who recognized the potential of this project. - - -> ℹ️ **Important**: If you're [sponsoring](https://github.com/sponsors/RaspAP) RaspAP 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. [2](#footnote-2) - -## 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 your Insiders access to discussions, feature requests, issues and pull requests in the private GitHub repository. - -✅ [Manage OpenVPN client configs](https://docs.raspap.com/openvpn/#multiple-client-configs) -✅ [OpenVPN certificate authentication](https://docs.raspap.com/openvpn/#certificate-authentication) -✅ OpenVPN service logging -✅ Night mode toggle -✅ Restrict network to static clients -✅ [WireGuard support](https://docs.raspap.com/wireguard/) -✅ [Set AP transmit power](https://docs.raspap.com/ap-basics/#transmit-power) -✅ Mobile data client support -✅ Firewall settings -⚙️ Traffic shaping (in progress) -⚙️ Printable WiFi signs (in progress) - -Look for the list above to grow as we add more exlcusive features. Have an idea or suggestion for a future enhancement? Start or join an [Insiders discussion](https://github.com/RaspAP/raspap-insiders/discussions) and let us know! - -## Funding targets -Following is a list of funding targets. When a funding target is reached, the features that are tied to it are merged back into RaspAP and released to the public for general availability. - -### $500 -The first **Insiders Edition** includes the exclusive features listed above. - -## Frequently asked questions - -### Upgrading -*I have an existing RaspAP installation. How do I upgrade to Insiders?* - -Upgrading is easy. Simply invoke the Quick Installer with the --upgrade switch, specifying the private Insiders Edition, like so: +## Prerequisites +Start with a clean install of the [latest release of Raspberry Pi OS (32-bit) Lite](https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit). The Raspberry Pi OS desktop and 64-bit beta distros are unsupported. +1. Update Raspbian, including the kernel and firmware, followed by a reboot: ``` -curl -sL https://install.raspap.com | bash -s -- --upgrade --insiders +sudo apt-get update +sudo apt-get full-upgrade +sudo reboot +``` +2. Set the "WLAN country" option in `raspi-config`'s **Localisation Options**: `sudo raspi-config` + +3. If you have a device without an onboard wireless chipset, the [**Edimax Wireless 802.11b/g/n nano USB adapter**](https://www.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/global/wireless_adapters_n150/ew-7811un) is an excellent option – it's small, cheap and has good driver support. + +With the prerequisites done, you can proceed with either the Quick installer or Manual installation steps below. + +## Quick installer +Install RaspAP from your device's shell prompt: +```sh +curl -sL https://install.raspap.com | bash +``` +The [installer](https://docs.raspap.com/quick/) will complete the steps in the manual installation (below) for you. + +After the reboot at the end of the installation the wireless network will be +configured as an access point as follows: +* IP address: 10.3.141.1 + * Username: admin + * Password: secret +* DHCP range: 10.3.141.50 — 10.3.141.255 +* SSID: `raspi-webgui` +* Password: ChangeMe + +**Note:** As the name suggests, the Quick Installer is a great way to quickly setup a new AP. However, it does not automagically detect the unique configuration of your system. Best results are obtained by connecting to ethernet (`eth0`) or as a WiFi client, also known as managed mode, with `wlan0`. For the latter, refer to [this FAQ](https://docs.raspap.com/faq/#headless). Special instructions for the Pi Zero W are [available here](https://docs.raspap.com/ap-sta/). + +Please [read this](https://docs.raspap.com/issues/) before reporting an issue. + +## Join Insiders +[![](https://i.imgur.com/eml7k0b.png)](https://github.com/sponsors/RaspAP/) + +RaspAP is free software, but powered by _your_ support. If you find RaspAP useful for your personal or commercial projects, [become an Insider](https://github.com/sponsors/RaspAP/) and get early access to [exclusive features](https://docs.raspap.com/insiders/#exclusive-features) in the [Insiders Edition](https://docs.raspap.com/insiders/). + +A tangible side benefit of sponsorship is that **Insiders** are able to help _steer future development of RaspAP_. This is done through Insiders' team access to discussions, feature requests, issues and more in the private GitHub repository. + +## WireGuard support + +![](https://i.imgur.com/5YDv37e.png) + +WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be considerably more performant than OpenVPN, and is generally regarded as the most secure, easiest to use, and simplest VPN solution for modern Linux distributions. + +WireGuard may be optionally installed by the [Quick Installer](https://docs.raspap.com/quick/). Once this is done, you can manage local (server) settings, create a peer configuration and control the `wg-quick` service with RaspAP. + +Details are [provided here](https://docs.raspap.com/wireguard/). + +## OpenVPN support + +![](https://i.imgur.com/ta7tCon.png) + +OpenVPN may be optionally installed by the Quick Installer. Once this is done, you can [manage client configurations](https://docs.raspap.com/openvpn/) and the `openvpn-client` service with RaspAP. + +To configure an OpenVPN client, upload a valid .ovpn file and, optionally, specify your login credentials. RaspAP will store your client configuration and add firewall rules to forward traffic from OpenVPN's `tun0` interface to your configured wireless interface. + +See our [OpenVPN documentation](https://docs.raspap.com/openvpn/) for more information. + + +## Ad Blocking +This feature uses DNS blacklisting to block requests for ads, trackers and other undesirable hosts. To enable ad blocking, simply respond to the prompt during the installation. As a beta release, we encourage testing and feedback from users of RaspAP. + +Details are [provided here](https://docs.raspap.com/adblock/). + +## Bridged AP +By default RaspAP configures a routed AP for your clients to connect to. A bridged AP configuration is also possible. Slide the **Bridged AP mode** toggle under the **Advanced** tab of **Configure hotspot**, then save and restart the hotspot. + +**Note:** In bridged mode, all routing capabilities are handled by your upstream router. Because your router assigns IP addresses to your device's hotspot and its clients, you might not be able to reach the RaspAP web interface from the default `10.3.141.1` address. Instead use your RPi's hostname followed by `.local` to access the RaspAP web interface. With Raspbian default settings, this should look like `raspberrypi.local`. Alternate methods are [discussed here](https://www.raspberrypi.org/documentation/remote-access/ip-address.md). + +More information on Bridged AP mode is provided [in our documentation](https://docs.raspap.com/bridged/). + +## Simultaneous AP and Wifi client +RaspAP lets you create an AP with a Wifi client configuration, often called [AP-STA mode](https://docs.raspap.com/ap-sta/). With your system configured in managed mode, enable the AP from the **Advanced** tab of **Configure hotspot** by sliding the **Wifi client AP mode** toggle. Save settings and start the hotspot. The managed mode AP is functional without restart. + +**Note:** This option is disabled until you configure your system as a wireless client. For a device operating in [managed mode](https://docs.raspap.com/faq/#headless) without an `eth0` connection, this configuration must be enabled [_before_ a reboot](https://docs.raspap.com/ap-sta/). + +## Manual installation +Detailed manual setup instructions are provided [on our documentation site](https://docs.raspap.com/manual/). + +## 802.11ac 5GHz support +RaspAP provides an 802.11ac wireless mode option for supported hardware (currently the RPi 3B+/4 and compatible Orange Pi models) and wireless regulatory domains. See [this FAQ](https://docs.raspap.com/faq/#80211ac) for more information. + +## Supported operating systems +RaspAP was originally made for Raspbian, but now also installs on the following Debian-based distros. + +| Distribution | Release | Architecture | Support | +|---|:---:|:---:|:---:| +| Raspberry Pi OS | (32-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 | + +![](https://i.imgur.com/luiyYNw.png) + +We find Armbian particularly well-suited for this project. Please note that "supported" is not a guarantee. If you are able to improve support for your preferred distro, we encourage you to [actively contribute](#how-to-contribute) to the project. + +## Multilingual support +RaspAP uses [GNU Gettext](https://www.gnu.org/software/gettext/) to manage multilingual messages. In order to use RaspAP with one of our supported translations, you must configure a corresponding language package on your RPi. To list languages currently installed on your system, use `locale -a` at the shell prompt. To generate new locales, run `sudo dpkg-reconfigure locales` and select any other desired locales. Details are provided on our [documentation site](https://docs.raspap.com/translations/). + +See this list of [supported languages](https://docs.raspap.com/translations/#supported-languages) that are actively maintained by volunteer translators. If your language is not supported, why not [contribute a translation](https://docs.raspap.com/translations/#contributing-to-a-translation)? Contributors will receive credit as the original translators. + +## HTTPS support +The Quick Installer may be used to [generate SSL certificates](https://docs.raspap.com/ssl-quick/) with `mkcert`. The installer automates the manual steps [described here](https://docs.raspap.com/ssl-manual/), including configuring lighttpd with SSL support. + +Simply append the `-c` or `--cert` option to the Quick Installer, like so: + +```sh +curl -sL https://install.raspap.com | bash -s -- --cert ``` -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: +**Note**: this only installs mkcert and generates an SSL certificate with the input you provide. It does *not* (re)install RaspAP. -``` -RaspAP Install: Cloning latest files from github -Cloning into '/tmp/raspap-webgui'... -Username for 'https://github.com': octocat -Password for 'https://octocat@github.com': -``` +More information on SSL certificates and HTTPS support is available [in our documentation](https://docs.raspap.com/ssl-quick/). -> ℹ️ 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. +## How to contribute +1. Fork the project in your account and create a new branch: `your-great-feature`. +2. Open an issue in the repository describing the feature contribution you'd like to make. +3. Commit changes in your feature branch. +4. Open a pull request and reference the initial issue in the pull request message. -### Terms -*We're using RaspAP for a commercial project. Can we use Insiders under the same terms and conditions?* +Find out more about our [coding style guidelines and recommended tools](CONTRIBUTING.md). -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](https://github.com/RaspAP/raspap-insiders/blob/master/LICENSE). However, we kindly ask you to respect the following guidelines: +## Reporting issues +Please [read this](https://docs.raspap.com/issues/) before reporting a bug. -* 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). +## Contributors + +### Code Contributors +This project exists thanks to all the awesome people who [contribute](CONTRIBUTING.md) their time and expertise. + + + +### Financial Contributors +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). + +Learn more about [how sponsorship works](https://docs.raspap.com/insiders/#how-sponsorship-works), and how easy it is to get access to Insiders. ## License See the [LICENSE](./LICENSE) file. -### Footnotes - -1. If you cancel your sponsorship, GitHub schedules a cancellation request which will become effective at the end of the billing cycle, which ends at the 22nd of a month for monthly sponsorships. This means that even though you cancel your sponsorship, you will keep your access to Insiders as long as your cancellation isn't effective. All charges are processed by GitHub through Stripe. As we don't receive any information regarding your payment, and GitHub doesn't offer refunds, sponsorships are non-refundable. - -2. It's currently not possible to grant access to each member of an organization, as GitHub only allows for adding users. Thus, after sponsoring, please send an email to sponsors@raspap.com, stating which account should become a collaborator of the Insiders repository. We're working on a solution which will make access to organizations much simpler. diff --git a/includes/defaults.php b/includes/defaults.php index 52b27276..3ba8d848 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.7.1', + 'RASPI_VERSION' => '2.8.0', '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 994aba5b..238f73b9 100755 --- a/index.php +++ b/index.php @@ -7,15 +7,15 @@ * 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 * in the README and original post by @SirLagz. For a quick run through, the packages required for the WebGUI are: - * lighttpd (version 1.4.53 installed via apt) - * php-cgi (version 7.3.19-1 installed via apt) + * lighttpd (version 1.4.59 installed via apt) + * php-cgi (version 7.4.25 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.7.1 - * @link https://github.com/raspap/raspap-webgui/ + * @version 2.8.0 + * @link https://github.com/RaspAP/raspap-webgui/ * @link https://raspap.com/ * @see http://sirlagz.net/2013/02/08/raspap-webgui/ * From 5017fb16b9b1248703449031583cf34ecc4a3e6f Mon Sep 17 00:00:00 2001 From: billz Date: Wed, 29 Dec 2021 15:36:22 +0000 Subject: [PATCH 13/13] Fix merge conflict --- app/img/wifi-qr-code.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/img/wifi-qr-code.php b/app/img/wifi-qr-code.php index a36966c3..acecfe85 100644 --- a/app/img/wifi-qr-code.php +++ b/app/img/wifi-qr-code.php @@ -10,11 +10,6 @@ if (!isset($_SERVER['HTTP_REFERER'])) { exit; } -function qr_encode($str) -{ - return preg_replace('/(?