2016-08-12 19:00:43 +02:00
< ? php
2019-08-19 17:27:17 +02:00
include_once ( 'includes/status_messages.php' );
include_once ( 'includes/wifi_functions.php' );
2016-08-12 19:00:43 +02:00
/**
*
*
*/
2019-04-10 10:37:35 +02:00
function DisplayWPAConfig ()
{
$status = new StatusMessages ();
2019-08-19 17:27:17 +02:00
$networks = [];
knownWifiStations ( $networks );
2016-08-14 18:40:59 +02:00
2019-04-10 10:37:35 +02:00
if ( isset ( $_POST [ 'connect' ])) {
$result = 0 ;
exec ( 'sudo wpa_cli -i ' . RASPI_WPA_CTRL_INTERFACE . ' select_network ' . strval ( $_POST [ 'connect' ]));
2019-07-30 17:05:41 +02:00
} elseif ( isset ( $_POST [ 'client_settings' ])) {
2019-04-10 10:37:35 +02: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 18:40:59 +02:00
2019-04-10 10:37:35 +02: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 )) {
// 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 ]];
}
}
}
2016-08-14 18:40:59 +02:00
2019-04-10 10:37:35 +02:00
$ok = true ;
foreach ( $tmp_networks as $ssid => $network ) {
if ( $network [ 'protocol' ] === 'Open' ) {
fwrite ( $wpa_file , " network= { " . PHP_EOL );
fwrite ( $wpa_file , " \t ssid= \" " . $ssid . " \" " . PHP_EOL );
fwrite ( $wpa_file , " \t key_mgmt=NONE " . PHP_EOL );
2019-08-02 14:42:15 +02:00
fwrite ( $wpa_file , " \t scan_ssid=1 " . PHP_EOL );
2019-04-10 10:37:35 +02:00
if ( array_key_exists ( 'priority' , $network )) {
fwrite ( $wpa_file , " \t priority= " . $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 , " \t priority= " . $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 ;
}
2018-02-23 02:07:52 +01:00
}
2016-08-14 18:40:59 +02:00
}
2019-04-10 10:37:35 +02:00
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' );
}
}
2016-08-14 18:40:59 +02:00
} else {
2019-04-10 10:37:35 +02:00
$status -> addMessage ( 'Failed to update wifi settings' , 'danger' );
2016-08-14 18:40:59 +02:00
}
}
2019-08-19 17:27:17 +02:00
nearbyWifiStations ( $networks );
connectedWifiStations ( $networks );
2016-08-12 23:22:21 +02:00
?>
2016-08-12 19:00:43 +02:00
2016-08-12 22:53:44 +02:00
< div class = " row " >
< div class = " col-lg-12 " >
2018-11-13 23:32:41 +01:00
< div class = " panel panel-primary " >
2017-10-23 21:51:34 +02:00
< div class = " panel-heading " >< i class = " fa fa-signal fa-fw " ></ i > < ? php echo _ ( " Configure client " ); ?> </div>
2016-08-12 22:53:44 +02:00
<!-- /. panel - heading -->
< div class = " panel-body " >
< p >< ? php $status -> showMessages (); ?> </p>
2017-10-24 15:50:17 +02:00
< h4 >< ? php echo _ ( " Client settings " ); ?> </h4>
2018-11-13 23:32:41 +01:00
< div class = " btn-group btn-block " >
2019-08-08 02:10:40 +02:00
< button type = " button " style = " padding:10px;float: right;display: block;position: relative;margin-top: -55px; " class = " col-md-2 btn btn-info js-reload-wifi-stations " >< ? php echo _ ( " Rescan " ); ?> </button>
2019-04-10 10:37:35 +02:00
</ div >
2018-11-13 23:32:41 +01:00
2019-08-07 23:16:56 +02:00
< form method = " POST " action = " ?page=wpa_conf " name = " wpa_conf_form " class = " row " >
2019-08-01 13:07:27 +02:00
< ? php echo CSRFTokenFieldTag () ?>
2018-11-13 23:32:41 +01:00
< input type = " hidden " name = " client_settings " ?>
< script >
function showPassword ( index ) {
var x = document . getElementsByName ( " passphrase " + index )[ 0 ];
if ( x . type === " password " ) {
x . type = " text " ;
} else {
x . type = " password " ;
}
}
</ script >
2019-08-08 02:10:40 +02:00
< div class = " js-wifi-stations loading-spinner " ></ div >
2018-11-13 23:32:41 +01:00
2016-08-14 18:40:59 +02:00
</ form >
2016-08-12 19:29:56 +02:00
</ div ><!-- ./ Panel body -->
2019-04-10 10:37:35 +02:00
< div class = " panel-footer " >< ? php echo _ ( " <strong>Note:</strong> WEP access points appear as 'Open'. RaspAP does not currently support connecting to WEP " ); ?> </div>
2016-08-12 22:53:44 +02:00
</ div ><!-- /. panel - primary -->
2016-08-12 19:29:56 +02:00
</ div ><!-- /. col - lg - 12 -->
</ div ><!-- /. row -->
2016-08-12 19:00:43 +02:00
< ? php
}
2018-11-13 23:32:41 +01:00
?>