Changeset 31953


Ignore:
Timestamp:
Nov 28, 2018, 10:18:04 AM (5 years ago)
Author:
plg
Message:

Simpler user interface, display banned IP current status, regroup IP management

Location:
extensions/AntiAspi
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • extensions/AntiAspi/admin.php

    r31952 r31953  
    11<?php
    22
    3 if (!defined('PHPWG_ROOT_PATH'))
    4     die('Hacking attempt!');
     3if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
     4
    55global $template, $conf, $user;
     6
    67include_once(PHPWG_ROOT_PATH . 'admin/include/tabsheet.class.php');
     8
    79load_language('plugin.lang', ANTIASPI_PATH);
     10
    811$my_base_url = PHPWG_ROOT_PATH.'admin.php?page=plugin-'; //get_admin_plugin_menu_link(__FILE__);
    912
     
    1114// | Check Access and exit when user status is not ok                      |
    1215// +-----------------------------------------------------------------------+
     16
    1317check_status(ACCESS_ADMINISTRATOR);
    1418
    1519//-------------------------------------------------------- sections definitions
     20
    1621if (!isset($_GET['tab']))
    17     $page['tab'] = 'ipban';
     22{
     23  $page['tab'] = 'ipban';
     24}
    1825else
    19     $page['tab'] = $_GET['tab'];
    20         $template->func_combine_css(array('id'=>'dst','path'=>ANTIASPI_PATH.'antiaspi.css'));
     26{
     27  $page['tab'] = $_GET['tab'];
     28}
    2129
     30$template->func_combine_css(array('id'=>'dst','path'=>ANTIASPI_PATH.'antiaspi.css'));
    2231
    23     $tabsheet = new tabsheet();
    24     $tabsheet->add('ipban', l10n('IP ban'), ANTIASPI_ADMIN . '-ipban');
    25         $tabsheet->add('ipconfig', l10n('Configuration '), ANTIASPI_ADMIN . '-ipconfig ');
    26     $tabsheet->select($page['tab']);
    27     $tabsheet->assign();
     32$tabsheet = new tabsheet();
     33$tabsheet->add('ipban', '<i class="icon-network"></i> '.l10n('IP addresses'), ANTIASPI_ADMIN . '-ipban');
     34$tabsheet->add('ipconfig', '<i class="icon-tools"></i> '.l10n('Configuration'), ANTIASPI_ADMIN . '-ipconfig ');
     35$tabsheet->select($page['tab']);
     36$tabsheet->assign();
    2837
    29 switch ($page['tab']) {
    30     case 'ipban':
    31           $template->assign(
    32        'ipbangest', array(
    33        'A' => 'a',
    34     ));
    35         $ipban = pwg_query("SELECT * FROM " . ANTIASPI_TABLE . ";");
    36     $antiaspi = safe_unserialize($conf['antiaspi']);
    37        
    38     $admin_base_url = ANTIASPI_ADMIN . '-ipban';
    39         if (pwg_db_num_rows($ipban)) {
    40             while ($ipban2 = pwg_db_fetch_assoc($ipban)) {
    41                                
    42                 $items = array(
    43                     'ID' => $ipban2['id'],
    44                     'IP' => $ipban2['ip'],
    45                     'DATE' => $ipban2['date'],
    46                     'U_DELETE' => $admin_base_url . '&amp;delete=' . $ipban2['id'],
    47                     'U_EDIT' => $admin_base_url . '&amp;edit=' . $ipban2['id'],
    48                 );
     38if ('ipban' == $page['tab'])
     39{
     40  $template->assign(
     41    'ipbangest',
     42    array(
     43      'A' => 'a',
     44    )
     45  );
    4946
    50                 $template->append('ipban2', $items);
    51             }
    52         }
    53                
    54   if (isset($_GET['delete'])) {
     47  $query = '
     48SELECT
     49    *,
     50    IF (date > SUBTIME(NOW(), "'.$conf['antiaspi']['banned during'].'"), "active", "deprecated") AS status
     51  FROM '.ANTIASPI_TABLE.'
     52  ORDER BY id DESC
     53;';
     54  $ipban = pwg_query($query);
    5555
     56  $antiaspi = safe_unserialize($conf['antiaspi']);
     57
     58  $admin_base_url = ANTIASPI_ADMIN . '-ipban';
     59  if (pwg_db_num_rows($ipban))
     60  {
     61    while ($ipban2 = pwg_db_fetch_assoc($ipban))
     62    {
     63      $items = array(
     64        'ID' => $ipban2['id'],
     65        'IP' => $ipban2['ip'],
     66        'DATE' => $ipban2['date'],
     67        'STATUS' => $ipban2['status'],
     68        'U_DELETE' => $admin_base_url . '&amp;delete=' . $ipban2['id'],
     69      );
     70
     71      $template->append('ipban2', $items);
     72    }
     73  }
     74   
     75  if (isset($_GET['delete']))
     76  {
    5677    check_input_parameter('delete', $_GET, false, PATTERN_ID);
     78
    5779    $query = 'DELETE FROM ' . ANTIASPI_TABLE . ' WHERE id = ' . $_GET['delete'] . ';';
    5880    pwg_query($query);
     
    6284  }
    6385 
    64   if (isset($_POST['submitdeleteall'])) {
    65         $query = 'DELETE FROM ' . ANTIASPI_TABLE . ';';
     86  if (isset($_POST['submitdeleteall']))
     87  {
     88    $query = 'DELETE FROM ' . ANTIASPI_TABLE . ';';
    6689    pwg_query($query);
    67         redirect($admin_base_url);
     90    redirect($admin_base_url);
    6891  }
    69   if (isset($_POST['submitdeletedeprecated'])) {
    70         $query = 'DELETE FROM ' . ANTIASPI_TABLE . ' WHERE date < ADDTIME(NOW(), "-' . $antiaspi['banned during'] . '");';
    71         pwg_query($query);
    72         redirect($admin_base_url);
     92
     93  if (isset($_POST['submitdeletedeprecated']))
     94  {
     95    $query = 'DELETE FROM ' . ANTIASPI_TABLE . ' WHERE date < ADDTIME(NOW(), "-' . $antiaspi['banned during'] . '");';
     96    pwg_query($query);
     97    redirect($admin_base_url);
    7398  }
    74         break;
    75         case 'ipconfig':
    76         antiaspi_check_old_conf();
    77   global $conf, $template;
    78   $admin_base_url = ANTIASPI_ADMIN . '-ipconfig';
    79   $antiaspi = safe_unserialize($conf['antiaspi']);     
    80 /*
    81 $conf['antiaspi'] = array(
    82   'diff' => '20 pages in 00:00:10' , // IP banned if 20 different pages viewed in 10 seconds
    83   'same' => '15 pages in 00:00:30' , // IP banned if same 15 pages viewed in 30 seconds
    84   'banned during' => '23:59:59' ,    // IP banned during hh:mm:ss
    85   'only guest' => true ,             // If true, don't ban registered users
    86   'only picture' => false ,          // If true, apply antiaspi only on picture page
    87   'allowed ip' => array()            // Autorized IP (robots for example)
    88 );
    89 */
    90 $diff = explode(" pages in ", $antiaspi['diff']);
    91 $tempsdiff= explode(":", $diff[1]);
    92 $tempsdiffsec=$tempsdiff[2]+($tempsdiff[1]*60)+($tempsdiff[0]*60*60);
    9399
    94 $same = explode(" pages in ", $antiaspi['same']);
    95 $tempssame= explode(":", $same[1]);
    96 $tempssamesec=$tempssame[2]+($tempssame[1]*60)+($tempssame[0]*60*60);
     100  $i = 0;
     101  while ($i < count($antiaspi['allowed ip']))
     102  {
     103    $items = array(
     104      'IP' => $antiaspi['allowed ip'][$i],
     105      'U_DELETE' => $admin_base_url . '&amp;deleteallowed='.$i ,
     106    );
    97107
    98 $onlyguest = array(
    99 l10n('Yes'),
    100 l10n('No'),
    101 );
    102 $onlyguestv = array(
    103 true,
    104 false,
    105 );
    106 $onlypicture = array(
    107 l10n('Yes'),
    108 l10n('No'),
    109 );
    110 $onlypicturev = array(
    111 true,
    112 false,
    113 );
    114   $template->assign(
    115    'ipconfiggest', array(
    116           'DIFFA' => $diff[0],
    117           'DIFFB' => $tempsdiffsec,
    118           'SAMEA' => $same[0],
    119           'SAMEB' => $tempssamesec,
    120           'ONLYGUEST' => $onlyguest,
    121           'ONLYGUESTV' => $onlyguestv,
    122           'ONLYGUESTSELECT' => $antiaspi['only guest'],
    123           'ONLYPICTURE' => $onlypicture,
    124           'ONLYPICTUREV' => $onlypicturev,
    125           'ONLYPICTURESELECT' => $antiaspi['only picture'],
    126   ));
    127   $i = 0;
    128   while ($i < count($antiaspi['allowed ip'])) {
     108    $template->append('allowip', $items);
     109    $i++;
     110  }
    129111
    130         $items = array(
    131                 'IP' => $antiaspi['allowed ip'][$i],
    132                 'U_DELETE' => $admin_base_url . '&amp;delete='.$i ,
    133         );
     112  if (isset($_POST['submitaddipallowed']))
     113  {
     114    $i = 0;
     115    while ($i < count($antiaspi['allowed ip']))
     116    {
     117      if ($_POST['insipallowed']==$antiaspi['allowed ip'][$i])
     118      {
     119        $_SESSION['page_errors'] = array(l10n('IP already allowed'));
     120        redirect($admin_base_url);
     121      }
     122      $i++;
     123    }
    134124
    135         $template->append('allowip', $items);
    136         $i++;
     125    $antiaspi['allowed ip'][] = $_POST['insipallowed'];
     126    conf_update_param('antiaspi', $antiaspi, true);
     127    redirect($admin_base_url);
    137128  }
    138  
    139  
    140         /*$time = '7000';
    141 echo date('h:i:s', $time);
    142 */
    143129
    144 if (isset($_POST['submitconfban'])) {
    145         /*$time = date('h:i:s', $_POST['insdiffb']);  revoir fonction date HS ?*/
    146         $antiaspi['diff']=$_POST['insdiffa'].' pages in '.date('00:i:s', ($_POST['insdiffb']));
    147         $antiaspi['same']=$_POST['inssamea'].' pages in '.date('00:i:s', ($_POST['inssameb']));
    148         $antiaspi['only guest']=$_POST['insonlyguest'];
    149         $antiaspi['only picture']=$_POST['insonlypicturet'];
    150        
    151         conf_update_param('antiaspi', $antiaspi);
    152         redirect($admin_base_url);
     130  if (isset($_GET['deleteallowed']))
     131  {
     132    check_input_parameter('deleteallowed', $_GET, false, PATTERN_ID);
     133
     134    unset($antiaspi['allowed ip'][ $_GET['deleteallowed'] ]);
     135
     136    $antiaspi['allowed ip'] = array_values($antiaspi['allowed ip']);
     137    conf_update_param('antiaspi', $antiaspi);
     138    redirect($admin_base_url);
     139  }
    153140}
    154141
    155 if (isset($_POST['submitaddipallowed'])) {
    156          $i = 0;
    157         while ($i < count($antiaspi['allowed ip'])) {
    158                 if($_POST['insipallowed']==$antiaspi['allowed ip'][$i])
    159                 {
    160                         $_SESSION['page_errors'] = array(l10n('IP already allowed'));
    161                         redirect($admin_base_url);
    162                 }
    163                 $i++;
    164         };
     142if ('ipconfig' == $page['tab'])
     143{
     144  antiaspi_check_old_conf();
    165145
    166         $antiaspi['allowed ip'][]=$_POST['insipallowed'];
    167         conf_update_param('antiaspi', $antiaspi);
    168         redirect($admin_base_url);
     146  $admin_base_url = ANTIASPI_ADMIN . '-ipconfig';
     147  $antiaspi = safe_unserialize($conf['antiaspi']); 
     148
     149  $diff = explode(" pages in ", $antiaspi['diff']);
     150  $tempsdiff= explode(":", $diff[1]);
     151  $tempsdiffsec=$tempsdiff[2]+($tempsdiff[1]*60)+($tempsdiff[0]*60*60);
     152
     153  $same = explode(" pages in ", $antiaspi['same']);
     154  $tempssame= explode(":", $same[1]);
     155  $tempssamesec=$tempssame[2]+($tempssame[1]*60)+($tempssame[0]*60*60);
     156
     157  $onlyguest = array(l10n('Yes'), l10n('No'));
     158  $onlyguestv = array(true, false);
     159  $onlypicture = array(l10n('Yes'), l10n('No'));
     160  $onlypicturev = array(true,false);
     161
     162  $template->assign(
     163    'ipconfiggest',
     164    array(
     165      'DIFFA' => $diff[0],
     166      'DIFFB' => $tempsdiffsec,
     167      'SAMEA' => $same[0],
     168      'SAMEB' => $tempssamesec,
     169      'ONLYGUEST' => $onlyguest,
     170      'ONLYGUESTV' => $onlyguestv,
     171      'ONLYGUESTSELECT' => $antiaspi['only guest'],
     172      'ONLYPICTURE' => $onlypicture,
     173      'ONLYPICTUREV' => $onlypicturev,
     174      'ONLYPICTURESELECT' => $antiaspi['only picture'],
     175    )
     176  );
     177
     178  if (isset($_POST['submitconfban']))
     179  {
     180    /*$time = date('h:i:s', $_POST['insdiffb']);  revoir fonction date HS ?*/
     181    $antiaspi['diff'] = $_POST['insdiffa'].' pages in '.date('00:i:s', ($_POST['insdiffb']));
     182    $antiaspi['same'] = $_POST['inssamea'].' pages in '.date('00:i:s', ($_POST['inssameb']));
     183    $antiaspi['only guest'] = $_POST['insonlyguest'];
     184    $antiaspi['only picture'] = $_POST['insonlypicturet'];
     185
     186    conf_update_param('antiaspi', $antiaspi);
     187    redirect($admin_base_url);
     188  }
    169189}
    170 
    171   if (isset($_GET['delete'])) {
    172     check_input_parameter('delete', $_GET, false, PATTERN_ID);
    173         unset($antiaspi['allowed ip'][($_GET['delete'])]);
    174         $antiaspi['allowed ip'] = array_values($antiaspi['allowed ip']);
    175     conf_update_param('antiaspi', $antiaspi);
    176         redirect($admin_base_url);
    177   }
    178 
    179 
    180         break;
    181 }
    182        
     190 
    183191
    184192$template->set_filenames(array('plugin_admin_content' => dirname(__FILE__) . '/admin.tpl'));
  • extensions/AntiAspi/admin.tpl

    r31372 r31953  
    2323        input.hide();
    2424    });
     25
     26    jQuery('.add-ip-allowed-form-toggle').click(function(e) {
     27        jQuery('.add-ip-allowed-form').toggle();
     28        e.preventDefault();
     29    })
    2530});
    2631
     
    4045
    4146        <fieldset>
    42           <legend>{'Action IP banned'|@translate}</legend>
     47          <legend>{'Banned IP addresses'|@translate}</legend>
    4348                <form method="post" >
    44                         <div style="text-align:center;">
    45                                 <input class="submit" name="submitdeleteall" type="submit" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');" value="{'Delete all IP Ban'|@translate}"/>
    46                                 <input class="submit" name="submitdeletedeprecated" type="submit" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');" value="{'Delete deprecated IP Ban'|@translate}"/>
     49                        <div style="text-align:center;margin-bottom: 30px;">
     50
     51                                <button name="submitdeleteall" type="submit" class="buttonLike" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">
     52                    <i class="icon-trash"></i> {'Delete all'|@translate}
     53                </button>
     54
     55                                <button name="submitdeletedeprecated" type="submit" class="buttonLike" onclick="return confirm('{'Are you sure?'|@translate|@escape:'javascript'}');">
     56                    <i class="icon-trash"></i> {'Delete deprecated only'|@translate}
     57                </button>
     58
    4759                        </div>
    4860                </form>
    49         </fieldset>
    50 <form method="post" >
    51         <fieldset>
    52           <legend>{'List IP banned'|@translate}</legend>
     61         
    5362           <table class="lban">
    5463                {foreach from=$ipban2 item=ipban}
     
    5665                        <td><!-- {$ipban.ID} --> {$ipban.IP}</td>
    5766                        <td>{$ipban.DATE}</td>
     67                        <td><span class="badge badge-{$ipban.STATUS}">{$ipban.STATUS}</span></td>
    5868                        <td>
    5969                        <a href="{$ipban.U_DELETE}" onclick="return confirm( document.getElementById('btn_delete').title + '\n\n' + '{'Are you sure?'|@translate|@escape:'javascript'}');">
    60                                 <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/delete.png" id="btn_delete" alt="{'delete'|@translate}" title="{'Delete'|@translate}" />
     70                <i class="icon-trash" id="btn_delete" title="{'Delete'|@translate}"></i>
    6171                        </a>
    6272                        </td>
     
    6575         </table>
    6676        </fieldset>
    67 </form>
     77
     78         <fieldset class="antiaspi-whitelist">
     79      <legend>{'Whitelist (allowed ip addresses)'|translate}</legend>
     80        <form method="post">
     81                        <a href="#" class="icon-plus-circled add-ip-allowed-form-toggle">{'Add allowed IP'|@translate}</a>
     82                        <span class="add-ip-allowed-form">
     83                        {'IP'|@translate} <input " type="text" name="insipallowed" data-ip placeholder="123.123.123.123" value="" size="50" maxlenght="50" required pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$">
     84                        <input class="submit" name="submitaddipallowed" type="submit" value="{'Add IP'|@translate}" />
     85                        </span>
     86        </form>
     87                <table class="lban">
     88                        {foreach from=$allowip item=allowip2}
     89                          <tr>
     90                                <td>{$allowip2.IP}</td>
     91                                <td>
     92                                <a href="{$allowip2.U_DELETE}" onclick="return confirm( document.getElementById('btn_delete').title + '\n\n' + '{'Are you sure?'|@translate|@escape:'javascript'}');">
     93                                        <i class="icon-trash" id="btn_delete" title="{'Delete'|@translate}"></i>
     94                                </a>
     95                                </td>
     96                          </tr>
     97                        {/foreach}
     98                 </table>
     99         </fieldset>
    68100{/if}
     101
    69102{if isset ($ipconfiggest)}
    70103<form method="post">
    71104 <fieldset>
    72105  <legend>{'Configuration'|translate}</legend>
    73          <fieldset>
    74106                <p class="input" style="width: 700px;">
    75107                  <label for="insdiffa"><strong>{'IP banned if '|@translate}<span></span></strong></label>
     
    80112                        <input type="text" name="insdiffb" data-min="5" data-max="3599" class="range" value="{$ipconfiggest.DIFFB}"/>
    81113                </p>
    82         </fieldset>
    83         <fieldset>
    84                 <p class="input" style="width: 700px;">
     114
     115                <p class="input" style="width: 700px;margin-top: 50px;">
    85116                  <label for="inssamea"><strong>{'IP banned if same '|@translate}<span></span></strong></label>
    86117                  <input type="text" name="inssamea" data-min="10" data-max="500" class="range" value="{$ipconfiggest.SAMEA}"/> 
    87118                </p>   
    88                 <p class="input" style="width: 700px;">
     119                <p class="input" style="width: 700px;margin-bottom: 50px;">
    89120                        <label for="inssameb"><strong>{' different pages viewed in <span></span> seconds'|@translate} </strong></label>
    90121                        <input type="text" name="inssameb" data-min="5" data-max="3599" class="range" value="{$ipconfiggest.SAMEB}"/>
    91122                </p>
    92         </fieldset>
     123
    93124        <p>
    94125        <strong>{'only guest'|@translate}</strong>
     
    101132                ({'If yes, apply antiaspi only on picture page'|@translate})
    102133    </p>
    103          <fieldset>
    104       <legend>{'allowed ip'|translate}</legend>
    105                 <table class="lban">
    106                         {foreach from=$allowip item=allowip2}
    107                           <tr>
    108                                 <td>{$allowip2.IP}</td>
    109                                 <td>
    110                                 <a href="{$allowip2.U_DELETE}" onclick="return confirm( document.getElementById('btn_delete').title + '\n\n' + '{'Are you sure?'|@translate|@escape:'javascript'}');">
    111                                         <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/delete.png" id="btn_delete" alt="{'delete'|@translate}" title="{'Delete'|@translate}" />
    112                                 </a>
    113                                 </td>
    114                           </tr>
    115                         {/foreach}
    116                  </table>
    117          </fieldset>
    118     <p>
    119         <input class="submit" type="submit" name="submitconfban" value="{'Submit'|@translate}">
     134    <p style="margin-top: 50px">
     135        <button name="submitconfban" type="submit" class="buttonLike">
     136            <i class="icon-floppy"></i> {'Save Settings'|@translate}
     137        </button>
    120138    </p>
    121139 </fieldset>
    122140</form>
    123   {if isset ($ipconfiggest)}
    124         <form method="post">
    125                 <fieldset>
    126                         <legend>{'Add IP allowed'|@translate}</legend>
    127                         {'IP'|@translate} <input " type="text" name="insipallowed" data-ip placeholder="123.123.123.123" value="" size="50" maxlenght="50" required pattern="^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$">
    128                         <br>
    129                         <br>
    130                                 <div style="text-align:center;">
    131                                 <input class="submit" name="submitaddipallowed" type="submit" value="{'Submit'|@translate}" />
    132                                 </div>
    133                 </fieldset>
    134         </form>
    135141{/if}
    136 {/if}
  • extensions/AntiAspi/antiaspi.css

    r31370 r31953  
    1616table.lban td{
    1717  padding-right:20px;
     18  padding-bottom: 5px;
    1819}
    1920
     
    2122  background-color:green;
    2223}
     24
     25.add-ip-allowed-form {
     26        display:none;
     27}
     28
     29span.badge {
     30        padding:2px 5px;
     31        border-radius:5px;
     32}
     33span.badge.badge-deprecated {
     34    background-color:#ddd;
     35    color:#999;
     36}
     37span.badge.badge-active {
     38    background-color:#caebff;
     39    color:#0080c6;
     40}
     41
     42.antiaspi-whitelist form {
     43        margin-bottom: 20px;
     44}
Note: See TracChangeset for help on using the changeset viewer.