我想知道是否有任何方法可用于生成可在Pfsense强制门户中兑换的优惠券。基本上我有一个防火墙,为客人提供互联网到wifi路由器。我想为工作人员提供某种形式的界面,以便能够创建优惠券并将其提供给客户而无需登录到wifi。我在网上找到了两个潜在客户,https://sourceforge.net/projects/vouchergen/和https://github.com/jpardobl/pfsense_vouchers_rest,但他们不再有效。有什么建议?提前谢谢。
答案 0 :(得分:0)
我刚刚写完一个简单的php页面来做到这一点。它适用于mysql数据库,它只有两个表,一个用于凭证,另一个用于IP地址,我想授予对此页面的访问权。
一旦用户选择了凭证类型(分钟)并点击"生成"然后它在本地数据库中选择任何有效的凭证并将其标记为已使用。
以下是代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vouchers DSA</title>
</head>
<body>
<?php
function gera_form(){
?>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
<?php
echo '<h2 align="center">Gerador de vouchers para WiFi</center></h2>';
echo '<p align="center">Selecione a duração desejada e clique em "Gerar Voucher"</center></p>';
echo '<br><br>';
echo '<div align="center">';
echo '<form method="POST">';
echo '<select name="state">';
echo '<option value="--">Duração</option>';
echo '<option value="30">1/2 hora</option>';
echo '<option value="60">1 hora</option>';
echo '<option value="120">2 horas</option>';
echo '<option value="1440">1 dia</option>';
echo '<option value="43200">1 mês</option>';
echo '</select>';
echo '<br><br><input type="submit" value="Gerar Voucher">';
echo '</form> </center>';
echo '</div>';
}
$ip=get_client_ip();
$hostname="localhost";
$username="root";
$password="771477";
$db = "banco_voucher";
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
function get_client_ip() {
$ipaddress = '';
if (getenv('HTTP_CLIENT_IP'))
$ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED'))
$ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR'))
$ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED'))
$ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR'))
$ipaddress = getenv('REMOTE_ADDR');
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
function get_voucher($valor, $ip, $dbh){
$hostname="localhost";
$username="root";
$password="771477";
$db = "banco_voucher";
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
foreach($dbh->query("update vouchers
set solicitado_por =
(select id_usuario from usuarios where ip_maquina = '$ip'),
solicitado_em = now(),
validade = 0
where validade != 0 and minutos = '$valor'
limit 1;" ) as $row);
}
function get_time($minutos){
$dur = "";
if ($minutos == 30) {
$dur = "1/2 hora";
} else if ($minutos == 60) {
$dur = "1 hora";
} else if ($minutos == 120) {
$dur = "2 horas";
} else if ($minutos == 1440) {
$dur = "1 dia";
} else if ($minutos == 43200) {
$dur = "1 mes";
} else {
$dur = "desconhecida";
}
return $dur;
}
function gera_tabela($ip){
$hostname="localhost";
$username="root";
$password="771477";
$db = "banco_voucher";
$dbh = new PDO("mysql:host=$hostname;dbname=$db", $username, $password);
$historico = array("<table>
<tr>
<th>Departamento</th>
<th>Voucher</th>
<th>Duracao</th>
<th>Data</th>
</tr>",);
$teste = array ("a");
try {
$select = $dbh->query("select b.departamento,
a.cod_voucher, a.minutos,
date_format(a.solicitado_em, '%d/%c/%Y - %H:%i:%s') as stamp
from vouchers as a
right join usuarios as b on (solicitado_por = id_usuario)
where ip_maquina = '$ip' and cod_voucher is not null
order by stamp desc limit 10;");
} catch (Exception $exc) {
echo $exc->getTraceAsString();
}
$result = $select->fetchAll();
echo "<br><br>";
echo $historico[0];
$i = 0;
foreach($result as $row){
$dur = get_time($row['minutos']);
array_push($historico, "<tr><td>".$row['departamento']."</td>"
. "<td>".$row['cod_voucher']."</td>"
. "<td>".$dur."</td>"
. "<td>".$row['stamp']."</td>"
. "</tr>");
$i++;
echo $historico[$i];
}
echo "</table>";
}
foreach($dbh->query("select-count(ip_maquina) as ip from usuarios where ip_maquina = '$ip';") as $row){
if($row['ip'] == 0){
echo "<h1>Acesso negado</h1>";
echo "<p>Sua estação de trabalho não tem as permissões de acesso necessárias."
. "<br>Contate a equipe de TI para mais informações.</p><hr>";
echo "<address>Gestão de vouchers - Divisão Sul Americana da IASD</address>";
}
else if($row['ip'] != 0){
gera_form();
get_voucher($_POST['state'], $ip);
gera_tabela($ip);
if(isset($_POST['state'])){
header("Location:SandBox.php");
unset($_POST['state']);
if($_POST['state']=="--"){
echo "Escolha um tempo apropriado para a validade do voucher.";
}
}
}
}
?>
</body>
</html>
由于这是我的第一个php页面,它可能是一个经验丰富的php程序员的眼中的灾难,但它非常实用,并且正确地做你想要的。
将上面的代码复制到名为SandBox.php的文件中,并放在Apache / www / html文件夹中。
可以使用以下代码创建mysql中的表:
对于优惠券:
CREATE TABLE `vouchers` (
`id_voucher` int(11) NOT NULL AUTO_INCREMENT,
`cod_voucher` varchar(10) DEFAULT NULL,
`validade` bit(1) DEFAULT NULL,
`solicitado_em` varchar(20) DEFAULT NULL,
`solicitado_por` varchar(15) DEFAULT NULL,
`minutos` int(11) DEFAULT NULL,
PRIMARY KEY (`id_voucher`)
) ENGINE=InnoDB AUTO_INCREMENT=131073 DEFAULT CHARSET=utf8;
您必须在“验证”栏中进行手动更新。设置值&#39; 1&#39;所有优惠券的[含义有效]。在页面挑选后,它将更新为&#39; 0&#39; 0 [意思是使用]。
update vouchers set validade = 1;
对于允许访问该页面的IP地址:
CREATE TABLE `usuarios` (
`id_usuario` int(11) NOT NULL AUTO_INCREMENT,
`ip_maquina` varchar(15) DEFAULT NULL,
`departamento` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id_usuario`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
您必须在此表中手动插入,解析管理机器的IP地址及其名称/位置/标签/您想用作人类可读ID的任何内容。
insert into usuarios(ip_maquina, departamento) values ('10.91.198.12', 'Cyber Cafe');
PS:字段名称是葡萄牙语。
将.csv文件从PfSense加载到本地数据库中:
LOAD DATA LOCAL INFILE '/home/infra/Downloads/vouchers.csv'
INTO TABLE vouchers
LINES TERMINATED BY '\n' (cod_voucher);
希望它可以帮到你。