2016-08-12 17:00:43 +00:00
|
|
|
<?php
|
|
|
|
|
2020-02-15 17:57:46 +00:00
|
|
|
require_once 'includes/wifi_functions.php';
|
2019-08-19 15:27:17 +00:00
|
|
|
|
2016-08-12 17:00:43 +00:00
|
|
|
/**
|
2020-02-15 17:57:46 +00:00
|
|
|
*
|
|
|
|
*
|
|
|
|
*/
|
2019-04-10 08:37:35 +00:00
|
|
|
function DisplayWPAConfig()
|
|
|
|
{
|
2023-09-16 09:46:11 +00:00
|
|
|
$status = new \RaspAP\Messages\StatusMessage;
|
2019-08-19 15:27:17 +00:00
|
|
|
$networks = [];
|
|
|
|
|
2020-06-07 16:17:16 +00:00
|
|
|
getWifiInterface();
|
2019-08-19 15:27:17 +00:00
|
|
|
knownWifiStations($networks);
|
2016-08-14 16:40:59 +00:00
|
|
|
|
2019-04-10 08:37:35 +00:00
|
|
|
if (isset($_POST['connect'])) {
|
|
|
|
$result = 0;
|
2023-04-07 10:32:01 +00:00
|
|
|
$iface = escapeshellarg($_SESSION['wifi_client_interface']);
|
2023-04-03 13:20:01 +00:00
|
|
|
$netid = intval($_POST['connect']);
|
2023-04-07 10:32:01 +00:00
|
|
|
exec('sudo wpa_cli -i ' . $iface . ' select_network ' . $netid);
|
2023-04-06 09:42:11 +00:00
|
|
|
$status->addMessage('New network selected', 'success');
|
2021-04-29 21:56:40 +00:00
|
|
|
} elseif (isset($_POST['wpa_reinit'])) {
|
2021-04-30 16:24:45 +00:00
|
|
|
$status->addMessage('Reinitializing wpa_supplicant', 'info', false);
|
|
|
|
$force_remove = true;
|
2021-04-29 21:56:40 +00:00
|
|
|
$result = reinitializeWPA($force_remove);
|
|
|
|
$status->addMessage($result, 'info');
|
2019-07-30 15:05:41 +00:00
|
|
|
} elseif (isset($_POST['client_settings'])) {
|
2019-04-10 08:37:35 +00:00
|
|
|
$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);
|
2016-08-14 16:40:59 +00:00
|
|
|
|
2019-04-10 08:37:35 +00:00
|
|
|
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)) {
|
2019-10-15 20:06:07 +00:00
|
|
|
// NB, multiple protocols are separated with a forward slash ('/')
|
2019-04-10 08:37:35 +00:00
|
|
|
$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]];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-08-14 16:40:59 +00:00
|
|
|
|
2019-04-10 08:37:35 +00:00
|
|
|
$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);
|
2019-09-07 15:42:31 +00:00
|
|
|
fwrite($wpa_file, "\tscan_ssid=1".PHP_EOL);
|
2019-04-10 08:37:35 +00:00
|
|
|
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);
|
2021-08-18 18:24:36 +00:00
|
|
|
exec('wpa_passphrase '. ssid2utf8( escapeshellarg($ssid) ) . ' ' . escapeshellarg($network['passphrase']), $wpa_passphrase);
|
2019-04-10 08:37:35 +00:00
|
|
|
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 {
|
2021-09-08 12:28:43 +00:00
|
|
|
if ( preg_match('/\\\\x[0-9A-Fa-f]{2}/',$ssid) && strpos($line, "ssid=\"") !== false ) {
|
2021-08-18 18:24:36 +00:00
|
|
|
fwrite($wpa_file, "\tssid=P\"".$ssid."\"".PHP_EOL);
|
|
|
|
} else {
|
|
|
|
fwrite($wpa_file, $line.PHP_EOL);
|
|
|
|
}
|
2019-04-10 08:37:35 +00:00
|
|
|
}
|
|
|
|
}
|
2023-10-08 09:46:12 +00:00
|
|
|
} elseif (strlen($network['passphrase']) == 0 && strlen($network['passkey']) == 64) {
|
|
|
|
$line = "\tpsk=" . $network['passkey'];
|
|
|
|
fwrite($wpa_file, "network={".PHP_EOL);
|
|
|
|
fwrite($wpa_file, "\tssid=\"".$ssid."\"".PHP_EOL);
|
|
|
|
fwrite($wpa_file, $line.PHP_EOL);
|
2023-10-08 09:49:56 +00:00
|
|
|
if (array_key_exists('priority', $network)) {
|
|
|
|
fwrite($wpa_file, "\tpriority=".$network['priority'].PHP_EOL);
|
|
|
|
}
|
2023-10-08 09:46:12 +00:00
|
|
|
fwrite($wpa_file, "}".PHP_EOL);
|
2019-04-10 08:37:35 +00:00
|
|
|
} else {
|
|
|
|
$status->addMessage('WPA passphrase must be between 8 and 63 characters', 'danger');
|
|
|
|
$ok = false;
|
|
|
|
}
|
2018-02-23 01:07:52 +00:00
|
|
|
}
|
2016-08-14 16:40:59 +00:00
|
|
|
}
|
|
|
|
|
2019-04-10 08:37:35 +00:00
|
|
|
if ($ok) {
|
|
|
|
system('sudo cp /tmp/wifidata ' . RASPI_WPA_SUPPLICANT_CONFIG, $returnval);
|
|
|
|
if ($returnval == 0) {
|
2020-06-09 18:25:19 +00:00
|
|
|
exec('sudo wpa_cli -i ' . $_SESSION['wifi_client_interface'] . ' reconfigure', $reconfigure_out, $reconfigure_return);
|
2019-04-10 08:37:35 +00:00
|
|
|
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');
|
|
|
|
}
|
|
|
|
}
|
2016-08-14 16:40:59 +00:00
|
|
|
} else {
|
2019-04-10 08:37:35 +00:00
|
|
|
$status->addMessage('Failed to update wifi settings', 'danger');
|
2016-08-14 16:40:59 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-02-02 12:26:14 +00:00
|
|
|
$clientInterface = $_SESSION['wifi_client_interface'];
|
|
|
|
|
|
|
|
exec('ip a show '.$clientInterface, $stdoutIp);
|
|
|
|
$stdoutIpAllLinesGlued = implode(" ", $stdoutIp);
|
|
|
|
$stdoutIpWRepeatedSpaces = preg_replace('/\s\s+/', ' ', $stdoutIpAllLinesGlued);
|
|
|
|
preg_match('/state (UP|DOWN)/i', $stdoutIpWRepeatedSpaces, $matchesState) || $matchesState[1] = 'unknown';
|
|
|
|
$ifaceStatus = strtolower($matchesState[1]) ? "up" : "down";
|
|
|
|
|
|
|
|
echo renderTemplate("configure_client", compact("status", "clientInterface", "ifaceStatus"));
|
2016-08-12 17:00:43 +00:00
|
|
|
}
|