2016-03-08 113 views
1

我想知道是否有任何方法可用於生成可在Pfsense強制門戶中兌換的代金券。基本上我有一個防火牆,它將互聯網連接到一個無線路由器供客人使用。我想爲工作人員提供某種形式的界面,以便能夠創建優惠券並將其提供給客戶,而無需登錄到無線網絡。我在網上找到了兩條線索,https://sourceforge.net/projects/vouchergen/https://github.com/jpardobl/pfsense_vouchers_rest,但他們不再工作。有什麼建議?提前致謝。Pfsense無需登錄防火牆即可生成強制門戶代金券

+0

我是您提到的第一個項目的開發人員(https://sourceforge.net/projects/vouchergen/)。除了使用不推薦的mysql_-functions(沒有「我」,我已經在發佈修復這個問題的更新),它應該可以正常工作。你能詳細說明你所面臨的問題嗎? – user1447577

回答

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; 

必須做在列「validade」設定值的手動更新「1」 [意所有優惠券均有效]。在被頁面選中之後,它將被更新爲'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 .:該字段的名稱是葡萄牙語。

從PfSense .csv文件加載到本地數據庫:

LOAD DATA LOCAL INFILE '/home/infra/Downloads/vouchers.csv' 
INTO TABLE vouchers 
LINES TERMINATED BY '\n' (cod_voucher); 

希望它可以幫助你。