Commit d03721da authored by Franco Fichtner's avatar Franco Fichtner

captiveportal: apply PSR2 style

parent 87387963
...@@ -30,14 +30,16 @@ ...@@ -30,14 +30,16 @@
$captiveportal_element_sizelimit = 1048576; $captiveportal_element_sizelimit = 1048576;
function cpelementscmp($a, $b) { function cpelementscmp($a, $b)
return strcasecmp($a['name'], $b['name']); {
return strcasecmp($a['name'], $b['name']);
} }
function cpelements_sort() { function cpelements_sort()
{
global $config, $cpzone; global $config, $cpzone;
usort($config['captiveportal'][$cpzone]['element'],"cpelementscmp"); usort($config['captiveportal'][$cpzone]['element'], "cpelementscmp");
} }
require_once("guiconfig.inc"); require_once("guiconfig.inc");
...@@ -47,84 +49,87 @@ require_once("shaper.inc"); ...@@ -47,84 +49,87 @@ require_once("shaper.inc");
require_once("captiveportal.inc"); require_once("captiveportal.inc");
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone)) { if (empty($cpzone)) {
header("Location: services_captiveportal_zones.php"); header("Location: services_captiveportal_zones.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
$pgtitle = array(gettext("Services"),gettext("Captive portal"), $a_cp[$cpzone]['zone']); $pgtitle = array(gettext("Services"),gettext("Captive portal"), $a_cp[$cpzone]['zone']);
$shortcut_section = "captiveportal"; $shortcut_section = "captiveportal";
if (!is_array($a_cp[$cpzone]['element'])) if (!is_array($a_cp[$cpzone]['element'])) {
$a_cp[$cpzone]['element'] = array(); $a_cp[$cpzone]['element'] = array();
}
$a_element =& $a_cp[$cpzone]['element']; $a_element =& $a_cp[$cpzone]['element'];
// Calculate total size of all files // Calculate total size of all files
$total_size = 0; $total_size = 0;
foreach ($a_element as $element) { foreach ($a_element as $element) {
$total_size += $element['size']; $total_size += $element['size'];
} }
if ($_POST) { if ($_POST) {
unset($input_errors); unset($input_errors);
if (is_uploaded_file($_FILES['new']['tmp_name'])) { if (is_uploaded_file($_FILES['new']['tmp_name'])) {
if (!stristr($_FILES['new']['name'], "captiveportal-")) {
if(!stristr($_FILES['new']['name'], "captiveportal-")) $name = "captiveportal-" . $_FILES['new']['name'];
$name = "captiveportal-" . $_FILES['new']['name']; } else {
else $name = $_FILES['new']['name'];
$name = $_FILES['new']['name']; }
$size = filesize($_FILES['new']['tmp_name']); $size = filesize($_FILES['new']['tmp_name']);
// is there already a file with that name? // is there already a file with that name?
foreach ($a_element as $element) { foreach ($a_element as $element) {
if ($element['name'] == $name) { if ($element['name'] == $name) {
$input_errors[] = sprintf(gettext("A file with the name '%s' already exists."), $name); $input_errors[] = sprintf(gettext("A file with the name '%s' already exists."), $name);
break; break;
} }
} }
// check total file size // check total file size
if (($total_size + $size) > $captiveportal_element_sizelimit) { if (($total_size + $size) > $captiveportal_element_sizelimit) {
$input_errors[] = gettext("The total size of all files uploaded may not exceed ") . $input_errors[] = gettext("The total size of all files uploaded may not exceed ") .
format_bytes($captiveportal_element_sizelimit) . "."; format_bytes($captiveportal_element_sizelimit) . ".";
} }
if (!$input_errors) { if (!$input_errors) {
$element = array(); $element = array();
$element['name'] = $name; $element['name'] = $name;
$element['size'] = $size; $element['size'] = $size;
$element['content'] = base64_encode(file_get_contents($_FILES['new']['tmp_name'])); $element['content'] = base64_encode(file_get_contents($_FILES['new']['tmp_name']));
$a_element[] = $element; $a_element[] = $element;
cpelements_sort(); cpelements_sort();
write_config(); write_config();
captiveportal_write_elements(); captiveportal_write_elements();
header("Location: services_captiveportal_filemanager.php?zone={$cpzone}"); header("Location: services_captiveportal_filemanager.php?zone={$cpzone}");
exit; exit;
} }
} }
} else if (($_GET['act'] == "del") && !empty($cpzone) && $a_element[$_GET['id']]) { } elseif (($_GET['act'] == "del") && !empty($cpzone) && $a_element[$_GET['id']]) {
@unlink("/var/db/cpelements/" . $a_element[$_GET['id']]['name']); @unlink("/var/db/cpelements/" . $a_element[$_GET['id']]['name']);
@unlink("/usr/local/captiveportal/" . $a_element[$_GET['id']]['name']); @unlink("/usr/local/captiveportal/" . $a_element[$_GET['id']]['name']);
unset($a_element[$_GET['id']]); unset($a_element[$_GET['id']]);
write_config(); write_config();
header("Location: services_captiveportal_filemanager.php?zone={$cpzone}"); header("Location: services_captiveportal_filemanager.php?zone={$cpzone}");
exit; exit;
} }
include("head.inc"); include("head.inc");
$main_buttons = array( $main_buttons = array(
array('label'=>gettext('add file'), 'href'=>'services_captiveportal_filemanager.php?zone='.$cpzone.'&act=add'), array('label'=>gettext('add file'), 'href'=>'services_captiveportal_filemanager.php?zone='.$cpzone.'&act=add'),
); );
...@@ -138,21 +143,23 @@ $main_buttons = array( ...@@ -138,21 +143,23 @@ $main_buttons = array(
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<?php if ($input_errors) print_input_errors($input_errors); ?> <?php if ($input_errors) {
print_input_errors($input_errors);
} ?>
<section class="col-xs-12"> <section class="col-xs-12">
<?php <?php
$tab_array = array(); $tab_array = array();
$tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}"); $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
$tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}"); $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
$tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}"); $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
// Hide Allowed Hostnames as this feature is currently not supported // Hide Allowed Hostnames as this feature is currently not supported
// $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}"); // $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
$tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}"); $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
$tab_array[] = array(gettext("File Manager"), true, "services_captiveportal_filemanager.php?zone={$cpzone}"); $tab_array[] = array(gettext("File Manager"), true, "services_captiveportal_filemanager.php?zone={$cpzone}");
display_top_tabs($tab_array, true); display_top_tabs($tab_array, true);
?> ?>
<div class="tab-content content-box col-xs-12"> <div class="tab-content content-box col-xs-12">
...@@ -162,7 +169,8 @@ $main_buttons = array( ...@@ -162,7 +169,8 @@ $main_buttons = array(
<input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" /> <input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
<?php if ($_GET['act'] == 'add'): ?> <?php if ($_GET['act'] == 'add') :
?>
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped table-sort"> <table class="table table-striped table-sort">
<tr> <tr>
...@@ -180,7 +188,8 @@ $main_buttons = array( ...@@ -180,7 +188,8 @@ $main_buttons = array(
</div> </div>
<br/> <br/>
<?php endif; ?> <?php
endif; ?>
...@@ -193,25 +202,34 @@ $main_buttons = array( ...@@ -193,25 +202,34 @@ $main_buttons = array(
</td> </td>
</tr> </tr>
<?php if (is_array($a_cp[$cpzone]['element'])): <?php if (is_array($a_cp[$cpzone]['element'])) :
$i = 0; foreach ($a_cp[$cpzone]['element'] as $element): ?> $i = 0; foreach ($a_cp[$cpzone]['element'] as $element) :
?>
<tr> <tr>
<td class="listlr"><?=htmlspecialchars($element['name']);?></td> <td class="listlr"><?=htmlspecialchars($element['name']);?></td>
<td class="listr" align="right"><?=format_bytes($element['size']);?></td> <td class="listr" align="right"><?=format_bytes($element['size']);?></td>
<td valign="middle" class="list nowrap"> <td valign="middle" class="list nowrap">
<a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this file?"); ?>')"> <a href="services_captiveportal_filemanager.php?zone=<?=$cpzone;
?>&amp;act=del&amp;id=<?=$i;
?>" onclick="return confirm('<?=gettext("Do you really want to delete this file?"); ?>')">
<span class="glyphicon glyphicon-remove" title="<?=gettext("delete file"); ?>"></span></a> <span class="glyphicon glyphicon-remove" title="<?=gettext("delete file"); ?>"></span></a>
</td> </td>
</tr> </tr>
<?php $i++; endforeach; endif; ?> <?php $i++;
endforeach;
<?php if ($total_size > 0): ?> endif; ?>
<?php if ($total_size > 0) :
?>
<tr> <tr>
<td class="listlr" style="background-color: #eee"><strong><?=gettext("TOTAL"); ?></strong></td> <td class="listlr" style="background-color: #eee"><strong><?=gettext("TOTAL"); ?></strong></td>
<td class="listr" style="background-color: #eee" align="right"><strong><?=format_bytes($total_size);?></strong></td> <td class="listr" style="background-color: #eee" align="right"><strong><?=format_bytes($total_size);?></strong></td>
<td valign="middle" style="background-color: #eee" class="list nowrap"></td> <td valign="middle" style="background-color: #eee" class="list nowrap"></td>
</tr> </tr>
<?php endif; ?> <?php
endif; ?>
</table> </table>
</div> </div>
...@@ -220,14 +238,14 @@ $main_buttons = array( ...@@ -220,14 +238,14 @@ $main_buttons = array(
<?=gettext("Note:"); ?><br /> <?=gettext("Note:"); ?><br />
</strong></span> </strong></span>
<?=gettext("Any files that you upload here with the filename prefix of captiveportal- will " . <?=gettext("Any files that you upload here with the filename prefix of captiveportal- will " .
"be made available in the root directory of the captive portal HTTP(S) server. " . "be made available in the root directory of the captive portal HTTP(S) server. " .
"You may reference them directly from your portal page HTML code using relative paths. " . "You may reference them directly from your portal page HTML code using relative paths. " .
"Example: you've uploaded an image with the name 'captiveportal-test.jpg' using the " . "Example: you've uploaded an image with the name 'captiveportal-test.jpg' using the " .
"file manager. Then you can include it in your portal page like this:"); ?><br /><br /> "file manager. Then you can include it in your portal page like this:"); ?><br /><br />
<tt>&lt;img src=&quot;captiveportal-test.jpg&quot; width=... height=...&gt;</tt> <tt>&lt;img src=&quot;captiveportal-test.jpg&quot; width=... height=...&gt;</tt>
<br /><br /> <br /><br />
<?=gettext("In addition, you can also upload .php files for execution. You can pass the filename " . <?=gettext("In addition, you can also upload .php files for execution. You can pass the filename " .
"to your custom page from the initial page by using text similar to:"); ?> "to your custom page from the initial page by using text similar to:"); ?>
<br /><br /> <br /><br />
<tt>&lt;a href="/captiveportal-aup.php?zone=$PORTAL_ZONE$&amp;redirurl=$PORTAL_REDIRURL$"&gt;<?=gettext("Acceptable usage policy"); ?>&lt;/a&gt;</tt> <tt>&lt;a href="/captiveportal-aup.php?zone=$PORTAL_ZONE$&amp;redirurl=$PORTAL_REDIRURL$"&gt;<?=gettext("Acceptable usage policy"); ?>&lt;/a&gt;</tt>
<br /><br /> <br /><br />
...@@ -241,4 +259,4 @@ $main_buttons = array( ...@@ -241,4 +259,4 @@ $main_buttons = array(
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -33,37 +33,39 @@ require_once("shaper.inc"); ...@@ -33,37 +33,39 @@ require_once("shaper.inc");
require_once("captiveportal.inc"); require_once("captiveportal.inc");
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
header("Location: services_captiveportal_zones.php"); header("Location: services_captiveportal_zones.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
$pgtitle = array(gettext("Services"),gettext("Captive portal"), $a_cp[$cpzone]['zone']); $pgtitle = array(gettext("Services"),gettext("Captive portal"), $a_cp[$cpzone]['zone']);
$shortcut_section = "captiveportal"; $shortcut_section = "captiveportal";
if ($_GET['act'] == "del") { if ($_GET['act'] == "del") {
$a_allowedips =& $config['captiveportal'][$cpzone]['allowedip']; $a_allowedips =& $config['captiveportal'][$cpzone]['allowedip'];
if ($a_allowedips[$_GET['id']]) { if ($a_allowedips[$_GET['id']]) {
$ipent = $a_allowedips[$_GET['id']]; $ipent = $a_allowedips[$_GET['id']];
unset($a_allowedips[$_GET['id']]); unset($a_allowedips[$_GET['id']]);
write_config(); write_config();
header("Location: services_captiveportal_ip.php?zone={$cpzone}"); header("Location: services_captiveportal_ip.php?zone={$cpzone}");
exit; exit;
} }
} }
include("head.inc"); include("head.inc");
$main_buttons = array( $main_buttons = array(
array('label'=>'Add IP address', 'href'=>'services_captiveportal_ip_edit.php?zone='.$cpzone), array('label'=>'Add IP address', 'href'=>'services_captiveportal_ip_edit.php?zone='.$cpzone),
); );
...@@ -77,21 +79,23 @@ $main_buttons = array( ...@@ -77,21 +79,23 @@ $main_buttons = array(
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<?php if ($savemsg) print_info_box($savemsg); ?> <?php if ($savemsg) {
print_info_box($savemsg);
} ?>
<section class="col-xs-12"> <section class="col-xs-12">
<?php <?php
$tab_array = array(); $tab_array = array();
$tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}"); $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
$tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}"); $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
$tab_array[] = array(gettext("Allowed IP addresses"), true, "services_captiveportal_ip.php?zone={$cpzone}"); $tab_array[] = array(gettext("Allowed IP addresses"), true, "services_captiveportal_ip.php?zone={$cpzone}");
// Hide Allowed Hostnames as this feature is currently not supported // Hide Allowed Hostnames as this feature is currently not supported
// $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}"); // $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
$tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}"); $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
$tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}"); $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
display_top_tabs($tab_array, true); display_top_tabs($tab_array, true);
?> ?>
<div class="tab-content content-box col-xs-12"> <div class="tab-content content-box col-xs-12">
...@@ -109,41 +113,50 @@ $main_buttons = array( ...@@ -109,41 +113,50 @@ $main_buttons = array(
</td> </td>
</tr> </tr>
<?php if (is_array($a_cp[$cpzone]['allowedip'])): <?php if (is_array($a_cp[$cpzone]['allowedip'])) :
$i = 0; foreach ($a_cp[$cpzone]['allowedip'] as $ip): ?> $i = 0; foreach ($a_cp[$cpzone]['allowedip'] as $ip) :
<tr ondblclick="document.location='services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>'"> ?>
<tr ondblclick="document.location='services_captiveportal_ip_edit.php?zone=<?=$cpzone;
?>&amp;id=<?=$i;?>'">
<td class="listlr"> <td class="listlr">
<?php <?php
if($ip['dir'] == "to") { if ($ip['dir'] == "to") {
echo "any <span class=\"glyphicon glyphicon-arrow-right\" aria-hidden=\"true\" alt=\"in\"></span> "; echo "any <span class=\"glyphicon glyphicon-arrow-right\" aria-hidden=\"true\" alt=\"in\"></span> ";
} }
if($ip['dir'] == "both") { if ($ip['dir'] == "both") {
echo "<span class=\"glyphicon glyphicon-resize-horizontal\" aria-hidden=\"true\" alt=\"pass\"></span> "; echo "<span class=\"glyphicon glyphicon-resize-horizontal\" aria-hidden=\"true\" alt=\"pass\"></span> ";
} }
echo strtolower($ip['ip']); echo strtolower($ip['ip']);
if($ip['sn'] != "32" && is_numeric($ip['sn'])) { if ($ip['sn'] != "32" && is_numeric($ip['sn'])) {
$sn = $ip['sn']; $sn = $ip['sn'];
echo "/$sn"; echo "/$sn";
} }
if($ip['dir'] == "from") { if ($ip['dir'] == "from") {
echo "<span class=\"glyphicon glyphicon-arrow-right\" aria-hidden=\"true\" alt=\"any\"></span> any"; echo "<span class=\"glyphicon glyphicon-arrow-right\" aria-hidden=\"true\" alt=\"any\"></span> any";
} }
?> ?>
</td> </td>
<td class="listbg"> <td class="listbg">
<?=htmlspecialchars($ip['descr']);?>&nbsp; <?=htmlspecialchars($ip['descr']);?>&nbsp;
</td> </td>
<td valign="middle" class="list nowrap"><a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-pencil"></span></a> <td valign="middle" class="list nowrap"><a href="services_captiveportal_ip_edit.php?zone=<?=$cpzone;
<a href="services_captiveportal_ip.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this address?"); ?>')" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-remove"></span></a></td> ?>&amp;id=<?=$i;?>" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-pencil"></span></a>
<a href="services_captiveportal_ip.php?zone=<?=$cpzone;
?>&amp;act=del&amp;id=<?=$i;
?>" onclick="return confirm('<?=gettext("Do you really want to delete this address?"); ?>')" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-remove"></span></a></td>
</tr> </tr>
<?php $i++; endforeach; endif; ?> <?php $i++;
endforeach;
endif; ?>
<tr> <tr>
<td colspan="2" class="list"><p class="vexpl"><span class="red"><strong> <td colspan="2" class="list"><p class="vexpl"><span class="red"><strong>
<?=gettext("Note:"); ?><br /> <?=gettext("Note:"); ?><br />
</strong></span> </strong></span>
<?=gettext("Adding allowed IP addresses will allow IP access to/from these addresses through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example."); ?></p> <?=gettext("Adding allowed IP addresses will allow IP access to/from these addresses through the captive portal without being taken to the portal page. This can be used for a web server serving images for the portal page or a DNS server on another network, for example."); ?></p>
</td> </td>
<td class="list">&nbsp;</td> <td class="list">&nbsp;</td>
</tr> </tr>
...@@ -157,4 +170,4 @@ $main_buttons = array( ...@@ -157,4 +170,4 @@ $main_buttons = array(
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -28,14 +28,16 @@ ...@@ -28,14 +28,16 @@
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.
*/ */
function allowedipscmp($a, $b) { function allowedipscmp($a, $b)
return strcmp($a['ip'], $b['ip']); {
return strcmp($a['ip'], $b['ip']);
} }
function allowedips_sort() { function allowedips_sort()
global $g, $config, $cpzone; {
global $g, $config, $cpzone;
usort($config['captiveportal'][$cpzone]['allowedip'],"allowedipscmp"); usort($config['captiveportal'][$cpzone]['allowedip'], "allowedipscmp");
} }
require_once("guiconfig.inc"); require_once("guiconfig.inc");
...@@ -48,102 +50,114 @@ $pgtitle = array(gettext("Services"),gettext("Captive portal"),gettext("Edit all ...@@ -48,102 +50,114 @@ $pgtitle = array(gettext("Services"),gettext("Captive portal"),gettext("Edit all
$shortcut_section = "captiveportal"; $shortcut_section = "captiveportal";
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
header("Location: services_captiveportal_zones.php"); header("Location: services_captiveportal_zones.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
if (is_numericint($_GET['id'])) if (is_numericint($_GET['id'])) {
$id = $_GET['id']; $id = $_GET['id'];
if (isset($_POST['id']) && is_numericint($_POST['id'])) }
$id = $_POST['id']; if (isset($_POST['id']) && is_numericint($_POST['id'])) {
$id = $_POST['id'];
}
if (!is_array($config['captiveportal'][$cpzone]['allowedip'])) if (!is_array($config['captiveportal'][$cpzone]['allowedip'])) {
$config['captiveportal'][$cpzone]['allowedip'] = array(); $config['captiveportal'][$cpzone]['allowedip'] = array();
}
$a_allowedips =& $config['captiveportal'][$cpzone]['allowedip']; $a_allowedips =& $config['captiveportal'][$cpzone]['allowedip'];
if (isset($id) && $a_allowedips[$id]) { if (isset($id) && $a_allowedips[$id]) {
$pconfig['ip'] = $a_allowedips[$id]['ip']; $pconfig['ip'] = $a_allowedips[$id]['ip'];
$pconfig['sn'] = $a_allowedips[$id]['sn']; $pconfig['sn'] = $a_allowedips[$id]['sn'];
$pconfig['bw_up'] = $a_allowedips[$id]['bw_up']; $pconfig['bw_up'] = $a_allowedips[$id]['bw_up'];
$pconfig['bw_down'] = $a_allowedips[$id]['bw_down']; $pconfig['bw_down'] = $a_allowedips[$id]['bw_down'];
$pconfig['descr'] = $a_allowedips[$id]['descr']; $pconfig['descr'] = $a_allowedips[$id]['descr'];
} }
if ($_POST) { if ($_POST) {
unset($input_errors);
unset($input_errors); $pconfig = $_POST;
$pconfig = $_POST;
/* input validation */
/* input validation */ $reqdfields = explode(" ", "ip sn");
$reqdfields = explode(" ", "ip sn"); $reqdfieldsn = array(gettext("Allowed IP address"), gettext("Subnet mask"));
$reqdfieldsn = array(gettext("Allowed IP address"), gettext("Subnet mask"));
do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
if ($_POST['ip'] && !is_ipaddr($_POST['ip'])) {
if ($_POST['ip'] && !is_ipaddr($_POST['ip'])) $input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['ip']);
$input_errors[] = sprintf(gettext("A valid IP address must be specified. [%s]"), $_POST['ip']); }
if ($_POST['sn'] && (!is_numeric($_POST['sn']) || ($_POST['sn'] < 1) || ($_POST['sn'] > 32))) if ($_POST['sn'] && (!is_numeric($_POST['sn']) || ($_POST['sn'] < 1) || ($_POST['sn'] > 32))) {
$input_errors[] = gettext("A valid subnet mask must be specified"); $input_errors[] = gettext("A valid subnet mask must be specified");
}
if ($_POST['bw_up'] && !is_numeric($_POST['bw_up']))
$input_errors[] = gettext("Upload speed needs to be an integer"); if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) {
$input_errors[] = gettext("Upload speed needs to be an integer");
if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) }
$input_errors[] = gettext("Download speed needs to be an integer");
if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) {
foreach ($a_allowedips as $ipent) { $input_errors[] = gettext("Download speed needs to be an integer");
if (isset($id) && ($a_allowedips[$id]) && ($a_allowedips[$id] === $ipent)) }
continue;
foreach ($a_allowedips as $ipent) {
if ($ipent['ip'] == $_POST['ip']){ if (isset($id) && ($a_allowedips[$id]) && ($a_allowedips[$id] === $ipent)) {
$input_errors[] = sprintf("[%s] %s.", $_POST['ip'], gettext("already allowed")) ; continue;
break ; }
}
} if ($ipent['ip'] == $_POST['ip']) {
$input_errors[] = sprintf("[%s] %s.", $_POST['ip'], gettext("already allowed")) ;
if (!$input_errors) { break ;
$ip = array(); }
$ip['ip'] = $_POST['ip']; }
$ip['sn'] = $_POST['sn'];
$ip['descr'] = $_POST['descr']; if (!$input_errors) {
if ($_POST['bw_up']) $ip = array();
$ip['bw_up'] = $_POST['bw_up']; $ip['ip'] = $_POST['ip'];
if ($_POST['bw_down']) $ip['sn'] = $_POST['sn'];
$ip['bw_down'] = $_POST['bw_down']; $ip['descr'] = $_POST['descr'];
if (isset($id) && $a_allowedips[$id]) { if ($_POST['bw_up']) {
$oldip = $a_allowedips[$id]['ip']; $ip['bw_up'] = $_POST['bw_up'];
if (!empty($a_allowedips[$id]['sn'])) }
$oldmask = $a_allowedips[$id]['sn']; if ($_POST['bw_down']) {
else $ip['bw_down'] = $_POST['bw_down'];
$oldmask = 32; }
$a_allowedips[$id] = $ip; if (isset($id) && $a_allowedips[$id]) {
} else { $oldip = $a_allowedips[$id]['ip'];
$a_allowedips[] = $ip; if (!empty($a_allowedips[$id]['sn'])) {
} $oldmask = $a_allowedips[$id]['sn'];
allowedips_sort(); } else {
$oldmask = 32;
write_config(); }
$a_allowedips[$id] = $ip;
if (isset($a_cp[$cpzone]['enable']) && is_module_loaded("ipfw.ko")) { } else {
$rules = ""; $a_allowedips[] = $ip;
$cpzoneid = $a_cp[$cpzone]['zoneid']; }
unset($ipfw); allowedips_sort();
captiveportal_allowedip_configure_entry($ip);
$uniqid = uniqid("{$cpzone}_allowed"); write_config();
}
if (isset($a_cp[$cpzone]['enable']) && is_module_loaded("ipfw.ko")) {
header("Location: services_captiveportal_ip.php?zone={$cpzone}"); $rules = "";
exit; $cpzoneid = $a_cp[$cpzone]['zoneid'];
} unset($ipfw);
captiveportal_allowedip_configure_entry($ip);
$uniqid = uniqid("{$cpzone}_allowed");
}
header("Location: services_captiveportal_ip.php?zone={$cpzone}");
exit;
}
} }
include("head.inc"); include("head.inc");
...@@ -160,7 +174,9 @@ include("head.inc"); ...@@ -160,7 +174,9 @@ include("head.inc");
<div class="row"> <div class="row">
<?php if ($input_errors) print_input_errors($input_errors); ?> <?php if ($input_errors) {
print_input_errors($input_errors);
} ?>
<section class="col-xs-12"> <section class="col-xs-12">
...@@ -176,11 +192,17 @@ include("head.inc"); ...@@ -176,11 +192,17 @@ include("head.inc");
<tr> <tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("IP address"); ?></td> <td width="22%" valign="top" class="vncellreq"><?=gettext("IP address"); ?></td>
<td width="78%" class="vtable"> <td width="78%" class="vtable">
<?=$mandfldhtml;?><input name="ip" type="text" class="formfld unknown" id="ip" size="17" value="<?=htmlspecialchars($pconfig['ip']);?>" /> <?=$mandfldhtml;
?><input name="ip" type="text" class="formfld unknown" id="ip" size="17" value="<?=htmlspecialchars($pconfig['ip']);?>" />
/<select name='sn' class="formselect" id='sn'> /<select name='sn' class="formselect" id='sn'>
<?php for ($i = 32; $i >= 1; $i--): ?> <?php for ($i = 32; $i >= 1; $i--) :
<option value="<?=$i;?>" <?php if ($i == $pconfig['sn']) echo "selected=\"selected\""; ?>><?=$i;?></option> ?>
<?php endfor; ?> <option value="<?=$i;?>" <?php if ($i == $pconfig['sn']) {
echo "selected=\"selected\"";
} ?>><?=$i;?></option>
<?php
endfor; ?>
</select> </select>
<br /> <br />
<span class="vexpl"><?=gettext("IP address and subnet mask. Use /32 for a single IP");?>.</span> <span class="vexpl"><?=gettext("IP address and subnet mask. Use /32 for a single IP");?>.</span>
...@@ -214,9 +236,11 @@ include("head.inc"); ...@@ -214,9 +236,11 @@ include("head.inc");
<td width="78%"> <td width="78%">
<input name="Submit" type="submit" class="btn btn-primary" value="<?=gettext("Save"); ?>" /> <input name="Submit" type="submit" class="btn btn-primary" value="<?=gettext("Save"); ?>" />
<input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" /> <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
<?php if (isset($id) && $a_allowedips[$id]): ?> <?php if (isset($id) && $a_allowedips[$id]) :
?>
<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" /> <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
<?php endif; ?> <?php
endif; ?>
</td> </td>
</tr> </tr>
</table> </table>
...@@ -228,4 +252,4 @@ include("head.inc"); ...@@ -228,4 +252,4 @@ include("head.inc");
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -37,91 +37,96 @@ global $cpzone; ...@@ -37,91 +37,96 @@ global $cpzone;
global $cpzoneid; global $cpzoneid;
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
header("Location: services_captiveportal_zones.php"); header("Location: services_captiveportal_zones.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
$pgtitle = array(gettext("Services"),gettext("Captive portal"), $a_cp[$cpzone]['zone']); $pgtitle = array(gettext("Services"),gettext("Captive portal"), $a_cp[$cpzone]['zone']);
$shortcut_section = "captiveportal"; $shortcut_section = "captiveportal";
if ($_POST) { if ($_POST) {
$pconfig = $_POST;
$pconfig = $_POST;
if ($_POST['apply']) {
if ($_POST['apply']) { $retval = 0;
$retval = 0;
$rules = captiveportal_passthrumac_configure();
$rules = captiveportal_passthrumac_configure(); $savemsg = get_std_save_message($retval);
$savemsg = get_std_save_message($retval); if ($retval == 0) {
if ($retval == 0) clear_subsystem_dirty('passthrumac');
clear_subsystem_dirty('passthrumac'); }
} }
if ($_POST['postafterlogin']) { if ($_POST['postafterlogin']) {
if (!is_array($a_passthrumacs)) { if (!is_array($a_passthrumacs)) {
echo gettext("No entry exists yet!") ."\n"; echo gettext("No entry exists yet!") ."\n";
exit; exit;
} }
if (empty($_POST['zone'])) { if (empty($_POST['zone'])) {
echo gettext("Please set the zone on which the operation should be allowed"); echo gettext("Please set the zone on which the operation should be allowed");
exit; exit;
} }
if (!is_array($a_cp[$cpzone]['passthrumac'])) if (!is_array($a_cp[$cpzone]['passthrumac'])) {
$a_cp[$cpzone]['passthrumac'] = array(); $a_cp[$cpzone]['passthrumac'] = array();
$a_passthrumacs =& $a_cp[$cpzone]['passthrumac']; }
$a_passthrumacs =& $a_cp[$cpzone]['passthrumac'];
if ($_POST['username']) {
$mac = captiveportal_passthrumac_findbyname($_POST['username']); if ($_POST['username']) {
if (!empty($mac)) $mac = captiveportal_passthrumac_findbyname($_POST['username']);
$_POST['delmac'] = $mac['mac']; if (!empty($mac)) {
else $_POST['delmac'] = $mac['mac'];
echo gettext("No entry exists for this username:") . " " . $_POST['username'] . "\n"; } else {
} echo gettext("No entry exists for this username:") . " " . $_POST['username'] . "\n";
if ($_POST['delmac']) { }
$found = false; }
foreach ($a_passthrumacs as $idx => $macent) { if ($_POST['delmac']) {
if ($macent['mac'] == $_POST['delmac']) { $found = false;
$found = true; foreach ($a_passthrumacs as $idx => $macent) {
break; if ($macent['mac'] == $_POST['delmac']) {
} $found = true;
} break;
if ($found == true) { }
$cpzoneid = $a_cp[$cpzone]['zoneid']; }
captiveportal_passthrumac_delete_entry($a_passthrumacs[$idx]); if ($found == true) {
unset($a_passthrumacs[$idx]); $cpzoneid = $a_cp[$cpzone]['zoneid'];
write_config(); captiveportal_passthrumac_delete_entry($a_passthrumacs[$idx]);
echo gettext("The entry was sucessfully deleted") . "\n"; unset($a_passthrumacs[$idx]);
} else write_config();
echo gettext("No entry exists for this mac address:") . " " . $_POST['delmac'] . "\n"; echo gettext("The entry was sucessfully deleted") . "\n";
} } else {
exit; echo gettext("No entry exists for this mac address:") . " " . $_POST['delmac'] . "\n";
} }
}
exit;
}
} }
if ($_GET['act'] == "del") { if ($_GET['act'] == "del") {
$a_passthrumacs =& $a_cp[$cpzone]['passthrumac']; $a_passthrumacs =& $a_cp[$cpzone]['passthrumac'];
if ($a_passthrumacs[$_GET['id']]) { if ($a_passthrumacs[$_GET['id']]) {
$cpzoneid = $a_cp[$cpzone]['zoneid']; $cpzoneid = $a_cp[$cpzone]['zoneid'];
captiveportal_passthrumac_delete_entry($a_passthrumacs[$_GET['id']]); captiveportal_passthrumac_delete_entry($a_passthrumacs[$_GET['id']]);
unset($a_passthrumacs[$_GET['id']]); unset($a_passthrumacs[$_GET['id']]);
write_config(); write_config();
header("Location: services_captiveportal_mac.php?zone={$cpzone}"); header("Location: services_captiveportal_mac.php?zone={$cpzone}");
exit; exit;
} }
} }
include("head.inc"); include("head.inc");
$main_buttons = array( $main_buttons = array(
array('label'=>gettext("add host"), 'href'=>'services_captiveportal_mac_edit.php?zone='.$cpzone), array('label'=>gettext("add host"), 'href'=>'services_captiveportal_mac_edit.php?zone='.$cpzone),
); );
?> ?>
...@@ -132,24 +137,28 @@ $main_buttons = array( ...@@ -132,24 +137,28 @@ $main_buttons = array(
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<?php if ($savemsg) print_info_box($savemsg); ?> <?php if ($savemsg) {
<?php if (is_subsystem_dirty('passthrumac')): ?><p> print_info_box($savemsg);
} ?>
<?php if (is_subsystem_dirty('passthrumac')) :
?><p>
<?php print_info_box_np(gettext("The captive portal MAC address configuration has been changed.<br />You must apply the changes in order for them to take effect."));?><br /> <?php print_info_box_np(gettext("The captive portal MAC address configuration has been changed.<br />You must apply the changes in order for them to take effect."));?><br />
<?php endif; ?> <?php
endif; ?>
<section class="col-xs-12"> <section class="col-xs-12">
<?php <?php
$tab_array = array(); $tab_array = array();
$tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}"); $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
$tab_array[] = array(gettext("MAC"), true, "services_captiveportal_mac.php?zone={$cpzone}"); $tab_array[] = array(gettext("MAC"), true, "services_captiveportal_mac.php?zone={$cpzone}");
$tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}"); $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
// Hide Allowed Hostnames as this feature is currently not supported // Hide Allowed Hostnames as this feature is currently not supported
// $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}"); // $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
$tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}"); $tab_array[] = array(gettext("Vouchers"), false, "services_captiveportal_vouchers.php?zone={$cpzone}");
$tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}"); $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
display_top_tabs($tab_array, true); display_top_tabs($tab_array, true);
?> ?>
<div class="tab-content content-box col-xs-12"> <div class="tab-content content-box col-xs-12">
...@@ -167,31 +176,36 @@ $main_buttons = array( ...@@ -167,31 +176,36 @@ $main_buttons = array(
<td width="10%" class="list"></td> <td width="10%" class="list"></td>
</tr> </tr>
<?php <?php
if (is_array($a_cp[$cpzone]['passthrumac'])): if (is_array($a_cp[$cpzone]['passthrumac'])) :
$i = 0; $i = 0;
foreach ($a_cp[$cpzone]['passthrumac'] as $mac): foreach ($a_cp[$cpzone]['passthrumac'] as $mac) :
?> ?>
<tr ondblclick="document.location='services_captiveportal_mac_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>'"> <tr ondblclick="document.location='services_captiveportal_mac_edit.php?zone=<?=$cpzone;
<td valign="middle" class="list nowrap"> ?>&amp;id=<?=$i;?>'">
<img src="./themes/<?= $g['theme']; ?>/images/icons/icon_<?=$mac['action'];?>.gif" width="11" height="11" border="0" alt="icon" /> <td valign="middle" class="list nowrap">
</td> <img src="./themes/<?= $g['theme'];
<td class="listlr"> ?>/images/icons/icon_<?=$mac['action'];?>.gif" width="11" height="11" border="0" alt="icon" />
<?=$mac['mac'];?> </td>
</td> <td class="listlr">
<td class="listbg"> <?=$mac['mac'];?>
<?=htmlspecialchars($mac['descr']);?>&nbsp; </td>
</td> <td class="listbg">
<td valign="middle" class="list nowrap"> <?=htmlspecialchars($mac['descr']);?>&nbsp;
<a href="services_captiveportal_mac_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i;?>" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-pencil"></span></a> </td>
&nbsp; <td valign="middle" class="list nowrap">
<a href="services_captiveportal_mac.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i;?>" onclick="return confirm('<?=gettext("Do you really want to delete this host?"); ?>')" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-remove"></span></a> <a href="services_captiveportal_mac_edit.php?zone=<?=$cpzone;
</td> ?>&amp;id=<?=$i;?>" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-pencil"></span></a>
</tr> &nbsp;
<a href="services_captiveportal_mac.php?zone=<?=$cpzone;
?>&amp;act=del&amp;id=<?=$i;
?>" onclick="return confirm('<?=gettext("Do you really want to delete this host?"); ?>')" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-remove"></span></a>
</td>
</tr>
<?php <?php
$i++; $i++;
endforeach; endforeach;
endif; endif;
?> ?>
<tr> <tr>
<td colspan="3" class="list"> <td colspan="3" class="list">
...@@ -213,4 +227,4 @@ $main_buttons = array( ...@@ -213,4 +227,4 @@ $main_buttons = array(
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -27,14 +27,16 @@ ...@@ -27,14 +27,16 @@
POSSIBILITY OF SUCH DAMAGE. POSSIBILITY OF SUCH DAMAGE.
*/ */
function passthrumacscmp($a, $b) { function passthrumacscmp($a, $b)
return strcmp($a['mac'], $b['mac']); {
return strcmp($a['mac'], $b['mac']);
} }
function passthrumacs_sort() { function passthrumacs_sort()
global $config, $cpzone; {
global $config, $cpzone;
usort($config['captiveportal'][$cpzone]['passthrumac'],"passthrumacscmp"); usort($config['captiveportal'][$cpzone]['passthrumac'], "passthrumacscmp");
} }
require_once("guiconfig.inc"); require_once("guiconfig.inc");
...@@ -50,111 +52,121 @@ $pgtitle = array(gettext("Services"),gettext("Captive portal"),gettext("Edit MAC ...@@ -50,111 +52,121 @@ $pgtitle = array(gettext("Services"),gettext("Captive portal"),gettext("Edit MAC
$shortcut_section = "captiveportal"; $shortcut_section = "captiveportal";
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
header("Location: services_captiveportal_zones.php"); header("Location: services_captiveportal_zones.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
if (is_numericint($_GET['id'])) if (is_numericint($_GET['id'])) {
$id = $_GET['id']; $id = $_GET['id'];
if (isset($_POST['id']) && is_numericint($_POST['id'])) }
$id = $_POST['id']; if (isset($_POST['id']) && is_numericint($_POST['id'])) {
$id = $_POST['id'];
}
if (!is_array($a_cp[$cpzone]['passthrumac'])) if (!is_array($a_cp[$cpzone]['passthrumac'])) {
$a_cp[$cpzone]['passthrumac'] = array(); $a_cp[$cpzone]['passthrumac'] = array();
}
$a_passthrumacs = &$a_cp[$cpzone]['passthrumac']; $a_passthrumacs = &$a_cp[$cpzone]['passthrumac'];
if (isset($id) && $a_passthrumacs[$id]) { if (isset($id) && $a_passthrumacs[$id]) {
$pconfig['action'] = $a_passthrumacs[$id]['action']; $pconfig['action'] = $a_passthrumacs[$id]['action'];
$pconfig['mac'] = $a_passthrumacs[$id]['mac']; $pconfig['mac'] = $a_passthrumacs[$id]['mac'];
$pconfig['bw_up'] = $a_passthrumacs[$id]['bw_up']; $pconfig['bw_up'] = $a_passthrumacs[$id]['bw_up'];
$pconfig['bw_down'] = $a_passthrumacs[$id]['bw_down']; $pconfig['bw_down'] = $a_passthrumacs[$id]['bw_down'];
$pconfig['descr'] = $a_passthrumacs[$id]['descr']; $pconfig['descr'] = $a_passthrumacs[$id]['descr'];
$pconfig['username'] = $a_passthrumacs[$id]['username']; $pconfig['username'] = $a_passthrumacs[$id]['username'];
} }
if ($_POST) { if ($_POST) {
unset($input_errors);
unset($input_errors); $pconfig = $_POST;
$pconfig = $_POST;
/* input validation */
/* input validation */ $reqdfields = explode(" ", "action mac");
$reqdfields = explode(" ", "action mac"); $reqdfieldsn = array(gettext("Action"), gettext("MAC address"));
$reqdfieldsn = array(gettext("Action"), gettext("MAC address"));
do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
$_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
$_POST['mac'] = strtolower(str_replace("-", ":", $_POST['mac']));
if ($_POST['mac']) {
if ($_POST['mac']) { if (is_macaddr($_POST['mac'])) {
if (is_macaddr($_POST['mac'])) { $iflist = get_interface_list();
$iflist = get_interface_list(); foreach ($iflist as $if) {
foreach ($iflist as $if) { if ($_POST['mac'] == strtolower($if['mac'])) {
if ($_POST['mac'] == strtolower($if['mac'])) { $input_errors[] = sprintf(gettext("The MAC address %s belongs to a local interface, you cannot use it here."), $_POST['mac']);
$input_errors[] = sprintf(gettext("The MAC address %s belongs to a local interface, you cannot use it here."), $_POST['mac']); break;
break; }
} }
} } else {
} else { $input_errors[] = sprintf("%s. [%s]", gettext("A valid MAC address must be specified"), $_POST['mac']);
$input_errors[] = sprintf("%s. [%s]", gettext("A valid MAC address must be specified"), $_POST['mac']); }
} }
} if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) {
if ($_POST['bw_up'] && !is_numeric($_POST['bw_up'])) $input_errors[] = gettext("Upload speed needs to be an integer");
$input_errors[] = gettext("Upload speed needs to be an integer"); }
if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) if ($_POST['bw_down'] && !is_numeric($_POST['bw_down'])) {
$input_errors[] = gettext("Download speed needs to be an integer"); $input_errors[] = gettext("Download speed needs to be an integer");
}
foreach ($a_passthrumacs as $macent) {
if (isset($id) && ($a_passthrumacs[$id]) && ($a_passthrumacs[$id] === $macent)) foreach ($a_passthrumacs as $macent) {
continue; if (isset($id) && ($a_passthrumacs[$id]) && ($a_passthrumacs[$id] === $macent)) {
continue;
if ($macent['mac'] == $_POST['mac']){ }
$input_errors[] = sprintf("[%s] %s.", $_POST['mac'], gettext("already exists"));
break; if ($macent['mac'] == $_POST['mac']) {
} $input_errors[] = sprintf("[%s] %s.", $_POST['mac'], gettext("already exists"));
} break;
}
if (!$input_errors) { }
$mac = array();
$mac['action'] = $_POST['action']; if (!$input_errors) {
$mac['mac'] = $_POST['mac']; $mac = array();
if ($_POST['bw_up']) $mac['action'] = $_POST['action'];
$mac['bw_up'] = $_POST['bw_up']; $mac['mac'] = $_POST['mac'];
if ($_POST['bw_down']) if ($_POST['bw_up']) {
$mac['bw_down'] = $_POST['bw_down']; $mac['bw_up'] = $_POST['bw_up'];
if ($_POST['username']) }
$mac['username'] = $_POST['username']; if ($_POST['bw_down']) {
$mac['bw_down'] = $_POST['bw_down'];
$mac['descr'] = $_POST['descr']; }
if ($_POST['username']) {
if (isset($id) && $a_passthrumacs[$id]) { $mac['username'] = $_POST['username'];
$oldmac = $a_passthrumacs[$id]; }
$a_passthrumacs[$id] = $mac;
} else { $mac['descr'] = $_POST['descr'];
$oldmac = $mac;
$a_passthrumacs[] = $mac; if (isset($id) && $a_passthrumacs[$id]) {
} $oldmac = $a_passthrumacs[$id];
passthrumacs_sort(); $a_passthrumacs[$id] = $mac;
} else {
write_config(); $oldmac = $mac;
$a_passthrumacs[] = $mac;
if (isset($config['captiveportal'][$cpzone]['enable'])) { }
$cpzoneid = $config['captiveportal'][$cpzone]['zoneid']; passthrumacs_sort();
captiveportal_passthrumac_delete_entry($oldmac);
captiveportal_passthrumac_configure_entry($mac); write_config();
unset($cpzoneid);
} if (isset($config['captiveportal'][$cpzone]['enable'])) {
$cpzoneid = $config['captiveportal'][$cpzone]['zoneid'];
header("Location: services_captiveportal_mac.php?zone={$cpzone}"); captiveportal_passthrumac_delete_entry($oldmac);
exit; captiveportal_passthrumac_configure_entry($mac);
} unset($cpzoneid);
}
header("Location: services_captiveportal_mac.php?zone={$cpzone}");
exit;
}
} }
include("head.inc"); include("head.inc");
?> ?>
...@@ -168,7 +180,9 @@ include("head.inc"); ...@@ -168,7 +180,9 @@ include("head.inc");
<div class="row"> <div class="row">
<?php if ($input_errors) print_input_errors($input_errors); ?> <?php if ($input_errors) {
print_input_errors($input_errors);
} ?>
<section class="col-xs-12"> <section class="col-xs-12">
...@@ -186,15 +200,17 @@ include("head.inc"); ...@@ -186,15 +200,17 @@ include("head.inc");
<td width="78%" class="vtable"> <td width="78%" class="vtable">
<select name="action" class="formselect"> <select name="action" class="formselect">
<?php <?php
$actions = explode(" ", "Pass Block"); $actions = explode(" ", "Pass Block");
foreach ($actions as $action): foreach ($actions as $action) :
?> ?>
<option value="<?=strtolower($action);?>"<?php if (strtolower($action) == strtolower($pconfig['action'])) echo "selected=\"selected\""; ?>> <option value="<?=strtolower($action);?>"<?php if (strtolower($action) == strtolower($pconfig['action'])) {
<?=htmlspecialchars($action);?> echo "selected=\"selected\"";
</option> } ?>>
<?=htmlspecialchars($action);?>
</option>
<?php <?php
endforeach; endforeach;
?> ?>
</select> </select>
<br /> <br />
<span class="vexpl"><?=gettext("Choose what to do with packets coming from this MAC address"); ?>.</span> <span class="vexpl"><?=gettext("Choose what to do with packets coming from this MAC address"); ?>.</span>
...@@ -203,12 +219,13 @@ include("head.inc"); ...@@ -203,12 +219,13 @@ include("head.inc");
<tr> <tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("MAC address"); ?></td> <td width="22%" valign="top" class="vncellreq"><?=gettext("MAC address"); ?></td>
<td width="78%" class="vtable"> <td width="78%" class="vtable">
<?=$mandfldhtml;?><input name="mac" type="text" class="formfld unknown" id="mac" size="17" value="<?=htmlspecialchars($pconfig['mac']);?>" /> <?=$mandfldhtml;
?><input name="mac" type="text" class="formfld unknown" id="mac" size="17" value="<?=htmlspecialchars($pconfig['mac']);?>" />
<?php <?php
$ip = getenv('REMOTE_ADDR'); $ip = getenv('REMOTE_ADDR');
$mac = `/usr/sbin/arp -an | grep {$ip} | cut -d" " -f4`; $mac = `/usr/sbin/arp -an | grep {$ip} | cut -d" " -f4`;
$mac = str_replace("\n","",$mac); $mac = str_replace("\n", "", $mac);
?> ?>
<a onclick="document.forms[0].mac.value='<?=$mac?>';" href="#"><?=gettext("Copy my MAC address");?></a> <a onclick="document.forms[0].mac.value='<?=$mac?>';" href="#"><?=gettext("Copy my MAC address");?></a>
<br /> <br />
<span class="vexpl"><?=gettext("MAC address (6 hex octets separated by colons)"); ?></span></td> <span class="vexpl"><?=gettext("MAC address (6 hex octets separated by colons)"); ?></span></td>
...@@ -244,12 +261,16 @@ include("head.inc"); ...@@ -244,12 +261,16 @@ include("head.inc");
<td width="78%"> <td width="78%">
<input name="Submit" type="submit" class="btn btn-primary" value="<?=gettext("Save"); ?>" /> <input name="Submit" type="submit" class="btn btn-primary" value="<?=gettext("Save"); ?>" />
<input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" /> <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
<?php if (isset($id) && $a_passthrumacs[$id]): ?> <?php if (isset($id) && $a_passthrumacs[$id]) :
?>
<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" /> <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
<?php endif; ?> <?php
<?php if (isset($pconfig['username']) && $pconfig['username']): ?> endif; ?>
<?php if (isset($pconfig['username']) && $pconfig['username']) :
?>
<input name="username" type="hidden" value="<?=htmlspecialchars($pconfig['username']);?>" /> <input name="username" type="hidden" value="<?=htmlspecialchars($pconfig['username']);?>" />
<?php endif; ?> <?php
endif; ?>
</td> </td>
</tr> </tr>
</table> </table>
...@@ -261,4 +282,4 @@ include("head.inc"); ...@@ -261,4 +282,4 @@ include("head.inc");
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
*/ */
if ($_POST['postafterlogin']) { if ($_POST['postafterlogin']) {
$nocsrf = true; $nocsrf = true;
} }
require_once('guiconfig.inc'); require_once('guiconfig.inc');
...@@ -41,8 +41,9 @@ require_once('voucher.inc'); ...@@ -41,8 +41,9 @@ require_once('voucher.inc');
$referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_captiveportal_vouchers.php'); $referer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '/services_captiveportal_vouchers.php');
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone)) { if (empty($cpzone)) {
header("Location: services_captiveportal_zones.php"); header("Location: services_captiveportal_zones.php");
...@@ -51,137 +52,147 @@ if (empty($cpzone)) { ...@@ -51,137 +52,147 @@ if (empty($cpzone)) {
function generatekey($exponent) function generatekey($exponent)
{ {
$ret = array(); $ret = array();
/* generate a random 64 bit RSA key pair using the voucher binary */ /* generate a random 64 bit RSA key pair using the voucher binary */
$fd = popen(sprintf('/usr/local/bin/voucher -g 64 -e %s', $exponent), 'r'); $fd = popen(sprintf('/usr/local/bin/voucher -g 64 -e %s', $exponent), 'r');
if ($fd !== false) { if ($fd !== false) {
$output = fread($fd, 16384); $output = fread($fd, 16384);
pclose($fd); pclose($fd);
list($privkey, $pubkey) = explode("\0", $output); list($privkey, $pubkey) = explode("\0", $output);
$ret['priv'] = $privkey; $ret['priv'] = $privkey;
$ret['pub'] = $pubkey; $ret['pub'] = $pubkey;
} }
return $ret; return $ret;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
if (!is_array($config['voucher'])) if (!is_array($config['voucher'])) {
$config['voucher'] = array(); $config['voucher'] = array();
}
if (empty($a_cp[$cpzone])) { if (empty($a_cp[$cpzone])) {
log_error("Submission on captiveportal page with unknown zone parameter: " . htmlspecialchars($cpzone)); log_error("Submission on captiveportal page with unknown zone parameter: " . htmlspecialchars($cpzone));
header("Location: services_captiveportal_zones.php"); header("Location: services_captiveportal_zones.php");
exit; exit;
} }
$pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Vouchers"), $a_cp[$cpzone]['zone']); $pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Vouchers"), $a_cp[$cpzone]['zone']);
$shortcut_section = "captiveportal-vouchers"; $shortcut_section = "captiveportal-vouchers";
if (!is_array($config['voucher'][$cpzone]['roll'])) if (!is_array($config['voucher'][$cpzone]['roll'])) {
$config['voucher'][$cpzone]['roll'] = array(); $config['voucher'][$cpzone]['roll'] = array();
if (!isset($config['voucher'][$cpzone]['charset'])) }
$config['voucher'][$cpzone]['charset'] = '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'; if (!isset($config['voucher'][$cpzone]['charset'])) {
if (!isset($config['voucher'][$cpzone]['rollbits'])) $config['voucher'][$cpzone]['charset'] = '2345678abcdefhijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
$config['voucher'][$cpzone]['rollbits'] = 16; }
if (!isset($config['voucher'][$cpzone]['ticketbits'])) if (!isset($config['voucher'][$cpzone]['rollbits'])) {
$config['voucher'][$cpzone]['ticketbits'] = 10; $config['voucher'][$cpzone]['rollbits'] = 16;
if (!isset($config['voucher'][$cpzone]['checksumbits'])) }
$config['voucher'][$cpzone]['checksumbits'] = 5; if (!isset($config['voucher'][$cpzone]['ticketbits'])) {
if (!isset($config['voucher'][$cpzone]['magic'])) $config['voucher'][$cpzone]['ticketbits'] = 10;
$config['voucher'][$cpzone]['magic'] = rand(); // anything slightly random will do }
if (!isset($config['voucher'][$cpzone]['exponent'])) { if (!isset($config['voucher'][$cpzone]['checksumbits'])) {
while (true) { $config['voucher'][$cpzone]['checksumbits'] = 5;
while (($exponent = rand()) % 30000 < 5000) }
continue; if (!isset($config['voucher'][$cpzone]['magic'])) {
$exponent = ($exponent * 2) + 1; // Make it odd number $config['voucher'][$cpzone]['magic'] = rand(); // anything slightly random will do
if ($exponent <= 65537) }if (!isset($config['voucher'][$cpzone]['exponent'])) {
break; while (true) {
} while (($exponent = rand()) % 30000 < 5000) {
$config['voucher'][$cpzone]['exponent'] = $exponent; continue;
unset($exponent); }
$exponent = ($exponent * 2) + 1; // Make it odd number
if ($exponent <= 65537) {
break;
}
}
$config['voucher'][$cpzone]['exponent'] = $exponent;
unset($exponent);
} }
if ($_REQUEST['generatekey']) { if ($_REQUEST['generatekey']) {
$key = generatekey($config['voucher'][$cpzone]['exponent']); $key = generatekey($config['voucher'][$cpzone]['exponent']);
$alertmessage = _( $alertmessage = _(
'You will need to recreate any existing Voucher Rolls due ' . 'You will need to recreate any existing Voucher Rolls due ' .
'to the public and private key changes. Click cancel if you ' . 'to the public and private key changes. Click cancel if you ' .
'do not wish to recreate the vouchers.' 'do not wish to recreate the vouchers.'
); );
echo json_encode(array( echo json_encode(array(
'alertmessage' => $alertmessage, 'alertmessage' => $alertmessage,
'privatekey' => $key['priv'], 'privatekey' => $key['priv'],
'publickey' => $key['pub'], 'publickey' => $key['pub'],
)); ));
exit; exit;
} }
if (!isset($config['voucher'][$cpzone]['publickey'])) { if (!isset($config['voucher'][$cpzone]['publickey'])) {
$key = generatekey($config['voucher'][$cpzone]['exponent']); $key = generatekey($config['voucher'][$cpzone]['exponent']);
$config['voucher'][$cpzone]['publickey'] = base64_encode($key['pub']); $config['voucher'][$cpzone]['publickey'] = base64_encode($key['pub']);
$config['voucher'][$cpzone]['privatekey'] = base64_encode($key['priv']); $config['voucher'][$cpzone]['privatekey'] = base64_encode($key['priv']);
} }
// Check for invalid or expired vouchers // Check for invalid or expired vouchers
if (!isset($config['voucher'][$cpzone]['descrmsgnoaccess'])) if (!isset($config['voucher'][$cpzone]['descrmsgnoaccess'])) {
$config['voucher'][$cpzone]['descrmsgnoaccess'] = gettext("Voucher invalid"); $config['voucher'][$cpzone]['descrmsgnoaccess'] = gettext("Voucher invalid");
if (!isset($config['voucher'][$cpzone]['descrmsgexpired'])) }
$config['voucher'][$cpzone]['descrmsgexpired'] = gettext("Voucher expired"); if (!isset($config['voucher'][$cpzone]['descrmsgexpired'])) {
$config['voucher'][$cpzone]['descrmsgexpired'] = gettext("Voucher expired");
}
$a_roll = &$config['voucher'][$cpzone]['roll']; $a_roll = &$config['voucher'][$cpzone]['roll'];
if ($_GET['act'] == "del") { if ($_GET['act'] == "del") {
$id = $_GET['id']; $id = $_GET['id'];
if ($a_roll[$id]) { if ($a_roll[$id]) {
$roll = $a_roll[$id]['number']; $roll = $a_roll[$id]['number'];
$voucherlck = lock("voucher{$cpzone}"); $voucherlck = lock("voucher{$cpzone}");
unset($a_roll[$id]); unset($a_roll[$id]);
voucher_unlink_db($roll); voucher_unlink_db($roll);
unlock($voucherlck); unlock($voucherlck);
write_config(); write_config();
}
header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
exit;
} /* print all vouchers of the selected roll */
elseif ($_GET['act'] == "csv") {
$privkey = base64_decode($config['voucher'][$cpzone]['privatekey']);
if (strstr($privkey, "BEGIN RSA PRIVATE KEY")) {
$fd = fopen("/var/etc/voucher_{$cpzone}.private", "w");
if (!$fd) {
$input_errors[] = gettext("Cannot write private key file") . ".\n";
} else {
chmod("/var/etc/voucher_{$cpzone}.private", 0600);
fwrite($fd, $privkey);
fclose($fd);
$a_voucher = &$config['voucher'][$cpzone]['roll'];
$id = $_GET['id'];
if (isset($id) && $a_voucher[$id]) {
$number = $a_voucher[$id]['number'];
$count = $a_voucher[$id]['count'];
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=vouchers_{$cpzone}_roll{$number}.csv");
if (file_exists("/var/etc/voucher_{$cpzone}.cfg")) {
system("/usr/local/bin/voucher -c /var/etc/voucher_{$cpzone}.cfg -p /var/etc/voucher_{$cpzone}.private $number $count");
}
@unlink("/var/etc/voucher_{$cpzone}.private");
} else {
header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
}
exit;
}
} else {
$input_errors[] = gettext("Need private RSA key to print vouchers") . "\n";
} }
header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
exit;
}
/* print all vouchers of the selected roll */
else if ($_GET['act'] == "csv") {
$privkey = base64_decode($config['voucher'][$cpzone]['privatekey']);
if (strstr($privkey,"BEGIN RSA PRIVATE KEY")) {
$fd = fopen("/var/etc/voucher_{$cpzone}.private","w");
if (!$fd) {
$input_errors[] = gettext("Cannot write private key file") . ".\n";
} else {
chmod("/var/etc/voucher_{$cpzone}.private", 0600);
fwrite($fd, $privkey);
fclose($fd);
$a_voucher = &$config['voucher'][$cpzone]['roll'];
$id = $_GET['id'];
if (isset($id) && $a_voucher[$id]) {
$number = $a_voucher[$id]['number'];
$count = $a_voucher[$id]['count'];
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=vouchers_{$cpzone}_roll{$number}.csv");
if (file_exists("/var/etc/voucher_{$cpzone}.cfg")) {
system("/usr/local/bin/voucher -c /var/etc/voucher_{$cpzone}.cfg -p /var/etc/voucher_{$cpzone}.private $number $count");
}
@unlink("/var/etc/voucher_{$cpzone}.private");
} else {
header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
}
exit;
}
} else {
$input_errors[] = gettext("Need private RSA key to print vouchers") . "\n";
}
} }
$pconfig['enable'] = isset($config['voucher'][$cpzone]['enable']); $pconfig['enable'] = isset($config['voucher'][$cpzone]['enable']);
...@@ -197,83 +208,91 @@ $pconfig['msgnoaccess'] = $config['voucher'][$cpzone]['descrmsgnoaccess']; ...@@ -197,83 +208,91 @@ $pconfig['msgnoaccess'] = $config['voucher'][$cpzone]['descrmsgnoaccess'];
$pconfig['msgexpired'] = $config['voucher'][$cpzone]['descrmsgexpired']; $pconfig['msgexpired'] = $config['voucher'][$cpzone]['descrmsgexpired'];
if ($_POST) { if ($_POST) {
unset($input_errors);
unset($input_errors); if ($_POST['postafterlogin']) {
voucher_expire($_POST['voucher_expire']);
if ($_POST['postafterlogin']) { exit;
voucher_expire($_POST['voucher_expire']); }
exit;
}
$pconfig = $_POST;
/* input validation */
if ($_POST['enable'] == "yes") {
$reqdfields = explode(" ", "charset rollbits ticketbits checksumbits publickey magic");
$reqdfieldsn = array(gettext("charset"),gettext("rollbits"),gettext("ticketbits"),gettext("checksumbits"),gettext("publickey"),gettext("magic"));
do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
}
// Check for form errors
if ($_POST['charset'] && (strlen($_POST['charset'] < 2)))
$input_errors[] = gettext("Need at least 2 characters to create vouchers.");
if ($_POST['charset'] && (strpos($_POST['charset'],"\"")>0))
$input_errors[] = gettext("Double quotes aren't allowed.");
if ($_POST['charset'] && (strpos($_POST['charset'],",")>0))
$input_errors[] = "',' " . gettext("aren't allowed.");
if ($_POST['rollbits'] && (!is_numeric($_POST['rollbits']) || ($_POST['rollbits'] < 1) || ($_POST['rollbits'] > 31)))
$input_errors[] = gettext("# of Bits to store Roll Id needs to be between 1..31.");
if ($_POST['ticketbits'] && (!is_numeric($_POST['ticketbits']) || ($_POST['ticketbits'] < 1) || ($_POST['ticketbits'] > 16)))
$input_errors[] = gettext("# of Bits to store Ticket Id needs to be between 1..16.");
if ($_POST['checksumbits'] && (!is_numeric($_POST['checksumbits']) || ($_POST['checksumbits'] < 1) || ($_POST['checksumbits'] > 31)))
$input_errors[] = gettext("# of Bits to store checksum needs to be between 1..31.");
if ($_POST['publickey'] && (!strstr($_POST['publickey'],"BEGIN PUBLIC KEY")))
$input_errors[] = gettext("This doesn't look like an RSA Public key.");
if ($_POST['privatekey'] && (!strstr($_POST['privatekey'],"BEGIN RSA PRIVATE KEY")))
$input_errors[] = gettext("This doesn't look like an RSA Private key.");
if ($_POST['vouchersyncdbip'] && (is_ipaddr_configured($_POST['vouchersyncdbip'])))
$input_errors[] = gettext("You cannot sync the voucher database to this host (itself).");
if (!$input_errors) {
if (empty($config['voucher'][$cpzone])) {
$newvoucher = array();
} else {
$newvoucher = $config['voucher'][$cpzone];
}
if ($_POST['enable'] == "yes") {
$newvoucher['enable'] = true;
} else {
unset($newvoucher['enable']);
}
$newvoucher['charset'] = $_POST['charset']; $pconfig = $_POST;
$newvoucher['rollbits'] = $_POST['rollbits'];
$newvoucher['ticketbits'] = $_POST['ticketbits']; /* input validation */
$newvoucher['checksumbits'] = $_POST['checksumbits']; if ($_POST['enable'] == "yes") {
$newvoucher['magic'] = $_POST['magic']; $reqdfields = explode(" ", "charset rollbits ticketbits checksumbits publickey magic");
$newvoucher['exponent'] = $_POST['exponent']; $reqdfieldsn = array(gettext("charset"),gettext("rollbits"),gettext("ticketbits"),gettext("checksumbits"),gettext("publickey"),gettext("magic"));
$newvoucher['publickey'] = base64_encode($_POST['publickey']);
$newvoucher['privatekey'] = base64_encode($_POST['privatekey']); do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
$newvoucher['descrmsgnoaccess'] = $_POST['msgnoaccess']; }
$newvoucher['descrmsgexpired'] = $_POST['msgexpired'];
$config['voucher'][$cpzone] = $newvoucher; // Check for form errors
write_config(); if ($_POST['charset'] && (strlen($_POST['charset'] < 2))) {
voucher_configure_zone(); $input_errors[] = gettext("Need at least 2 characters to create vouchers.");
}
if (!$input_errors) { if ($_POST['charset'] && (strpos($_POST['charset'], "\"")>0)) {
header("Location: services_captiveportal_vouchers.php?zone={$cpzone}"); $input_errors[] = gettext("Double quotes aren't allowed.");
exit; }
} if ($_POST['charset'] && (strpos($_POST['charset'], ",")>0)) {
} $input_errors[] = "',' " . gettext("aren't allowed.");
}
if ($_POST['rollbits'] && (!is_numeric($_POST['rollbits']) || ($_POST['rollbits'] < 1) || ($_POST['rollbits'] > 31))) {
$input_errors[] = gettext("# of Bits to store Roll Id needs to be between 1..31.");
}
if ($_POST['ticketbits'] && (!is_numeric($_POST['ticketbits']) || ($_POST['ticketbits'] < 1) || ($_POST['ticketbits'] > 16))) {
$input_errors[] = gettext("# of Bits to store Ticket Id needs to be between 1..16.");
}
if ($_POST['checksumbits'] && (!is_numeric($_POST['checksumbits']) || ($_POST['checksumbits'] < 1) || ($_POST['checksumbits'] > 31))) {
$input_errors[] = gettext("# of Bits to store checksum needs to be between 1..31.");
}
if ($_POST['publickey'] && (!strstr($_POST['publickey'], "BEGIN PUBLIC KEY"))) {
$input_errors[] = gettext("This doesn't look like an RSA Public key.");
}
if ($_POST['privatekey'] && (!strstr($_POST['privatekey'], "BEGIN RSA PRIVATE KEY"))) {
$input_errors[] = gettext("This doesn't look like an RSA Private key.");
}
if ($_POST['vouchersyncdbip'] && (is_ipaddr_configured($_POST['vouchersyncdbip']))) {
$input_errors[] = gettext("You cannot sync the voucher database to this host (itself).");
}
if (!$input_errors) {
if (empty($config['voucher'][$cpzone])) {
$newvoucher = array();
} else {
$newvoucher = $config['voucher'][$cpzone];
}
if ($_POST['enable'] == "yes") {
$newvoucher['enable'] = true;
} else {
unset($newvoucher['enable']);
}
$newvoucher['charset'] = $_POST['charset'];
$newvoucher['rollbits'] = $_POST['rollbits'];
$newvoucher['ticketbits'] = $_POST['ticketbits'];
$newvoucher['checksumbits'] = $_POST['checksumbits'];
$newvoucher['magic'] = $_POST['magic'];
$newvoucher['exponent'] = $_POST['exponent'];
$newvoucher['publickey'] = base64_encode($_POST['publickey']);
$newvoucher['privatekey'] = base64_encode($_POST['privatekey']);
$newvoucher['descrmsgnoaccess'] = $_POST['msgnoaccess'];
$newvoucher['descrmsgexpired'] = $_POST['msgexpired'];
$config['voucher'][$cpzone] = $newvoucher;
write_config();
voucher_configure_zone();
if (!$input_errors) {
header("Location: services_captiveportal_vouchers.php?zone={$cpzone}");
exit;
}
}
} }
$closehead = false; $closehead = false;
include("head.inc"); include("head.inc");
if ($pconfig['enable']) { if ($pconfig['enable']) {
$main_buttons = array( $main_buttons = array(
array('label'=>gettext("add voucher"), 'href'=>'services_captiveportal_vouchers_edit.php?zone='.$cpzone), array('label'=>gettext("add voucher"), 'href'=>'services_captiveportal_vouchers_edit.php?zone='.$cpzone),
); );
} }
?> ?>
...@@ -335,22 +354,26 @@ function enable_change(enable_change) { ...@@ -335,22 +354,26 @@ function enable_change(enable_change) {
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<?php if ($input_errors) print_input_errors($input_errors); ?> <?php if ($input_errors) {
<?php if ($savemsg) print_info_box($savemsg); ?> print_input_errors($input_errors);
} ?>
<?php if ($savemsg) {
print_info_box($savemsg);
} ?>
<section class="col-xs-12"> <section class="col-xs-12">
<?php <?php
$tab_array = array(); $tab_array = array();
$tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}"); $tab_array[] = array(gettext("Captive portal(s)"), false, "services_captiveportal.php?zone={$cpzone}");
$tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}"); $tab_array[] = array(gettext("MAC"), false, "services_captiveportal_mac.php?zone={$cpzone}");
$tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}"); $tab_array[] = array(gettext("Allowed IP addresses"), false, "services_captiveportal_ip.php?zone={$cpzone}");
// Hide Allowed Hostnames as this feature is currently not supported // Hide Allowed Hostnames as this feature is currently not supported
// $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}"); // $tab_array[] = array(gettext("Allowed Hostnames"), false, "services_captiveportal_hostname.php?zone={$cpzone}");
$tab_array[] = array(gettext("Vouchers"), true, "services_captiveportal_vouchers.php?zone={$cpzone}"); $tab_array[] = array(gettext("Vouchers"), true, "services_captiveportal_vouchers.php?zone={$cpzone}");
$tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}"); $tab_array[] = array(gettext("File Manager"), false, "services_captiveportal_filemanager.php?zone={$cpzone}");
display_top_tabs($tab_array, true); display_top_tabs($tab_array, true);
?> ?>
<div class="tab-content content-box col-xs-12"> <div class="tab-content content-box col-xs-12">
...@@ -364,7 +387,9 @@ function enable_change(enable_change) { ...@@ -364,7 +387,9 @@ function enable_change(enable_change) {
<tr> <tr>
<td width="22%" valign="top" class="vtable">&nbsp;</td> <td width="22%" valign="top" class="vtable">&nbsp;</td>
<td width="78%" class="vtable"> <td width="78%" class="vtable">
<input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) echo "checked=\"checked\""; ?> onclick="enable_change(false)" /> <input name="enable" type="checkbox" value="yes" <?php if ($pconfig['enable']) {
echo "checked=\"checked\"";
} ?> onclick="enable_change(false)" />
<strong><?=gettext("Enable Vouchers"); ?></strong> <strong><?=gettext("Enable Vouchers"); ?></strong>
</td> </td>
</tr> </tr>
...@@ -381,7 +406,8 @@ function enable_change(enable_change) { ...@@ -381,7 +406,8 @@ function enable_change(enable_change) {
<td width="35%" class="listhdr"><?=gettext("Comment"); ?></td> <td width="35%" class="listhdr"><?=gettext("Comment"); ?></td>
<td width="15%" class="list"></td> <td width="15%" class="list"></td>
</tr> </tr>
<?php $i = 0; foreach($a_roll as $rollent): ?> <?php $i = 0; foreach ($a_roll as $rollent) :
?>
<tr> <tr>
<td class="listlr"> <td class="listlr">
<?=htmlspecialchars($rollent['number']); ?>&nbsp; <?=htmlspecialchars($rollent['number']); ?>&nbsp;
...@@ -397,26 +423,44 @@ function enable_change(enable_change) { ...@@ -397,26 +423,44 @@ function enable_change(enable_change) {
</td> </td>
<td valign="middle" class="list nowrap"> <td valign="middle" class="list nowrap">
<div id='addeditdelete<?=$i?>'> <div id='addeditdelete<?=$i?>'>
<?php if ($pconfig['enable']): ?> <?php if ($pconfig['enable']) :
<a class="btn btn-default btn-xs" href="services_captiveportal_vouchers_edit.php?zone=<?=$cpzone;?>&amp;id=<?=$i; ?>"><span class="glyphicon glyphicon-pencil" title="<?=gettext("edit voucher"); ?>" alt="<?=gettext("edit voucher"); ?>" ></span></a> ?>
<a class="btn btn-default btn-xs" href="services_captiveportal_vouchers.php?zone=<?=$cpzone;?>&amp;act=del&amp;id=<?=$i; ?>" onclick="return confirm('<?=gettext("Do you really want to delete this voucher? This makes all vouchers from this roll invalid"); ?>')"><span class="glyphicon glyphicon-remove" title="<?=gettext("delete vouchers"); ?>" alt="<?=gettext("delete vouchers"); ?>"></span></a> <a class="btn btn-default btn-xs" href="services_captiveportal_vouchers_edit.php?zone=<?=$cpzone;
<a class="btn btn-default btn-xs" href="services_captiveportal_vouchers.php?zone=<?=$cpzone;?>&amp;act=csv&amp;id=<?=$i; ?>"><span class="glyphicon glyphicon-download-alt" title="<?=gettext("generate vouchers for this roll to CSV file"); ?>" alt="<?=gettext("generate vouchers for this roll to CSV file"); ?>"></span></a> ?>&amp;id=<?=$i;
<?php endif;?> ?>"><span class="glyphicon glyphicon-pencil" title="<?=gettext("edit voucher");
?>" alt="<?=gettext("edit voucher"); ?>" ></span></a>
<a class="btn btn-default btn-xs" href="services_captiveportal_vouchers.php?zone=<?=$cpzone;
?>&amp;act=del&amp;id=<?=$i;
?>" onclick="return confirm('<?=gettext("Do you really want to delete this voucher? This makes all vouchers from this roll invalid");
?>')"><span class="glyphicon glyphicon-remove" title="<?=gettext("delete vouchers");
?>" alt="<?=gettext("delete vouchers"); ?>"></span></a>
<a class="btn btn-default btn-xs" href="services_captiveportal_vouchers.php?zone=<?=$cpzone;
?>&amp;act=csv&amp;id=<?=$i;
?>"><span class="glyphicon glyphicon-download-alt" title="<?=gettext("generate vouchers for this roll to CSV file");
?>" alt="<?=gettext("generate vouchers for this roll to CSV file"); ?>"></span></a>
<?php
endif;?>
</div> </div>
</td> </td>
</tr> </tr>
<?php $i++; endforeach; ?> <?php $i++;
endforeach; ?>
</table> </table>
<?php if ($pconfig['enable']): ?> <?php if ($pconfig['enable']) :
?>
<?=gettext("Create, generate and activate Rolls with Vouchers that allow access through the " . <?=gettext("Create, generate and activate Rolls with Vouchers that allow access through the " .
"captive portal for the configured time. Once a voucher is activated, " . "captive portal for the configured time. Once a voucher is activated, " .
"its clock is started and runs uninterrupted until it expires. During that " . "its clock is started and runs uninterrupted until it expires. During that " .
"time, the voucher can be re-used from the same or a different computer. If the voucher " . "time, the voucher can be re-used from the same or a different computer. If the voucher " .
"is used again from another computer, the previous session is stopped."); ?> "is used again from another computer, the previous session is stopped."); ?>
<?php else: ?> <?php
else :
?>
<?=gettext("Enable Voucher support first using the checkbox above and hit Save at the bottom."); ?> <?=gettext("Enable Voucher support first using the checkbox above and hit Save at the bottom."); ?>
<?php endif;?> <?php
endif;?>
</td> </td>
</tr> </tr>
<tr> <tr>
...@@ -426,14 +470,18 @@ function enable_change(enable_change) { ...@@ -426,14 +470,18 @@ function enable_change(enable_change) {
<td class="vtable"> <td class="vtable">
<textarea name="publickey" cols="65" rows="4" id="publickey" class="formpre"><?=htmlspecialchars($pconfig['publickey']);?></textarea> <textarea name="publickey" cols="65" rows="4" id="publickey" class="formpre"><?=htmlspecialchars($pconfig['publickey']);?></textarea>
<br /> <br />
<?=gettext("Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is used to decrypt vouchers."); ?> <a href='#' onclick='generatenewkey();'><?=gettext('Generate');?></a> <?=gettext('new key');?>.</td> <?=gettext("Paste an RSA public key (64 Bit or smaller) in PEM format here. This key is used to decrypt vouchers.");
?> <a href='#' onclick='generatenewkey();'><?=gettext('Generate');
?></a> <?=gettext('new key');?>.</td>
</tr> </tr>
<tr> <tr>
<td valign="top" class="vncell"><?=gettext("Voucher private key"); ?></td> <td valign="top" class="vncell"><?=gettext("Voucher private key"); ?></td>
<td class="vtable"> <td class="vtable">
<textarea name="privatekey" cols="65" rows="5" id="privatekey" class="formpre"><?=htmlspecialchars($pconfig['privatekey']);?></textarea> <textarea name="privatekey" cols="65" rows="5" id="privatekey" class="formpre"><?=htmlspecialchars($pconfig['privatekey']);?></textarea>
<br /> <br />
<?=gettext("Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is only used to generate encrypted vouchers and doesn't need to be available if the vouchers have been generated offline."); ?> <a href='#' onclick='generatenewkey();'> <?=gettext('Generate');?></a> <?=gettext('new key');?>.</td> <?=gettext("Paste an RSA private key (64 Bit or smaller) in PEM format here. This key is only used to generate encrypted vouchers and doesn't need to be available if the vouchers have been generated offline.");
?> <a href='#' onclick='generatenewkey();'> <?=gettext('Generate');
?></a> <?=gettext('new key');?>.</td>
</tr> </tr>
<tr> <tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Character set"); ?></td> <td width="22%" valign="top" class="vncellreq"><?=gettext("Character set"); ?></td>
...@@ -501,7 +549,8 @@ function enable_change(enable_change) { ...@@ -501,7 +549,8 @@ function enable_change(enable_change) {
<input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" /> <input type="hidden" name="zone" id="zone" value="<?=htmlspecialchars($cpzone);?>" />
<input type="hidden" name="exponent" id="exponent" value="<?=$pconfig['exponent'];?>" /> <input type="hidden" name="exponent" id="exponent" value="<?=$pconfig['exponent'];?>" />
<input name="Submit" type="submit" class="btn btn-primary" value="<?=gettext("Save"); ?>" onclick="enable_change(true); before_save();" /> <input name="Submit" type="submit" class="btn btn-primary" value="<?=gettext("Save"); ?>" onclick="enable_change(true); before_save();" />
<input type="button" class="btn btn-default" value="<?=gettext("Cancel");?>" onclick="window.location.href='<?=$referer;?>'" /> <input type="button" class="btn btn-default" value="<?=gettext("Cancel");
?>" onclick="window.location.href='<?=$referer;?>'" />
</td> </td>
</tr> </tr>
<tr> <tr>
...@@ -528,4 +577,4 @@ function enable_change(enable_change) { ...@@ -528,4 +577,4 @@ function enable_change(enable_change) {
enable_change(false); enable_change(false);
//]]> //]]>
</script> </script>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -37,16 +37,18 @@ $pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit V ...@@ -37,16 +37,18 @@ $pgtitle = array(gettext("Services"), gettext("Captive portal"), gettext("Edit V
$shortcut_section = "captiveportal-vouchers"; $shortcut_section = "captiveportal-vouchers";
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) { if (empty($cpzone) || empty($config['captiveportal'][$cpzone])) {
header("Location: services_captiveportal_zones.php"); header("Location: services_captiveportal_zones.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
if (!is_array($config['voucher'])) { if (!is_array($config['voucher'])) {
...@@ -54,30 +56,31 @@ if (!is_array($config['voucher'])) { ...@@ -54,30 +56,31 @@ if (!is_array($config['voucher'])) {
} }
if (!is_array($config['voucher'][$cpzone]['roll'])) { if (!is_array($config['voucher'][$cpzone]['roll'])) {
$config['voucher'][$cpzone]['roll'] = array(); $config['voucher'][$cpzone]['roll'] = array();
} }
$a_roll = &$config['voucher'][$cpzone]['roll']; $a_roll = &$config['voucher'][$cpzone]['roll'];
if (is_numericint($_GET['id'])) if (is_numericint($_GET['id'])) {
$id = $_GET['id']; $id = $_GET['id'];
if (isset($_POST['id']) && is_numericint($_POST['id'])) }
$id = $_POST['id']; if (isset($_POST['id']) && is_numericint($_POST['id'])) {
$id = $_POST['id'];
}
if (isset($id) && $a_roll[$id]) { if (isset($id) && $a_roll[$id]) {
$pconfig['zone'] = $a_roll[$id]['zone']; $pconfig['zone'] = $a_roll[$id]['zone'];
$pconfig['number'] = $a_roll[$id]['number']; $pconfig['number'] = $a_roll[$id]['number'];
$pconfig['count'] = $a_roll[$id]['count']; $pconfig['count'] = $a_roll[$id]['count'];
$pconfig['minutes'] = $a_roll[$id]['minutes']; $pconfig['minutes'] = $a_roll[$id]['minutes'];
$pconfig['descr'] = $a_roll[$id]['descr']; $pconfig['descr'] = $a_roll[$id]['descr'];
} }
$maxnumber = (1<<$config['voucher'][$cpzone]['rollbits']) -1; // Highest Roll# $maxnumber = (1<<$config['voucher'][$cpzone]['rollbits']) -1; // Highest Roll#
$maxcount = (1<<$config['voucher'][$cpzone]['ticketbits']) -1; // Highest Ticket# $maxcount = (1<<$config['voucher'][$cpzone]['ticketbits']) -1; // Highest Ticket#
if ($_POST) { if ($_POST) {
unset($input_errors);
unset($input_errors); $pconfig = $_POST;
$pconfig = $_POST;
/* input validation */ /* input validation */
$reqdfields = explode(" ", "number count minutes"); $reqdfields = explode(" ", "number count minutes");
...@@ -85,27 +88,30 @@ if ($_POST) { ...@@ -85,27 +88,30 @@ if ($_POST) {
do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors); do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
// Look for duplicate roll # // Look for duplicate roll #
foreach($a_roll as $re) { foreach ($a_roll as $re) {
if($re['number'] == $_POST['number']) { if ($re['number'] == $_POST['number']) {
$input_errors[] = sprintf(gettext("Roll number %s already exists."), $_POST['number']); $input_errors[] = sprintf(gettext("Roll number %s already exists."), $_POST['number']);
break; break;
} }
} }
if (!is_numeric($_POST['number']) || $_POST['number'] >= $maxnumber) if (!is_numeric($_POST['number']) || $_POST['number'] >= $maxnumber) {
$input_errors[] = sprintf(gettext("Roll number must be numeric and less than %s"), $maxnumber); $input_errors[] = sprintf(gettext("Roll number must be numeric and less than %s"), $maxnumber);
}
if (!is_numeric($_POST['count']) || $_POST['count'] < 1 || $_POST['count'] > $maxcount) if (!is_numeric($_POST['count']) || $_POST['count'] < 1 || $_POST['count'] > $maxcount) {
$input_errors[] = sprintf(gettext("A roll has at least one voucher and less than %s."), $maxcount); $input_errors[] = sprintf(gettext("A roll has at least one voucher and less than %s."), $maxcount);
}
if (!is_numeric($_POST['minutes']) || $_POST['minutes'] < 1) if (!is_numeric($_POST['minutes']) || $_POST['minutes'] < 1) {
$input_errors[] = gettext("Each voucher must be good for at least 1 minute."); $input_errors[] = gettext("Each voucher must be good for at least 1 minute.");
}
if (!$input_errors) { if (!$input_errors) {
if (isset($id) && $a_roll[$id]) {
if (isset($id) && $a_roll[$id])
$rollent = $a_roll[$id]; $rollent = $a_roll[$id];
}
$rollent['zone'] = $_POST['zone']; $rollent['zone'] = $_POST['zone'];
$rollent['number'] = $_POST['number']; $rollent['number'] = $_POST['number'];
...@@ -113,15 +119,15 @@ if ($_POST) { ...@@ -113,15 +119,15 @@ if ($_POST) {
$rollent['descr'] = $_POST['descr']; $rollent['descr'] = $_POST['descr'];
/* New Roll or modified voucher count: create bitmask */ /* New Roll or modified voucher count: create bitmask */
$voucherlck = lock("voucher{$cpzone}"); $voucherlck = lock("voucher{$cpzone}");
if ($_POST['count'] != $rollent['count']) { if ($_POST['count'] != $rollent['count']) {
$rollent['count'] = $_POST['count']; $rollent['count'] = $_POST['count'];
$len = ($rollent['count']>>3) + 1; // count / 8 +1 $len = ($rollent['count']>>3) + 1; // count / 8 +1
$rollent['used'] = base64_encode(str_repeat("\000",$len)); // 4 bitmask $rollent['used'] = base64_encode(str_repeat("\000", $len)); // 4 bitmask
$rollent['active'] = array(); $rollent['active'] = array();
voucher_write_used_db($rollent['number'], $rollent['used']); voucher_write_used_db($rollent['number'], $rollent['used']);
voucher_write_active_db($rollent['number'], array()); // create empty DB voucher_write_active_db($rollent['number'], array()); // create empty DB
voucher_log(LOG_INFO,sprintf(gettext('All %1$s vouchers from Roll %2$s marked unused'), $rollent['count'], $rollent['number'])); voucher_log(LOG_INFO, sprintf(gettext('All %1$s vouchers from Roll %2$s marked unused'), $rollent['count'], $rollent['number']));
} else { } else {
// existing roll has been modified but without changing the count // existing roll has been modified but without changing the count
// read active and used DB from ramdisk and store it in XML config // read active and used DB from ramdisk and store it in XML config
...@@ -129,7 +135,7 @@ if ($_POST) { ...@@ -129,7 +135,7 @@ if ($_POST) {
$activent = array(); $activent = array();
$db = array(); $db = array();
$active_vouchers = voucher_read_active_db($rollent['number'], $rollent['minutes']); $active_vouchers = voucher_read_active_db($rollent['number'], $rollent['minutes']);
foreach($active_vouchers as $voucher => $line) { foreach ($active_vouchers as $voucher => $line) {
list($timestamp, $minutes) = explode(",", $line); list($timestamp, $minutes) = explode(",", $line);
$activent['voucher'] = $voucher; $activent['voucher'] = $voucher;
$activent['timestamp'] = $timestamp; $activent['timestamp'] = $timestamp;
...@@ -138,12 +144,13 @@ if ($_POST) { ...@@ -138,12 +144,13 @@ if ($_POST) {
} }
$rollent['active'] = $db; $rollent['active'] = $db;
} }
unlock($voucherlck); unlock($voucherlck);
if (isset($id) && $a_roll[$id]) if (isset($id) && $a_roll[$id]) {
$a_roll[$id] = $rollent; $a_roll[$id] = $rollent;
else } else {
$a_roll[] = $rollent; $a_roll[] = $rollent;
}
write_config(); write_config();
...@@ -165,8 +172,12 @@ include("head.inc"); ...@@ -165,8 +172,12 @@ include("head.inc");
<div class="row"> <div class="row">
<?php if ($input_errors) print_input_errors($input_errors); ?> <?php if ($input_errors) {
<?php if ($savemsg) print_info_box($savemsg); ?> print_input_errors($input_errors);
} ?>
<?php if ($savemsg) {
print_info_box($savemsg);
} ?>
<section class="col-xs-12"> <section class="col-xs-12">
...@@ -180,15 +191,19 @@ include("head.inc"); ...@@ -180,15 +191,19 @@ include("head.inc");
<tr> <tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Roll"); ?>#</td> <td width="22%" valign="top" class="vncellreq"><?=gettext("Roll"); ?>#</td>
<td width="78%" class="vtable"> <td width="78%" class="vtable">
<?=$mandfldhtml;?><input name="number" type="text" class="formfld" id="number" size="10" value="<?=htmlspecialchars($pconfig['number']);?>" /> <?=$mandfldhtml;
?><input name="number" type="text" class="formfld" id="number" size="10" value="<?=htmlspecialchars($pconfig['number']);?>" />
<br /> <br />
<span class="vexpl"><?=gettext("Enter the Roll"); ?># (0..<?=htmlspecialchars($maxnumber);?>) <?=gettext("found on top of the generated/printed vouchers"); ?>.</span> <span class="vexpl"><?=gettext("Enter the Roll");
?># (0..<?=htmlspecialchars($maxnumber);
?>) <?=gettext("found on top of the generated/printed vouchers"); ?>.</span>
</td> </td>
</tr> </tr>
<tr> <tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Minutes per Ticket"); ?></td> <td width="22%" valign="top" class="vncellreq"><?=gettext("Minutes per Ticket"); ?></td>
<td width="78%" class="vtable"> <td width="78%" class="vtable">
<?=$mandfldhtml;?><input name="minutes" type="text" class="formfld" id="minutes" size="10" value="<?=htmlspecialchars($pconfig['minutes']);?>" /> <?=$mandfldhtml;
?><input name="minutes" type="text" class="formfld" id="minutes" size="10" value="<?=htmlspecialchars($pconfig['minutes']);?>" />
<br /> <br />
<span class="vexpl"><?=gettext("Defines the time in minutes that a user is allowed access. The clock starts ticking the first time a voucher is used for authentication"); ?>.</span> <span class="vexpl"><?=gettext("Defines the time in minutes that a user is allowed access. The clock starts ticking the first time a voucher is used for authentication"); ?>.</span>
</td> </td>
...@@ -196,15 +211,19 @@ include("head.inc"); ...@@ -196,15 +211,19 @@ include("head.inc");
<tr> <tr>
<td width="22%" valign="top" class="vncellreq"><?=gettext("Count"); ?></td> <td width="22%" valign="top" class="vncellreq"><?=gettext("Count"); ?></td>
<td width="78%" class="vtable"> <td width="78%" class="vtable">
<?=$mandfldhtml;?><input name="count" type="text" class="formfld" id="count" size="10" value="<?=htmlspecialchars($pconfig['count']);?>" /> <?=$mandfldhtml;
?><input name="count" type="text" class="formfld" id="count" size="10" value="<?=htmlspecialchars($pconfig['count']);?>" />
<br /> <br />
<span class="vexpl"><?=gettext("Enter the number of vouchers"); ?> (1..<?=htmlspecialchars($maxcount);?>) <?=gettext("found on top of the generated/printed vouchers. WARNING: Changing this number for an existing Roll will mark all vouchers as unused again"); ?>.</span> <span class="vexpl"><?=gettext("Enter the number of vouchers");
?> (1..<?=htmlspecialchars($maxcount);
?>) <?=gettext("found on top of the generated/printed vouchers. WARNING: Changing this number for an existing Roll will mark all vouchers as unused again"); ?>.</span>
</td> </td>
</tr> </tr>
<tr> <tr>
<td width="22%" valign="top" class="vncell"><?=gettext("Comment"); ?></td> <td width="22%" valign="top" class="vncell"><?=gettext("Comment"); ?></td>
<td width="78%" class="vtable"> <td width="78%" class="vtable">
<?=$mandfldhtml;?><input name="descr" type="text" class="formfld" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>" /> <?=$mandfldhtml;
?><input name="descr" type="text" class="formfld" id="descr" size="60" value="<?=htmlspecialchars($pconfig['descr']);?>" />
<br /> <br />
<span class="vexpl"><?=gettext("Can be used to further identify this roll. Ignored by the system"); ?>.</span> <span class="vexpl"><?=gettext("Can be used to further identify this roll. Ignored by the system"); ?>.</span>
</td> </td>
...@@ -214,9 +233,11 @@ include("head.inc"); ...@@ -214,9 +233,11 @@ include("head.inc");
<td width="78%"> <td width="78%">
<input name="Submit" type="submit" class="btn btn-primary" value="<?=gettext("Save"); ?>" /> <input name="Submit" type="submit" class="btn btn-primary" value="<?=gettext("Save"); ?>" />
<input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" /> <input name="zone" type="hidden" value="<?=htmlspecialchars($cpzone);?>" />
<?php if (isset($id) && $a_roll[$id]): ?> <?php if (isset($id) && $a_roll[$id]) :
?>
<input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" /> <input name="id" type="hidden" value="<?=htmlspecialchars($id);?>" />
<?php endif; ?> <?php
endif; ?>
</td> </td>
</tr> </tr>
</table> </table>
...@@ -228,4 +249,4 @@ include("head.inc"); ...@@ -228,4 +249,4 @@ include("head.inc");
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -34,23 +34,25 @@ require_once("captiveportal.inc"); ...@@ -34,23 +34,25 @@ require_once("captiveportal.inc");
global $cpzone; global $cpzone;
global $cpzoneid; global $cpzoneid;
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp = &$config['captiveportal']; $a_cp = &$config['captiveportal'];
if ($_GET['act'] == "del" && !empty($_GET['zone'])) { if ($_GET['act'] == "del" && !empty($_GET['zone'])) {
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if ($a_cp[$cpzone]) { if ($a_cp[$cpzone]) {
$cpzoneid = $a_cp[$cpzone]['zoneid']; $cpzoneid = $a_cp[$cpzone]['zoneid'];
unset($a_cp[$cpzone]['enable']); unset($a_cp[$cpzone]['enable']);
captiveportal_configure(); captiveportal_configure();
unset($a_cp[$cpzone]); unset($a_cp[$cpzone]);
if (isset($config['voucher'][$cpzone])) if (isset($config['voucher'][$cpzone])) {
unset($config['voucher'][$cpzone]); unset($config['voucher'][$cpzone]);
write_config(); }
header("Location: services_captiveportal_zones.php"); write_config();
exit; header("Location: services_captiveportal_zones.php");
} exit;
}
} }
$pgtitle = array(gettext("Captiveportal"),gettext("Zones")); $pgtitle = array(gettext("Captiveportal"),gettext("Zones"));
...@@ -58,7 +60,7 @@ $shortcut_section = "captiveportal"; ...@@ -58,7 +60,7 @@ $shortcut_section = "captiveportal";
include("head.inc"); include("head.inc");
$main_buttons = array( $main_buttons = array(
array('href'=>'services_captiveportal_zones_edit.php', 'label'=>gettext("add a new captiveportal instance")), array('href'=>'services_captiveportal_zones_edit.php', 'label'=>gettext("add a new captiveportal instance")),
); );
?> ?>
...@@ -70,10 +72,14 @@ $main_buttons = array( ...@@ -70,10 +72,14 @@ $main_buttons = array(
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<?php if ($savemsg) print_info_box($savemsg); ?> <?php if ($savemsg) {
<?php if (is_subsystem_dirty('captiveportal')): ?><p> print_info_box($savemsg);
} ?>
<?php if (is_subsystem_dirty('captiveportal')) :
?><p>
<?php print_info_box_np(gettext("The CaptivePortal entry list has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?> <?php print_info_box_np(gettext("The CaptivePortal entry list has been changed") . ".<br />" . gettext("You must apply the changes in order for them to take effect."));?>
<?php endif; ?> <?php
endif; ?>
<section class="col-xs-12"> <section class="col-xs-12">
...@@ -93,35 +99,40 @@ $main_buttons = array( ...@@ -93,35 +99,40 @@ $main_buttons = array(
</td> </td>
</tr> </tr>
<?php foreach ($a_cp as $cpzone => $cpitem): <?php foreach ($a_cp as $cpzone => $cpitem) :
if (!is_array($cpitem)) if (!is_array($cpitem)) {
continue; continue;
?> }
?>
<tr> <tr>
<td class="listlr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';"> <td class="listlr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
<?=htmlspecialchars($cpitem['zone']);?> <?=htmlspecialchars($cpitem['zone']);?>
</td> </td>
<td class="listlr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';"> <td class="listlr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
<?php $cpifaces = explode(",", $cpitem['interface']); <?php $cpifaces = explode(",", $cpitem['interface']);
foreach ($cpifaces as $cpiface) foreach ($cpifaces as $cpiface) {
echo convert_friendly_interface_to_friendly_descr($cpiface) . " "; echo convert_friendly_interface_to_friendly_descr($cpiface) . " ";
?> }
?>
</td> </td>
<td class="listr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';"> <td class="listr" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
<?php <?php
$cpdb = new OPNsense\CaptivePortal\DB($cpzone) ; $cpdb = new OPNsense\CaptivePortal\DB($cpzone) ;
echo $cpdb->countClients() ; echo $cpdb->countClients() ;
?> ?>
</td> </td>
<td class="listbg" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';"> <td class="listbg" ondblclick="document.location='services_captiveportal.php?zone=<?=$cpzone;?>';">
<?=htmlspecialchars($cpitem['descr']);?>&nbsp; <?=htmlspecialchars($cpitem['descr']);?>&nbsp;
</td> </td>
<td valign="middle" class="list nowrap"> <td valign="middle" class="list nowrap">
<a href="services_captiveportal.php?zone=<?=$cpzone?>" title="<?=gettext("edit captiveportal instance"); ?>" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-pencil"></span></a> <a href="services_captiveportal.php?zone=<?=$cpzone?>" title="<?=gettext("edit captiveportal instance"); ?>" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-pencil"></span></a>
<a href="services_captiveportal_zones.php?act=del&amp;zone=<?=$cpzone;?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?");?>')" title="<?=gettext("delete captiveportal instance");?>" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-remove"></span></a> <a href="services_captiveportal_zones.php?act=del&amp;zone=<?=$cpzone;
?>" onclick="return confirm('<?=gettext("Do you really want to delete this entry?");
?>')" title="<?=gettext("delete captiveportal instance");?>" class="btn btn-default btn-xs"><span class="glyphicon glyphicon-remove"></span></a>
</td> </td>
</tr> </tr>
<?php endforeach; ?> <?php
endforeach; ?>
</table> </table>
</div> </div>
</form> </form>
...@@ -130,4 +141,4 @@ $main_buttons = array( ...@@ -130,4 +141,4 @@ $main_buttons = array(
</div> </div>
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -35,43 +35,43 @@ require_once("captiveportal.inc"); ...@@ -35,43 +35,43 @@ require_once("captiveportal.inc");
$pgtitle = array(gettext("Services"),gettext("Captive portal"),gettext("Edit Zones")); $pgtitle = array(gettext("Services"),gettext("Captive portal"),gettext("Edit Zones"));
$shortcut_section = "captiveportal"; $shortcut_section = "captiveportal";
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
if ($_POST) { if ($_POST) {
unset($input_errors);
unset($input_errors); $pconfig = $_POST;
$pconfig = $_POST;
/* input validation */
/* input validation */ $reqdfields = explode(" ", "zone");
$reqdfields = explode(" ", "zone"); $reqdfieldsn = array(gettext("Zone name"));
$reqdfieldsn = array(gettext("Zone name"));
do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
do_input_validation($_POST, $reqdfields, $reqdfieldsn, $input_errors);
if (preg_match('/[^A-Za-z0-9_]/', $_POST['zone'])) {
if (preg_match('/[^A-Za-z0-9_]/', $_POST['zone'])) { $input_errors[] = gettext("The zone name can only contain letters, digits, and underscores (_).");
$input_errors[] = gettext("The zone name can only contain letters, digits, and underscores (_)."); }
}
foreach ($a_cp as $cpkey => $cpent) {
foreach ($a_cp as $cpkey => $cpent) { if ($cpent['zone'] == $_POST['zone']) {
if ($cpent['zone'] == $_POST['zone']) { $input_errors[] = sprintf("[%s] %s.", $_POST['zone'], gettext("already exists"));
$input_errors[] = sprintf("[%s] %s.", $_POST['zone'], gettext("already exists")); break;
break; }
} }
}
if (!$input_errors) {
if (!$input_errors) { $cpzone = strtolower($_POST['zone']);
$cpzone = strtolower($_POST['zone']); $a_cp[$cpzone] = array();
$a_cp[$cpzone] = array(); $a_cp[$cpzone]['zone'] = str_replace(" ", "", $_POST['zone']);
$a_cp[$cpzone]['zone'] = str_replace(" ", "", $_POST['zone']); $a_cp[$cpzone]['descr'] = $_POST['descr'];
$a_cp[$cpzone]['descr'] = $_POST['descr']; $a_cp[$cpzone]['localauth_priv'] = true;
$a_cp[$cpzone]['localauth_priv'] = true; write_config();
write_config();
header("Location: services_captiveportal.php?zone={$cpzone}");
header("Location: services_captiveportal.php?zone={$cpzone}"); exit;
exit; }
}
} }
include("head.inc"); include("head.inc");
?> ?>
...@@ -84,7 +84,9 @@ include("head.inc"); ...@@ -84,7 +84,9 @@ include("head.inc");
<div class="row"> <div class="row">
<?php if ($input_errors) print_input_errors($input_errors); ?> <?php if ($input_errors) {
print_input_errors($input_errors);
} ?>
<section class="col-xs-12"> <section class="col-xs-12">
...@@ -131,4 +133,4 @@ include("head.inc"); ...@@ -131,4 +133,4 @@ include("head.inc");
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -35,16 +35,18 @@ require_once("captiveportal.inc"); ...@@ -35,16 +35,18 @@ require_once("captiveportal.inc");
require_once("voucher.inc"); require_once("voucher.inc");
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone)) { if (empty($cpzone)) {
header("Location: status_captiveportal.php"); header("Location: status_captiveportal.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Expire Vouchers"), $a_cp[$cpzone]['zone']); $pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Expire Vouchers"), $a_cp[$cpzone]['zone']);
...@@ -64,14 +66,14 @@ include("head.inc"); ...@@ -64,14 +66,14 @@ include("head.inc");
<section class="col-xs-12"> <section class="col-xs-12">
<?php <?php
$tab_array = array(); $tab_array = array();
$tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}"); $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
$tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}"); $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}");
$tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}"); $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
$tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}"); $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}");
$tab_array[] = array(gettext("Expire Vouchers"), true, "status_captiveportal_expire.php?zone={$cpzone}"); $tab_array[] = array(gettext("Expire Vouchers"), true, "status_captiveportal_expire.php?zone={$cpzone}");
display_top_tabs($tab_array); display_top_tabs($tab_array);
?> ?>
<div class="tab-content content-box col-xs-12"> <div class="tab-content content-box col-xs-12">
...@@ -99,20 +101,20 @@ include("head.inc"); ...@@ -99,20 +101,20 @@ include("head.inc");
</table> </table>
<?php <?php
if ($_POST) { if ($_POST) {
if ($_POST['vouchers']) { if ($_POST['vouchers']) {
$result = voucher_expire($_POST['vouchers']); $result = voucher_expire($_POST['vouchers']);
echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" width=\"100%\" summary=\"results\">\n"; echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" width=\"100%\" summary=\"results\">\n";
if ( $result) { if ($result) {
echo "<tr><td bgcolor=\"#D9DEE8\"><img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" alt=\"pass\" /></td>"; echo "<tr><td bgcolor=\"#D9DEE8\"><img src=\"/themes/{$g['theme']}/images/icons/icon_pass.gif\" alt=\"pass\" /></td>";
echo "<td bgcolor=\"#D9DEE8\">Success</td></tr>"; echo "<td bgcolor=\"#D9DEE8\">Success</td></tr>";
} else { } else {
echo "<tr><td bgcolor=\"#FFD9D1\"><img src=\"/themes/{$g['theme']}/images/icons/icon_block.gif\" alt=\"block\" /></td>"; echo "<tr><td bgcolor=\"#FFD9D1\"><img src=\"/themes/{$g['theme']}/images/icons/icon_block.gif\" alt=\"block\" /></td>";
echo "<td bgcolor=\"#FFD9D1\">Error</td></tr>"; echo "<td bgcolor=\"#FFD9D1\">Error</td></tr>";
} }
echo "</table>"; echo "</table>";
} }
} }
?> ?>
</div> </div>
...@@ -125,4 +127,4 @@ if ($_POST) { ...@@ -125,4 +127,4 @@ if ($_POST) {
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -35,16 +35,18 @@ require_once("captiveportal.inc"); ...@@ -35,16 +35,18 @@ require_once("captiveportal.inc");
require_once("voucher.inc"); require_once("voucher.inc");
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone)) { if (empty($cpzone)) {
header("Location: status_captiveportal.php"); header("Location: status_captiveportal.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Test Vouchers"), $a_cp[$cpzone]['zone']); $pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Test Vouchers"), $a_cp[$cpzone]['zone']);
...@@ -65,14 +67,14 @@ include("head.inc"); ...@@ -65,14 +67,14 @@ include("head.inc");
<section class="col-xs-12"> <section class="col-xs-12">
<?php <?php
$tab_array = array(); $tab_array = array();
$tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}"); $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
$tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}"); $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}");
$tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}"); $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
$tab_array[] = array(gettext("Test Vouchers"), true, "status_captiveportal_test.php?zone={$cpzone}"); $tab_array[] = array(gettext("Test Vouchers"), true, "status_captiveportal_test.php?zone={$cpzone}");
$tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}"); $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}");
display_top_tabs($tab_array); display_top_tabs($tab_array);
?> ?>
<div class="tab-content content-box col-xs-12"> <div class="tab-content content-box col-xs-12">
...@@ -128,4 +130,4 @@ if ($_POST) { ...@@ -128,4 +130,4 @@ if ($_POST) {
<? include("foot.inc"); ?> <? include("foot.inc");
...@@ -35,22 +35,24 @@ require_once("captiveportal.inc"); ...@@ -35,22 +35,24 @@ require_once("captiveportal.inc");
require_once("voucher.inc"); require_once("voucher.inc");
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone)) { if (empty($cpzone)) {
header("Location: status_captiveportal.php"); header("Location: status_captiveportal.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Voucher Rolls"), $a_cp[$cpzone]['zone']); $pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Voucher Rolls"), $a_cp[$cpzone]['zone']);
$shortcut_section = "captiveportal-vouchers"; $shortcut_section = "captiveportal-vouchers";
if (!is_array($config['voucher'][$cpzone]['roll'])) { if (!is_array($config['voucher'][$cpzone]['roll'])) {
$config['voucher'][$cpzone]['roll'] = array(); $config['voucher'][$cpzone]['roll'] = array();
} }
$a_roll = &$config['voucher'][$cpzone]['roll']; $a_roll = &$config['voucher'][$cpzone]['roll'];
...@@ -69,14 +71,14 @@ include("head.inc"); ...@@ -69,14 +71,14 @@ include("head.inc");
<section class="col-xs-12"> <section class="col-xs-12">
<?php <?php
$tab_array = array(); $tab_array = array();
$tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}"); $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
$tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}"); $tab_array[] = array(gettext("Active Vouchers"), false, "status_captiveportal_vouchers.php?zone={$cpzone}");
$tab_array[] = array(gettext("Voucher Rolls"), true, "status_captiveportal_voucher_rolls.php?zone={$cpzone}"); $tab_array[] = array(gettext("Voucher Rolls"), true, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
$tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}"); $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}");
$tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}"); $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}");
display_top_tabs($tab_array); display_top_tabs($tab_array);
?> ?>
<div class="tab-content content-box col-xs-12"> <div class="tab-content content-box col-xs-12">
...@@ -96,14 +98,14 @@ include("head.inc"); ...@@ -96,14 +98,14 @@ include("head.inc");
<td class="listhdr"><?=gettext("ready"); ?></td> <td class="listhdr"><?=gettext("ready"); ?></td>
</tr> </tr>
<?php <?php
$voucherlck = lock("vouche{$cpzone}r"); $voucherlck = lock("vouche{$cpzone}r");
$i = 0; foreach($a_roll as $rollent): $i = 0; foreach ($a_roll as $rollent) :
$used = voucher_used_count($rollent['number']); $used = voucher_used_count($rollent['number']);
$active = count(voucher_read_active_db($rollent['number']),$rollent['minutes']); $active = count(voucher_read_active_db($rollent['number']), $rollent['minutes']);
$ready = $rollent['count'] - $used; $ready = $rollent['count'] - $used;
/* used also count active vouchers, remove them */ /* used also count active vouchers, remove them */
$used = $used - $active; $used = $used - $active;
?> ?>
<tr> <tr>
<td class="listlr"> <td class="listlr">
<?=htmlspecialchars($rollent['number']); ?>&nbsp; <?=htmlspecialchars($rollent['number']); ?>&nbsp;
...@@ -127,7 +129,10 @@ include("head.inc"); ...@@ -127,7 +129,10 @@ include("head.inc");
<?=htmlspecialchars($ready); ?>&nbsp; <?=htmlspecialchars($ready); ?>&nbsp;
</td> </td>
</tr> </tr>
<?php $i++; endforeach; unlock($voucherlck); ?> <?php $i++;
endforeach;
unlock($voucherlck); ?>
</table> </table>
</div> </div>
</form> </form>
...@@ -138,4 +143,4 @@ include("head.inc"); ...@@ -138,4 +143,4 @@ include("head.inc");
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
...@@ -35,58 +35,61 @@ require_once("captiveportal.inc"); ...@@ -35,58 +35,61 @@ require_once("captiveportal.inc");
require_once("voucher.inc"); require_once("voucher.inc");
$cpzone = $_GET['zone']; $cpzone = $_GET['zone'];
if (isset($_POST['zone'])) if (isset($_POST['zone'])) {
$cpzone = $_POST['zone']; $cpzone = $_POST['zone'];
}
if (empty($cpzone)) { if (empty($cpzone)) {
header("Location: status_captiveportal.php"); header("Location: status_captiveportal.php");
exit; exit;
} }
if (!is_array($config['captiveportal'])) if (!is_array($config['captiveportal'])) {
$config['captiveportal'] = array(); $config['captiveportal'] = array();
}
$a_cp =& $config['captiveportal']; $a_cp =& $config['captiveportal'];
$pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Vouchers"), $a_cp[$cpzone]['zone']); $pgtitle = array(gettext("Status"), gettext("Captive portal"), gettext("Vouchers"), $a_cp[$cpzone]['zone']);
$shortcut_section = "captiveportal-vouchers"; $shortcut_section = "captiveportal-vouchers";
function clientcmp($a, $b) { function clientcmp($a, $b)
global $order; {
return strcmp($a[$order], $b[$order]); global $order;
return strcmp($a[$order], $b[$order]);
} }
if (!is_array($config['voucher'][$cpzone]['roll'])) { if (!is_array($config['voucher'][$cpzone]['roll'])) {
$config['voucher'][$cpzone]['roll'] = array(); $config['voucher'][$cpzone]['roll'] = array();
} }
$a_roll = $config['voucher'][$cpzone]['roll']; $a_roll = $config['voucher'][$cpzone]['roll'];
$db = array(); $db = array();
foreach($a_roll as $rollent) { foreach ($a_roll as $rollent) {
$roll = $rollent['number']; $roll = $rollent['number'];
$minutes = $rollent['minutes']; $minutes = $rollent['minutes'];
if (!file_exists("/var/db/voucher_{$cpzone}_active_{$roll}.db")) { if (!file_exists("/var/db/voucher_{$cpzone}_active_{$roll}.db")) {
continue; continue;
} }
$active_vouchers = file("/var/db/voucher_{$cpzone}_active_{$roll}.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $active_vouchers = file("/var/db/voucher_{$cpzone}_active_{$roll}.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($active_vouchers as $voucher => $line) { foreach ($active_vouchers as $voucher => $line) {
list($voucher,$timestamp, $minutes) = explode(",", $line); list($voucher,$timestamp, $minutes) = explode(",", $line);
$remaining = (($timestamp + 60*$minutes) - time()); $remaining = (($timestamp + 60*$minutes) - time());
if ($remaining > 0) { if ($remaining > 0) {
$dbent[0] = $voucher; $dbent[0] = $voucher;
$dbent[1] = $roll; $dbent[1] = $roll;
$dbent[2] = $timestamp; $dbent[2] = $timestamp;
$dbent[3] = intval($remaining/60); $dbent[3] = intval($remaining/60);
$dbent[4] = $timestamp + 60*$minutes; // expires at $dbent[4] = $timestamp + 60*$minutes; // expires at
$db[] = $dbent; $db[] = $dbent;
} }
} }
} }
if ($_GET['order']) { if ($_GET['order']) {
$order = $_GET['order']; $order = $_GET['order'];
usort($db, "clientcmp"); usort($db, "clientcmp");
} }
include("head.inc"); include("head.inc");
...@@ -104,14 +107,14 @@ include("head.inc"); ...@@ -104,14 +107,14 @@ include("head.inc");
<section class="col-xs-12"> <section class="col-xs-12">
<?php <?php
$tab_array = array(); $tab_array = array();
$tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}"); $tab_array[] = array(gettext("Active Users"), false, "status_captiveportal.php?zone={$cpzone}");
$tab_array[] = array(gettext("Active Vouchers"), true, "status_captiveportal_vouchers.php?zone={$cpzone}"); $tab_array[] = array(gettext("Active Vouchers"), true, "status_captiveportal_vouchers.php?zone={$cpzone}");
$tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}"); $tab_array[] = array(gettext("Voucher Rolls"), false, "status_captiveportal_voucher_rolls.php?zone={$cpzone}");
$tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}"); $tab_array[] = array(gettext("Test Vouchers"), false, "status_captiveportal_test.php?zone={$cpzone}");
$tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}"); $tab_array[] = array(gettext("Expire Vouchers"), false, "status_captiveportal_expire.php?zone={$cpzone}");
display_top_tabs($tab_array); display_top_tabs($tab_array);
?> ?>
<div class="tab-content content-box col-xs-12"> <div class="tab-content content-box col-xs-12">
...@@ -122,23 +125,31 @@ include("head.inc"); ...@@ -122,23 +125,31 @@ include("head.inc");
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped table-sort"> <table class="table table-striped table-sort">
<tr> <tr>
<td class="listhdrr"><a href="?order=0&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Voucher"); ?></a></td> <td class="listhdrr"><a href="?order=0&amp;showact=<?=htmlspecialchars($_GET['showact']);
<td class="listhdrr"><a href="?order=1&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Roll"); ?></a></td> ?>"><?=gettext("Voucher"); ?></a></td>
<td class="listhdrr"><a href="?order=2&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Activated at"); ?></a></td> <td class="listhdrr"><a href="?order=1&amp;showact=<?=htmlspecialchars($_GET['showact']);
<td class="listhdrr"><a href="?order=3&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Expires in"); ?></a></td> ?>"><?=gettext("Roll"); ?></a></td>
<td class="listhdr"><a href="?order=4&amp;showact=<?=htmlspecialchars($_GET['showact']);?>"><?=gettext("Expires at"); ?></a></td> <td class="listhdrr"><a href="?order=2&amp;showact=<?=htmlspecialchars($_GET['showact']);
?>"><?=gettext("Activated at"); ?></a></td>
<td class="listhdrr"><a href="?order=3&amp;showact=<?=htmlspecialchars($_GET['showact']);
?>"><?=gettext("Expires in"); ?></a></td>
<td class="listhdr"><a href="?order=4&amp;showact=<?=htmlspecialchars($_GET['showact']);
?>"><?=gettext("Expires at"); ?></a></td>
<td class="list"></td> <td class="list"></td>
</tr> </tr>
<?php foreach ($db as $dbent): ?> <?php foreach ($db as $dbent) :
?>
<tr> <tr>
<td class="listlr"><?=$dbent[0];?></td> <td class="listlr"><?=$dbent[0];?></td>
<td class="listr"><?=$dbent[1];?></td> <td class="listr"><?=$dbent[1];?></td>
<td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $dbent[2]));?></td> <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $dbent[2]));?></td>
<td class="listr"><?=$dbent[3];?> <?=gettext("min"); ?></td> <td class="listr"><?=$dbent[3];
?> <?=gettext("min"); ?></td>
<td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $dbent[4]));?></td> <td class="listr"><?=htmlspecialchars(date("m/d/Y H:i:s", $dbent[4]));?></td>
<td class="list"></td> <td class="list"></td>
</tr> </tr>
<?php endforeach; ?> <?php
endforeach; ?>
</table> </table>
</div> </div>
</form> </form>
...@@ -149,4 +160,4 @@ include("head.inc"); ...@@ -149,4 +160,4 @@ include("head.inc");
</div> </div>
</section> </section>
<?php include("foot.inc"); ?> <?php include("foot.inc");
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment