mirror of
				https://github.com/billz/raspap-webgui.git
				synced 2025-03-01 10:31:47 +00:00 
			
		
		
		
	| @@ -3,92 +3,14 @@ | ||||
| require('../../includes/csrf.php'); | ||||
| include_once('../../includes/config.php'); | ||||
| include_once('../../includes/functions.php'); | ||||
| include_once('../../includes/wifi_functions.php'); | ||||
|  | ||||
| $cacheTime = filemtime(RASPI_WPA_SUPPLICANT_CONFIG); | ||||
| $cacheKey  = "wifi_stations_$cacheTime"; | ||||
| $networks = []; | ||||
| $network  = null; | ||||
| $ssid     = null; | ||||
|  | ||||
| if (isset($_REQUEST["refresh"])) { | ||||
|     deleteCache($cacheKey); | ||||
| } | ||||
| knownWifiStations($networks); | ||||
| nearbyWifiStations($networks, !isset($_REQUEST["refresh"])); | ||||
| connectedWifiStations($networks); | ||||
|  | ||||
| echo cache($cacheKey, function() { | ||||
|     $networks = []; | ||||
|     $network  = null; | ||||
|     $ssid     = null; | ||||
|  | ||||
|     // Find currently configured networks | ||||
|     exec(' sudo cat ' . RASPI_WPA_SUPPLICANT_CONFIG, $known_return); | ||||
|     foreach ($known_return as $line) { | ||||
|         if (preg_match('/network\s*=/', $line)) { | ||||
|             $network = array('visible' => false, 'configured' => true, 'connected' => false); | ||||
|         } elseif ($network !== null) { | ||||
|             if (preg_match('/^\s*}\s*$/', $line)) { | ||||
|                 $networks[$ssid] = $network; | ||||
|                 $network = null; | ||||
|                 $ssid = null; | ||||
|             } elseif ($lineArr = preg_split('/\s*=\s*/', trim($line))) { | ||||
|                 switch (strtolower($lineArr[0])) { | ||||
|                     case 'ssid': | ||||
|                         $ssid = trim($lineArr[1], '"'); | ||||
|                         break; | ||||
|                     case 'psk': | ||||
|                         if (array_key_exists('passphrase', $network)) { | ||||
|                             break; | ||||
|                         } | ||||
|                     case '#psk': | ||||
|                         $network['protocol'] = 'WPA'; | ||||
|                     case 'wep_key0': // Untested | ||||
|                         $network['passphrase'] = trim($lineArr[1], '"'); | ||||
|                         break; | ||||
|                     case 'key_mgmt': | ||||
|                         if (! array_key_exists('passphrase', $network) && $lineArr[1] === 'NONE') { | ||||
|                             $network['protocol'] = 'Open'; | ||||
|                         } | ||||
|                         break; | ||||
|                     case 'priority': | ||||
|                         $network['priority'] = trim($lineArr[1], '"'); | ||||
|                         break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     exec('sudo wpa_cli -i ' . RASPI_WIFI_CLIENT_INTERFACE . ' scan'); | ||||
|     sleep(3); | ||||
|     exec('sudo wpa_cli -i ' . RASPI_WIFI_CLIENT_INTERFACE . ' scan_results', $scan_return); | ||||
|     array_shift($scan_return); | ||||
|  | ||||
|     foreach ($scan_return as $network) { | ||||
|         $arrNetwork = preg_split("/[\t]+/", $network);  // split result into array | ||||
|  | ||||
|         // If network is saved | ||||
|         if (array_key_exists(4, $arrNetwork) && array_key_exists($arrNetwork[4], $networks)) { | ||||
|             $networks[$arrNetwork[4]]['visible'] = true; | ||||
|             $networks[$arrNetwork[4]]['channel'] = ConvertToChannel($arrNetwork[1]); | ||||
|             // TODO What if the security has changed? | ||||
|         } else { | ||||
|             $networks[$arrNetwork[4]] = array( | ||||
|                 'configured' => false, | ||||
|                 'protocol' => ConvertToSecurity($arrNetwork[3]), | ||||
|                 'channel' => ConvertToChannel($arrNetwork[1]), | ||||
|                 'passphrase' => '', | ||||
|                 'visible' => true, | ||||
|                 'connected' => false | ||||
|             ); | ||||
|         } | ||||
|  | ||||
|         // Save RSSI | ||||
|         if (array_key_exists(4, $arrNetwork)) { | ||||
|             $networks[$arrNetwork[4]]['RSSI'] = $arrNetwork[2]; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     exec('iwconfig ' . RASPI_WIFI_CLIENT_INTERFACE, $iwconfig_return); | ||||
|     foreach ($iwconfig_return as $line) { | ||||
|         if (preg_match('/ESSID:\"([^"]+)\"/i', $line, $iwconfig_ssid)) { | ||||
|             $networks[$iwconfig_ssid[1]]['connected'] = true; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return renderTemplate('wifi_stations', compact('networks')); | ||||
| }); | ||||
| echo renderTemplate('wifi_stations', compact('networks')); | ||||
|   | ||||
| @@ -1,5 +1,8 @@ | ||||
| <?php | ||||
|  | ||||
| include_once('includes/status_messages.php'); | ||||
| include_once('includes/wifi_functions.php'); | ||||
|  | ||||
| /** | ||||
| * | ||||
| * | ||||
| @@ -7,6 +10,9 @@ | ||||
| function DisplayWPAConfig() | ||||
| { | ||||
|     $status = new StatusMessages(); | ||||
|     $networks = []; | ||||
|  | ||||
|     knownWifiStations($networks); | ||||
|  | ||||
|     if (isset($_POST['connect'])) { | ||||
|         $result = 0; | ||||
| @@ -86,6 +92,9 @@ function DisplayWPAConfig() | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     nearbyWifiStations($networks); | ||||
|     connectedWifiStations($networks); | ||||
|  | ||||
| ?> | ||||
|  | ||||
|   <div class="row"> | ||||
|   | ||||
							
								
								
									
										98
									
								
								includes/wifi_functions.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								includes/wifi_functions.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | ||||
| <?php | ||||
|  | ||||
| include_once('functions.php'); | ||||
|  | ||||
| function knownWifiStations(&$networks) | ||||
| { | ||||
|     // Find currently configured networks | ||||
|     exec(' sudo cat ' . RASPI_WPA_SUPPLICANT_CONFIG, $known_return); | ||||
|     foreach ($known_return as $line) { | ||||
|         if (preg_match('/network\s*=/', $line)) { | ||||
|             $network = array('visible' => false, 'configured' => true, 'connected' => false); | ||||
|         } elseif ($network !== null) { | ||||
|             if (preg_match('/^\s*}\s*$/', $line)) { | ||||
|                 $networks[$ssid] = $network; | ||||
|                 $network = null; | ||||
|                 $ssid = null; | ||||
|             } elseif ($lineArr = preg_split('/\s*=\s*/', trim($line))) { | ||||
|                 switch (strtolower($lineArr[0])) { | ||||
|                     case 'ssid': | ||||
|                         $ssid = trim($lineArr[1], '"'); | ||||
|                         break; | ||||
|                     case 'psk': | ||||
|                         if (array_key_exists('passphrase', $network)) { | ||||
|                             break; | ||||
|                         } | ||||
|                     case '#psk': | ||||
|                         $network['protocol'] = 'WPA'; | ||||
|                     case 'wep_key0': // Untested | ||||
|                         $network['passphrase'] = trim($lineArr[1], '"'); | ||||
|                         break; | ||||
|                     case 'key_mgmt': | ||||
|                         if (! array_key_exists('passphrase', $network) && $lineArr[1] === 'NONE') { | ||||
|                             $network['protocol'] = 'Open'; | ||||
|                         } | ||||
|                         break; | ||||
|                     case 'priority': | ||||
|                         $network['priority'] = trim($lineArr[1], '"'); | ||||
|                         break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| function nearbyWifiStations(&$networks, $cached = true) | ||||
| { | ||||
|     $cacheTime = filemtime(RASPI_WPA_SUPPLICANT_CONFIG); | ||||
|     $cacheKey  = "nearby_wifi_stations_$cacheTime"; | ||||
|  | ||||
|     if ($cached == false) { | ||||
|         deleteCache($cacheKey); | ||||
|     } | ||||
|  | ||||
|     $scan_results = cache($cacheKey, function() { | ||||
|         exec('sudo wpa_cli -i ' . RASPI_WIFI_CLIENT_INTERFACE . ' scan'); | ||||
|         sleep(3); | ||||
|  | ||||
|         exec('sudo wpa_cli -i ' . RASPI_WIFI_CLIENT_INTERFACE . ' scan_results', $stdout); | ||||
|         array_shift($stdout); | ||||
|  | ||||
|         return implode("\n", $stdout); | ||||
|     }); | ||||
|  | ||||
|     foreach (explode("\n", $scan_results) as $network) { | ||||
|         $arrNetwork = preg_split("/[\t]+/", $network);  // split result into array | ||||
|  | ||||
|         // If network is saved | ||||
|         if (array_key_exists(4, $arrNetwork) && array_key_exists($arrNetwork[4], $networks)) { | ||||
|             $networks[$arrNetwork[4]]['visible'] = true; | ||||
|             $networks[$arrNetwork[4]]['channel'] = ConvertToChannel($arrNetwork[1]); | ||||
|             // TODO What if the security has changed? | ||||
|         } else { | ||||
|             $networks[$arrNetwork[4]] = array( | ||||
|                 'configured' => false, | ||||
|                 'protocol' => ConvertToSecurity($arrNetwork[3]), | ||||
|                 'channel' => ConvertToChannel($arrNetwork[1]), | ||||
|                 'passphrase' => '', | ||||
|                 'visible' => true, | ||||
|                 'connected' => false | ||||
|             ); | ||||
|         } | ||||
|  | ||||
|         // Save RSSI | ||||
|         if (array_key_exists(4, $arrNetwork)) { | ||||
|             $networks[$arrNetwork[4]]['RSSI'] = $arrNetwork[2]; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| function connectedWifiStations(&$networks) | ||||
| { | ||||
|     exec('iwconfig ' . RASPI_WIFI_CLIENT_INTERFACE, $iwconfig_return); | ||||
|     foreach ($iwconfig_return as $line) { | ||||
|         if (preg_match('/ESSID:\"([^"]+)\"/i', $line, $iwconfig_ssid)) { | ||||
|             $networks[$iwconfig_ssid[1]]['connected'] = true; | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user