source: spip-zone/_plugins_/acces_restreint_ip/trunk/accesrestreintip_options.php @ 119760

Last change on this file since 119760 was 119760, checked in by rastapopoulos@…, 2 years ago

Amélioration : on peut désormais passer des lignes (pas juste séparation virgule donc), et on peut avoir des lignes de commentaire, quand ça commence par #, c'est alors ignoré, tout comme les lignes vides. Cela permet donc de ranger à peu de frais les IP dans le champ, quand on commence à en avoir très beaucoup pour une même zone restreinte.

File size: 2.2 KB
Line 
1<?php
2if (!defined('_ECRIRE_INC_VERSION')) return;
3
4if (isset($GLOBALS['meta']["accesrestreint_base_version"])){
5        // Si on n'est pas connecte, on ne passe pas par le pipeline
6        // alors on ajoute directement les zones par IP
7        if (!isset($GLOBALS['visiteur_session']['id_auteur'])) {
8                $GLOBALS['accesrestreint_zones_autorisees'] .= accesrestreintip_lister_zones_par_ip();
9               
10                // Puisqu'on passe après Accès Restreint, obligé d'ajouter nous-même le marqueur
11                if (!isset($GLOBALS['marqueur'])) {
12                        $GLOBALS['marqueur'] = '';
13                }
14                $GLOBALS['marqueur'] .=
15                        ':accesrestreintip_zones_autorisees='
16                        .$GLOBALS['accesrestreint_zones_autorisees'];
17        }
18}
19
20function accesrestreintip_lister_zones_par_ip($ip=null) {
21        include_spip('base/abstract_sql');
22        $zones_autorisees = array();
23       
24        // Récupération IP du client si pas en argument
25        if (is_null($ip) and isset($_SERVER['REMOTE_ADDR'])) {
26                $ip = $_SERVER['REMOTE_ADDR'];
27        }
28        $long_ip = ip2long($ip);
29       
30        if ($zones = sql_allfetsel('id_zone, ips', 'spip_zones', 'ips != ""') and is_array($zones)) {
31                foreach ($zones as $zone) {
32                        // On découpe par lignes
33                        $lignes = explode("\n", $zone['ips']);
34                        foreach ($lignes as $ligne) {
35                                // On supprime les commentaires
36                                $ligne = trim(preg_replace('|^#(.*)$|', '', $ligne));
37                                // S'il reste quelque chose
38                                if ($ligne) {
39                                        // Maintenant on découpe par virgules
40                                        $ranges = explode(',', $ligne);
41                                        foreach ($ranges as $range) {
42                                                $range = trim($range);
43                                                // Range d'IP contenant - comme séparateur
44                                                if (preg_match ("/-/",$range))  {
45                                                        $ranges_2 = explode ('-', $range) ;
46                                                        $low_long_ip = ip2long($ranges_2[0]);
47                                                        $high_long_ip = ip2long($ranges_2[1]);
48                                                        if ($long_ip <= $high_long_ip and $low_long_ip <= $long_ip) {
49                                                                $zones_autorisees[] = $zone['id_zone'];
50                                                                break; // on a trouvé une IP bonne pour cette zone, on ne continue pas plus loin
51                                                        }
52                                                } // IP individuelle
53                                                else {
54                                                        if ($long_ip == ip2long($range)) {
55                                                                $zones_autorisees[] = $zone['id_zone'];
56                                                                break; // on a trouvé une IP bonne pour cette zone, on ne continue pas plus loin
57                                                        }
58                                                }
59                                        }
60                                }
61                        }
62                }
63        }
64       
65        return join(',', $zones_autorisees);
66}
Note: See TracBrowser for help on using the repository browser.