Permettre un accès par IP ou plages d’IPs à des auteurs SPIP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
1.6 KiB

  1. <?php
  2. /**
  3. * Gestion du nettoyage des access IP
  4. * @plugin IPs pour les auteurs
  5. * @copyright 2020
  6. * @author marcimat
  7. * @licence GNU/GPL
  8. * @package SPIP\Ipset\Genie
  9. **/
  10. if (!defined("_ECRIRE_INC_VERSION")) {
  11. return;
  12. }
  13. /**
  14. * Cron de nettoyage des accès IP
  15. *
  16. * @param int $t
  17. * Timestamp de la dernière exécution de cette tâche
  18. * @return int
  19. * Positif si la tâche a été terminée, négatif pour réexécuter cette tâche
  20. **/
  21. function genie_ipset_accessip_dist($t) {
  22. $ips = accessip_lister_vieux_access(_DIR_TMP . 'accessip', 7 * 24 * 3600);
  23. if ($ips) {
  24. spip_log('Nettoyage de ' . count($ips) . ' acces par IPs : ' . implode(', ', $ips), 'ipset');
  25. include_spip('inc/ipset');
  26. foreach ($ips as $ip) {
  27. $accessip = new AccessIP($ip);
  28. $accessip->remove();
  29. }
  30. }
  31. return 1;
  32. }
  33. /**
  34. * Nettoyer un répertoire suivant l'age de ses fichiers
  35. *
  36. * @param string $repertoire
  37. * Répertoire à nettoyer
  38. * @param int $age_max
  39. * Age maximum des fichiers en seconde. Par défaut 24*3600
  40. * @return array Liste des IPs trop vieilles
  41. **/
  42. function accessip_lister_vieux_access($repertoire, $age_max = 86400) {
  43. $repertoire = rtrim($repertoire, '/');
  44. if (!is_dir($repertoire)) {
  45. return [];
  46. }
  47. $fichiers = scandir($repertoire);
  48. if ($fichiers === false) {
  49. return [];
  50. }
  51. $fichiers = array_diff($fichiers, ['..', '.', '.ok']);
  52. if (!$fichiers) {
  53. return [];
  54. }
  55. $ips = [];
  56. foreach ($fichiers as $fichier) {
  57. $chemin = $repertoire . DIRECTORY_SEPARATOR . $fichier;
  58. if (is_file($chemin) and !jeune_fichier($chemin, $age_max)) {
  59. $ips[] = $fichier;
  60. }
  61. }
  62. return $ips;
  63. }