Browse Source

nécessite IPSet, juste par curiosité

master
chankalan 3 months ago
parent
commit
d6de4a0396
  1. 37
      base/connexionparip.php
  2. 47
      connexionparip_administrations.php
  3. 57
      connexionparip_options.php
  4. 8
      paquet.xml
  5. 7
      readme.md

37
base/connexionparip.php

@ -1,37 +0,0 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
// un champ extra sur les auteurs
function connexionparip_declarer_champs_extras($champs = array()) {
// Table : spip_auteurs
if (isset($champs['spip_auteurs']) and !is_array($champs['spip_auteurs'])) {
$champs['spip_auteurs'] = array();
}
$champs['spip_auteurs']['ips'] = array(
'saisie' => 'textarea',
'options' => array(
'nom' => 'ips',
'label' => 'IP de connexion automatique',
'type' => 'text',
'rows' => '5',
'cols' => '40',
'autocomplete' => 'defaut',
'sql' => 'text DEFAULT \'\' NOT NULL',
'explication' => 'IPs ou plage d’IPs séparées par une virgule : 127.0.0.1,192.168.1.0-192.168.1.10',
),
'verifier' => array(
// ce sera peut-être utile de faire une vérification
// 'type' => 'regex',
// 'options' => array(
// 'modele' => '',
// ),
),
);
return $champs;
}

47
connexionparip_administrations.php

@ -1,47 +0,0 @@
<?php
/**
* Fichier gérant l'installation et désinstallation du plugin connexionparip
*
* @plugin connexionparip
* @copyright 2021
* @author chankalan
* @licence GNU/GPL
* @package SPIP\Connexionparip\Installation
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('inc/cextras');
include_spip('base/connexionparip');
/**
* Fonction d'installation du plugin connexionparip
* @param string $nom_meta_base_version
* @param string $version_cible
* @return void
**/
function connexionparip_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
cextras_api_upgrade(connexionparip_declarer_champs_extras(), $maj['0.1.0']);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
/**
* Fonction de désinstallation du plugin connexionparip
* @param string $nom_meta_base_version
* @return void
**/
function connexionparip_vider_tables($nom_meta_base_version) {
cextras_api_vider_tables(connexionparip_declarer_champs_extras());
effacer_meta($nom_meta_base_version);
}

57
connexionparip_options.php

@ -20,56 +20,17 @@ function connexionparip_affichage_final($page){
// sans session existante on va identifier l'auteur suivant son IP et le loger
if (!isset($_COOKIE['spip_session'])) {
// rassembler dans un tableau toutes les ips enregistrées dans le nouveau champ spip_auteurs > ips
// mais en gardant id_auteur associée à chaque ip
$ips = array();
if ($res = sql_select('id_auteur,ips', 'spip_auteurs')) {
while ($r = sql_fetch($res)) {
if (isset($r['ips']) and $r['ips'] != '') {
array_push($ips,array($r['id_auteur'],$r['ips']));
}
}
}
if (isset($_SERVER['REMOTE_ADDR'])) {
$ip_user = $_SERVER['REMOTE_ADDR'];
$long_ipuser = ip2long($ip_user);
if (count($ips) > 0) {
foreach ($ips as $ip) {
// comparer avec l'IP du visiteur
// si IP du visiteur existe dans le tableau
$id_auteur = $ip[0];
// le champ ips peut contenir plusieurs ip séparées par une virgule
// et/ou des plages d'IPs séparées par une virgule (xx.xx.xx.xx,xx.xx.xx.00-xx.xx.xx.50)
$ipsauteur = explode(',',$ip[1]);
foreach ($ipsauteur as $ipauteur) {
if (preg_match('/-/', $ipauteur)) {
$plage = explode('-', $ipauteur);
$low_ipauteur = ip2long($plage[0]);
$high_ipauteur = ip2long($plage[1]);
if ($long_ipuser <= $high_ipauteur && $low_ipauteur <= $long_ipuser) {
$auteur = sql_fetsel("*","spip_auteurs","id_auteur=$id_auteur");
// loger
include_spip('inc/auth');
auth_loger($auteur);
break;
}
} else {
$long_ip = ip2long($ipauteur);
if ($long_ipuser != '' && $long_ipuser == $long_ip) {
$auteur = sql_fetsel("*","spip_auteurs","id_auteur=$id_auteur");
// alors on connecte
include_spip('inc/auth');
auth_loger($auteur);
break;
}
}
}
}
}
$ip = $GLOBALS['ip'];
$ipset = ipset_get();
if ($ipset->match($ip)) {
// On connait cette IP
$id_auteur = ipset_access_author($ip);
$auteur = sql_fetsel("*","spip_auteurs","id_auteur=$id_auteur");
// alors on connecte
include_spip('inc/auth');
auth_loger($auteur);
}
}
return $page;
}

8
paquet.xml

@ -1,8 +1,7 @@
<paquet
prefix="connexionparip"
categorie="auteur"
version="0.1.0"
schema="0.1.0"
version="1.0.0"
etat="dev"
compatibilite="[4.0.0;4.1.*]"
logo="connexionparip.png"
@ -13,9 +12,8 @@
<auteur>chankalan</auteur>
<licence>GPL v3</licence>
<necessite nom="cextras" />
<necessite nom="ipset" />
<pipeline nom="declarer_champs_extras" inclure="base/connexionparip.php"/>
<pipeline nom="affichage_final" inclure="base/connexionparip.php"/>
<pipeline nom="affichage_final" />
</paquet>

7
readme.md

@ -1,8 +1,5 @@
Connexion par IP
Nécessite Champs Extras (cextras)
Nécessite IPSet
Ajoute un champ "ips" dans la table spip_auteurs pour y enregistrer les IPs et/ou plages d'IPs sous la forme
1.1.1.1,1.1.1.5,1.1.1.100-1.1.1.200
Connecte automatiquement le compte qui utilise une ou des adresses IPs enregistrées dans ce champ.
Connecte automatiquement le compte qui utilise une ou des adresses IPs associées à un auteur.
Loading…
Cancel
Save