From 681c4c467a2475c7b51588e5750213d819a4171a Mon Sep 17 00:00:00 2001
From: Bastien Le Querrec <blq@laquadrature.net>
Date: Fri, 21 Jun 2024 16:36:44 +0200
Subject: [PATCH] Attrap: ajoute un safe mode

---
 Attrap.py | 16 +++++++++++++---
 README.md |  2 ++
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/Attrap.py b/Attrap.py
index 478eeec..8193924 100644
--- a/Attrap.py
+++ b/Attrap.py
@@ -158,6 +158,7 @@ class Attrap:
         self.mastodon = None
         self.mastodon_prefix = ''
         self.mastodon_suffix = ''
+        self.safe_mode = False
 
         self.update_user_agent(user_agent)
 
@@ -167,6 +168,12 @@ class Attrap:
 
         self.print_output(str(self.__class__.__name__))
 
+        # Si le safe mode est activé, on configure un long délai entre chaque requête
+        if os.getenv('SAFE_MODE'):
+            self.safe_mode = True
+            logger.warning('ATTENTION: le safe mode est activé, configuration d\'un délai entre chaque requête')
+            self.sleep_time = 30
+
     def configure_mastodon(self, access_token, instance, mastodon_prefix, mastodon_suffix):
         """Configuration de Mastodon afin de publier un toot à chaque RAA détecté."""
         if access_token and access_token != "" and instance and instance != "":
@@ -189,9 +196,12 @@ class Attrap:
 
     def enable_tor(self, max_requests=0):
         """Active l'utilisation de Tor pour effectuer les requêtes."""
-        self.tor_enabled = True
-        self.tor_max_requests = max_requests
-        self.tor_get_new_id()
+        if not self.safe_mode:
+            self.tor_enabled = True
+            self.tor_max_requests = max_requests
+            self.tor_get_new_id()
+        else:
+            logger.warning('ATTENTION: le safe mode est activé, Tor n\'a pas été activé')
 
     def disable_tor(self):
         """Désactive l'utilisation de Tor."""
diff --git a/README.md b/README.md
index 3c4337b..9048250 100644
--- a/README.md
+++ b/README.md
@@ -52,6 +52,8 @@ Les options suivantes peuvent être précisées, par un paramètre si l'utilitai
 | `-v` | `VERBOSE` | Si spécifié, relève le niveau de verbosité à INFO. | Non-spécifié |
 | `-vv` | `VVERBOSE` | Si spécifié, relève le niveau de verbosité à DEBUG. | Non-spécifié |
 
+Vous pouvez également activer le safe mode en spécifiant la variable d'environnement `SAFE_MODE`. Cela désactive Tor et limite les requêtes à une toutes les 30 secondes. Cette option ne doit être utilisée qu'en cas de blocage généralisé de Tor. Attention : avec le safe mode, la CI se connecte directement au serveur, et son IP risque d'être bloquée si trop de requêtes sont lancées. Pensez donc à limiter le nombre de jobs qui s'exécutent en parallèle si vous devez activer ce mode. Les requêtes via Selenium ne sont pas impactées par le safe mode.
+
 ## Administrations supportées
 
 - Préfecture de police de Paris (identifiant : `ppparis`)
-- 
GitLab