Accès restreint par IP. Ajoute un champ pour définir des IP ou des plages d'IP dans la table des zones (et son formulaire). Alors dans ce cas, même sans compte utilisateur, on est autorisé à voir les choses restreintes.
commit
61cb2c8cf8
@ -0,0 +1,9 @@
|
||||
* text=auto !eol
|
||||
/accesrestreintip.png -text
|
||||
/accesrestreintip_administrations.php -text
|
||||
/accesrestreintip_options.php -text
|
||||
/accesrestreintip_pipelines.php -text
|
||||
formulaires/inc-editer_zone-ips.html -text
|
||||
lang/paquet-accesrestreintip_fr.php -text
|
||||
lang/zone_fr.php -text
|
||||
/paquet.xml -text
|
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/**
|
||||
* Fonction d'installation du plugin et de mise à jour.
|
||||
**/
|
||||
function accesrestreintip_upgrade($nom_meta_base_version, $version_cible) {
|
||||
$maj = array();
|
||||
|
||||
$maj['create'] = array(
|
||||
array('sql_alter','TABLE spip_zones ADD ips text DEFAULT "" NOT NULL')
|
||||
);
|
||||
|
||||
include_spip('base/upgrade');
|
||||
maj_plugin($nom_meta_base_version, $version_cible, $maj);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fonction de désinstallation du plugin.
|
||||
**/
|
||||
function accesrestreintip_vider_tables($nom_meta_base_version) {
|
||||
sql_alter('TABLE spip_zones DROP ips');
|
||||
effacer_meta($nom_meta_base_version);
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
<?php
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
if (isset($GLOBALS['meta']["accesrestreint_base_version"])){
|
||||
// Si on n'est pas connecte, on ne passe pas par le pipeline
|
||||
// alors on ajoute directement les zones par IP
|
||||
if (!isset($GLOBALS['visiteur_session']['id_auteur'])) {
|
||||
$GLOBALS['accesrestreint_zones_autorisees'] .= accesrestreintip_lister_zones_par_ip();
|
||||
|
||||
// Puisqu'on passe après Accès Restreint, obligé d'ajouter nous-même le marqueur
|
||||
if (!isset($GLOBALS['marqueur'])) {
|
||||
$GLOBALS['marqueur'] = '';
|
||||
}
|
||||
$GLOBALS['marqueur'] .=
|
||||
':accesrestreintip_zones_autorisees='
|
||||
.$GLOBALS['accesrestreint_zones_autorisees'];
|
||||
}
|
||||
}
|
||||
|
||||
function accesrestreintip_lister_zones_par_ip($ip=null) {
|
||||
include_spip('base/abstract_sql');
|
||||
$zones_autorisees = array();
|
||||
|
||||
// Récupération IP du client si pas en argument
|
||||
if (is_null($ip) and isset($_SERVER['REMOTE_ADDR'])) {
|
||||
$ip = $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
$long_ip = ip2long($ip);
|
||||
|
||||
if ($zones = sql_allfetsel('id_zone, ips', 'spip_zones', 'ips != ""') and is_array($zones)) {
|
||||
foreach ($zones as $zone) {
|
||||
$ranges = explode(',', $zone['ips']);
|
||||
foreach ($ranges as $range) {
|
||||
// Range d'IP contenant - comme séparateur
|
||||
if (preg_match ("/-/",$range)) {
|
||||
$ranges_2 = explode ('-', $range) ;
|
||||
$low_long_ip = ip2long($ranges_2[0]);
|
||||
$high_long_ip = ip2long($ranges_2[1]);
|
||||
if ($long_ip <= $high_long_ip and $low_long_ip <= $long_ip) {
|
||||
$zones_autorisees[] = $zone['id_zone'];
|
||||
break; // on a trouvé une IP bonne on ne continue pas plus loin
|
||||
}
|
||||
} // IP individuelle
|
||||
else {
|
||||
if ($long_ip == ip2long($range)) {
|
||||
$zones_autorisees[] = $zone['id_zone'];
|
||||
break; // on a trouvé une IP bonne on ne continue pas plus loin
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return join(',', $zones_autorisees);
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
// Sécurité
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/**
|
||||
* Declaration du champs pour stocker les IP
|
||||
*
|
||||
* @pipeline declarer_tables_objets_sql
|
||||
* @param array $tables Liste des objets et leur description
|
||||
* @return array
|
||||
*/
|
||||
function accesrestreintip_declarer_tables_objets_sql($tables){
|
||||
// déclaration du champ
|
||||
$tables['spip_zones']['field']['ips'] = 'text DEFAULT "" NOT NULL';
|
||||
// éditable etc
|
||||
$tables['spip_zones']['champs_editables'][] = 'ips';
|
||||
|
||||
return $tables;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajouter le champ des IP dans l'édition d'une zone
|
||||
*
|
||||
* @pipeline editer_contenu_objet
|
||||
* @param array $flux Données du pipeline
|
||||
* @return array Données du pipeline
|
||||
**/
|
||||
function accesrestreintip_editer_contenu_objet($flux){
|
||||
if ($flux['args']['type'] == 'zone') {
|
||||
$champ_ips = recuperer_fond('formulaires/inc-editer_zone-ips', $flux['args']['contexte']);
|
||||
$flux['data'] = preg_replace('|(<li[^>]*editer_descriptif[^>]*>.*?</li>)|is', "$1\n$champ_ips", $flux['data']);
|
||||
}
|
||||
|
||||
return $flux;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifier le champ des IP d'une zone
|
||||
*
|
||||
* @pipeline formulaire_verifier
|
||||
* @param array $flux Données du pipeline
|
||||
* @return array Données du pipeline
|
||||
**/
|
||||
function accesrestreintip_formulaire_verifier($flux){
|
||||
if ($flux['args']['form'] == 'editer_zone') {
|
||||
}
|
||||
|
||||
return $flux;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajoute les zones quand on détecte les bonnes IP
|
||||
*
|
||||
* @pipeline accesrestreint_liste_zones_autorisees
|
||||
* @param array $flux Données du pipeline
|
||||
* @return array Données du pipeline
|
||||
**/
|
||||
function accesrestreintip_accesrestreint_liste_zones_autorisees($flux){
|
||||
// On s'assure d'avoir la fonction
|
||||
if (!function_exists('accesrestreintip_lister_zones_par_ip')) {
|
||||
include_spip('accesrestreintip_options');
|
||||
}
|
||||
|
||||
// On récupère les zones par IP
|
||||
$zones_par_ip = array_filter(explode(',', accesrestreintip_lister_zones_par_ip()));
|
||||
|
||||
// On ajoute les éventuelles zones par rapport à l'IP du visiteur
|
||||
$flux = explode(',', $flux);
|
||||
$flux = array_merge($flux, $zones_par_ip);
|
||||
$flux = array_unique($flux);
|
||||
$flux = join(',', $flux);
|
||||
return $flux;
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
<li class="pleine_largeur editer editer_ips[ (#ENV**{erreurs/ips}|oui)erreur]">
|
||||
<label for="ips"><:zone:champ_ips_label:></label>
|
||||
<p class="explication"><:zone:champ_ips_explication:></p>[
|
||||
<span class='erreur_message'>(#ENV**{erreurs/ips})</span>
|
||||
]<textarea name="ips" rows="5" id="ips">[(#ENV{ips})]</textarea>
|
||||
</li>
|
@ -0,0 +1,22 @@
|
||||
<paquet
|
||||
prefix="accesrestreintip"
|
||||
categorie="auteur"
|
||||
version="1.0.0"
|
||||
schema="1.0.0"
|
||||
etat="dev"
|
||||
compatibilite="[3.0.0;3.1.*]"
|
||||
logo="accesrestreintip.png"
|
||||
documentation=""
|
||||
>
|
||||
<nom>Accès restreint par IP</nom>
|
||||
|
||||
<auteur lien="http://www.ldd.fr">Les Développements Durables</auteur>
|
||||
<licence>GNU/GPL v3</licence>
|
||||
|
||||
<pipeline nom="declarer_tables_objets_sql" inclure="accesrestreintip_pipelines.php" />
|
||||
<pipeline nom="editer_contenu_objet" inclure="accesrestreintip_pipelines.php" />
|
||||
<pipeline nom="formulaire_verifier" inclure="accesrestreintip_pipelines.php" />
|
||||
<pipeline nom="accesrestreint_liste_zones_autorisees" inclure="accesrestreintip_pipelines.php" />
|
||||
|
||||
<necessite nom="accesrestreint" compatibilite="[3.12.4;]" />
|
||||
</paquet>
|
Loading…
Reference in New Issue