mirror of
				https://github.com/billz/raspap-webgui.git
				synced 2025-03-01 10:31:47 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			101 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
 | 
						|
include_once('includes/status_messages.php');
 | 
						|
include_once('includes/wifi_functions.php');
 | 
						|
 | 
						|
/**
 | 
						|
*
 | 
						|
*
 | 
						|
*/
 | 
						|
function DisplayWPAConfig()
 | 
						|
{
 | 
						|
    $status = new StatusMessages();
 | 
						|
    $networks = [];
 | 
						|
 | 
						|
    knownWifiStations($networks);
 | 
						|
 | 
						|
    if (isset($_POST['connect'])) {
 | 
						|
        $result = 0;
 | 
						|
        exec('sudo wpa_cli -i ' . RASPI_WPA_CTRL_INTERFACE . ' select_network '.strval($_POST['connect']));
 | 
						|
    } elseif (isset($_POST['client_settings'])) {
 | 
						|
        $tmp_networks = $networks;
 | 
						|
        if ($wpa_file = fopen('/tmp/wifidata', 'w')) {
 | 
						|
            fwrite($wpa_file, 'ctrl_interface=DIR=' . RASPI_WPA_CTRL_INTERFACE . ' GROUP=netdev' . PHP_EOL);
 | 
						|
            fwrite($wpa_file, 'update_config=1' . PHP_EOL);
 | 
						|
 | 
						|
            foreach (array_keys($_POST) as $post) {
 | 
						|
                if (preg_match('/delete(\d+)/', $post, $post_match)) {
 | 
						|
                    unset($tmp_networks[$_POST['ssid' . $post_match[1]]]);
 | 
						|
                } elseif (preg_match('/update(\d+)/', $post, $post_match)) {
 | 
						|
                    // NB, at the moment, the value of protocol from the form may
 | 
						|
                    // contain HTML line breaks
 | 
						|
                    $tmp_networks[$_POST['ssid' . $post_match[1]]] = array(
 | 
						|
                    'protocol' => ( $_POST['protocol' . $post_match[1]] === 'Open' ? 'Open' : 'WPA' ),
 | 
						|
                    'passphrase' => $_POST['passphrase' . $post_match[1]],
 | 
						|
                    'configured' => true
 | 
						|
                    );
 | 
						|
                    if (array_key_exists('priority' . $post_match[1], $_POST)) {
 | 
						|
                        $tmp_networks[$_POST['ssid' . $post_match[1]]]['priority'] = $_POST['priority' . $post_match[1]];
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            $ok = true;
 | 
						|
            foreach ($tmp_networks as $ssid => $network) {
 | 
						|
                if ($network['protocol'] === 'Open') {
 | 
						|
                    fwrite($wpa_file, "network={".PHP_EOL);
 | 
						|
                    fwrite($wpa_file, "\tssid=\"".$ssid."\"".PHP_EOL);
 | 
						|
                    fwrite($wpa_file, "\tkey_mgmt=NONE".PHP_EOL);
 | 
						|
		    fwrite($wpa_file, "\tscan_ssid=1".PHP_EOL);
 | 
						|
                    if (array_key_exists('priority', $network)) {
 | 
						|
                        fwrite($wpa_file, "\tpriority=".$network['priority'].PHP_EOL);
 | 
						|
                    }
 | 
						|
                    fwrite($wpa_file, "}".PHP_EOL);
 | 
						|
                } else {
 | 
						|
                    if (strlen($network['passphrase']) >=8 && strlen($network['passphrase']) <= 63) {
 | 
						|
                        unset($wpa_passphrase);
 | 
						|
                        unset($line);
 | 
						|
                        exec('wpa_passphrase '.escapeshellarg($ssid). ' ' . escapeshellarg($network['passphrase']), $wpa_passphrase);
 | 
						|
                        foreach ($wpa_passphrase as $line) {
 | 
						|
                            if (preg_match('/^\s*}\s*$/', $line)) {
 | 
						|
                                if (array_key_exists('priority', $network)) {
 | 
						|
                                    fwrite($wpa_file, "\tpriority=".$network['priority'].PHP_EOL);
 | 
						|
                                }
 | 
						|
                                fwrite($wpa_file, $line.PHP_EOL);
 | 
						|
                            } else {
 | 
						|
                                fwrite($wpa_file, $line.PHP_EOL);
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    } else {
 | 
						|
                        $status->addMessage('WPA passphrase must be between 8 and 63 characters', 'danger');
 | 
						|
                        $ok = false;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            if ($ok) {
 | 
						|
                system('sudo cp /tmp/wifidata ' . RASPI_WPA_SUPPLICANT_CONFIG, $returnval);
 | 
						|
                if ($returnval == 0) {
 | 
						|
                    exec('sudo wpa_cli -i ' . RASPI_WIFI_CLIENT_INTERFACE . ' reconfigure', $reconfigure_out, $reconfigure_return);
 | 
						|
                    if ($reconfigure_return == 0) {
 | 
						|
                        $status->addMessage('Wifi settings updated successfully', 'success');
 | 
						|
                        $networks = $tmp_networks;
 | 
						|
                    } else {
 | 
						|
                        $status->addMessage('Wifi settings updated but cannot restart (cannot execute "wpa_cli reconfigure")', 'danger');
 | 
						|
                    }
 | 
						|
                } else {
 | 
						|
                    $status->addMessage('Wifi settings failed to be updated', 'danger');
 | 
						|
                }
 | 
						|
            }
 | 
						|
        } else {
 | 
						|
            $status->addMessage('Failed to update wifi settings', 'danger');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    nearbyWifiStations($networks);
 | 
						|
    connectedWifiStations($networks);
 | 
						|
 | 
						|
    echo renderTemplate("configure_client", compact("status"));
 | 
						|
 | 
						|
}
 |