.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgment:
* "This product includes software developed by the pfSense Project
* for use in the pfSense® software distribution. (http://www.pfsense.org/).
*
* 4. The names "pfSense" and "pfSense Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* coreteam@pfsense.org.
*
* 5. Products derived from this software may not be called "pfSense"
* nor may "pfSense" appear in their names without prior written
* permission of the Electric Sheep Fencing, LLC.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
*
* "This product includes software developed by the pfSense Project
* for use in the pfSense software distribution (http://www.pfsense.org/).
*
* THIS SOFTWARE IS PROVIDED BY THE pfSense PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE pfSense PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
##|+PRIV
##|*IDENT=page-status-captiveportal
##|*NAME=Status: Captive Portal
##|*DESCR=Allow access to the 'Status: Captive Portal' page.
##|*MATCH=status_captiveportal.php*
##|-PRIV
require_once("guiconfig.inc");
require_once("functions.inc");
require_once("filter.inc");
require_once("shaper.inc");
require_once("captiveportal.inc");
function print_details($cpent) {
global $config, $cpzone, $cpzoneid;
printf("", convert_seconds_to_dhms($session_time));
/* print the time left before session timeout or session terminate time or the closer of the two if both are set */
if (!empty($cpent[7]) && !empty($cpent[9])) {
$session_time_left = min($cpent[0] + $cpent[7] - time(),$cpent[9] - time());
printf(gettext("Session time left: %s") . "
", convert_seconds_to_dhms($session_time_left));
} elseif (!empty($cpent[7]) && empty($cpent[9])) {
$session_time_left = $cpent[0] + $cpent[7] - time();
printf(gettext("Session time left: %s") . "
", convert_seconds_to_dhms($session_time_left));
} elseif (empty($cpent[7]) && !empty($cpent[9])) {
$session_time_left = $cpent[9] - time();
printf(gettext("Session time left: %s") . "
", convert_seconds_to_dhms($session_time_left));
}
/* print idle time and time left before disconnection if idle timeout is set */
if ($_GET['showact']) {
$last_act = captiveportal_get_last_activity($cpent[2], $cpent[3]);
/* if the user never sent traffic, set last activity time to the login time */
$last_act = $last_act ? $last_act : $cpent[0];
$idle_time = time() - $last_act;
printf(gettext("Idle time: %s") . "
", convert_seconds_to_dhms($idle_time));
if (!empty($cpent[8])) {
$idle_time_left = $last_act + $cpent[8] - time();
printf(gettext("Idle time left: %s") . "
", convert_seconds_to_dhms($idle_time_left));
}
}
/* print bytes sent and received, invert the values if reverse accounting is enabled */
$volume = getVolume($cpent[2], $cpent[3]);
$reverse = isset($config['captiveportal'][$cpzone]['reverseacct']) ? true : false;
if ($reverse) {
printf(gettext("Bytes sent: %s") . "
" . gettext("Bytes received: %s") . "\" data-html=\"true\">", format_bytes($volume['output_bytes']), format_bytes($volume['input_bytes']));
} else {
printf(gettext("Bytes sent: %s") . "
" . gettext("Bytes received: %s") . "\" data-html=\"true\">", format_bytes($volume['input_bytes']), format_bytes($volume['output_bytes']));
}
/* print username */
printf("%s", htmlspecialchars($cpent[4]));
}
$cpzone = $_GET['zone'];
if (isset($_POST['zone'])) {
$cpzone = $_POST['zone'];
}
$cpzone = strtolower($cpzone);
if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal'];
if (count($a_cp) == 1) {
$cpzone = current(array_keys($a_cp));
}
/* If the zone does not exist, do not display the invalid zone */
if (!array_key_exists($cpzone, $a_cp)) {
$cpzone = "";
}
if (isset($cpzone) && !empty($cpzone) && isset($a_cp[$cpzone]['zoneid'])) {
$cpzoneid = $a_cp[$cpzone]['zoneid'];
}
if ($_GET['act'] == "del" && !empty($cpzone) && isset($cpzoneid) && isset($_GET['id'])) {
captiveportal_disconnect_client($_GET['id'], 6);
/* keep displaying last activity times */
if ($_GET['showact']) {
header("Location: status_captiveportal.php?zone={$cpzone}&showact=1");
} else {
header("Location: status_captiveportal.php?zone={$cpzone}");
}
exit;
}
if ($_GET['deleteall'] && !empty($cpzone) && isset($cpzoneid)) {
captiveportal_disconnect_all();
header("Location: status_captiveportal.php?zone={$cpzone}");
exit;
}
$pgtitle = array(gettext("Status"), gettext("Captive Portal"));
if (!empty($cpzone)) {
$cpdb = captiveportal_read_db();
$pgtitle[] = htmlspecialchars($a_cp[$cpzone]['zone']);
if (isset($config['voucher'][$cpzone]['enable'])) {
$pgtitle[] = gettext("Active Users");
}
}
$shortcut_section = "captiveportal";
include("head.inc");
if (!empty($cpzone) && isset($config['voucher'][$cpzone]['enable'])):
$tab_array = array();
$tab_array[] = array(gettext("Active Users"), true, "status_captiveportal.php?zone=" . htmlspecialchars($cpzone));
$tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone=" . htmlspecialchars($cpzone));
$tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone=" . htmlspecialchars($cpzone));
$tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone=" . htmlspecialchars($cpzone));
$tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone=" . htmlspecialchars($cpzone));
display_top_tabs($tab_array);
endif;
// Load MAC-Manufacturer table
$mac_man = load_mac_manufacturer_table();
if (count($a_cp) > 1) {
$form = new Form(false);
$section = new Form_Section('Captive Portal Zone');
$zonelist = array("" => 'None');
foreach ($a_cp as $cpkey => $cp) {
$zonelist[$cpkey] = $cp['zone'];
}
$section->addInput(new Form_Select(
'zone',
'Display Zone',
$cpzone,
$zonelist
))->setOnchange('this.form.submit()');
$form->add($section);
print($form);
}
if (!empty($cpzone)): ?>
=gettext("IP address")?> | =gettext("MAC address")?> | =gettext("Username")?> | =gettext("Session start")?> | =gettext("Last activity")?> | =gettext("Actions")?> | |
---|---|---|---|---|---|---|
=htmlspecialchars($cpent[2])?> | " . htmlspecialchars($mac_man[$mac_hi]) . ""; } } ?> | =htmlspecialchars(date("m/d/Y H:i:s", $cpent[0]))?> | =htmlspecialchars(date("m/d/Y H:i:s", $cpent[0]))?> | "> |