From c34dab7b9a2b36870c750b167c8a578e9e24965c Mon Sep 17 00:00:00 2001 From: Iain Learmonth Date: Mon, 27 Feb 2023 12:29:21 +0000 Subject: [PATCH] feat(block): adds bridge_block_scriptzteam module --- app/cli/automate.py | 4 ++++ app/terraform/block/block_scriptzteam.py | 20 ++++++++++++++++++++ app/terraform/block/bridge_bridgelines.py | 22 ++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 app/terraform/block/block_scriptzteam.py create mode 100644 app/terraform/block/bridge_bridgelines.py diff --git a/app/cli/automate.py b/app/cli/automate.py index 62c9756..ef4a04c 100644 --- a/app/cli/automate.py +++ b/app/cli/automate.py @@ -16,6 +16,7 @@ from app.terraform.block.bridge_dnsc import BlockBridgeDnscAutomation from app.terraform.block.bridge_github import BlockBridgeGitHubAutomation from app.terraform.block.bridge_gitlab import BlockBridgeGitlabAutomation from app.terraform.block.bridge_roskomsvoboda import BlockBridgeRoskomsvobodaAutomation +from app.terraform.block.block_scriptzteam import BlockBridgeScriptzteamAutomation from app.terraform.block_external import BlockExternalAutomation from app.terraform.block_ooni import BlockOONIAutomation from app.terraform.block_roskomsvoboda import BlockRoskomsvobodaAutomation @@ -47,6 +48,7 @@ jobs = { BlockBridgeGitHubAutomation, BlockBridgeGitlabAutomation, BlockBridgeRoskomsvobodaAutomation, + BlockBridgeScriptzteamAutomation, BlockExternalAutomation, BlockOONIAutomation, BlockRoskomsvobodaAutomation, @@ -132,6 +134,8 @@ def run_job(job_cls: Type[BaseAutomation], *, # to be logged for investigation. Catching more specific exceptions would just mean that # others go unrecorded and are difficult to debug. except Exception as exc: # pylint: disable=broad-except + if logging.getLogger().level == logging.DEBUG: + raise exc trace = TracebackException.from_exception(exc) success = False logs = "\n".join(trace.format()) diff --git a/app/terraform/block/block_scriptzteam.py b/app/terraform/block/block_scriptzteam.py new file mode 100644 index 0000000..86fb874 --- /dev/null +++ b/app/terraform/block/block_scriptzteam.py @@ -0,0 +1,20 @@ +import requests + +from app.terraform.block.bridge_bridgelines import BlockBridgelinesAutomation + + +class BlockBridgeScriptzteamAutomation(BlockBridgelinesAutomation): + """ + Automation task to rotate bridges discovered by scriptzteam. + """ + + short_name = "block_bridge_scriptzteam" + description = "Import bridges discovered by scriptzteam from GitHub" + frequency = 300 # They only update every couple of days as of February 2023 + + def fetch(self) -> None: + r = requests.get( + "https://raw.githubusercontent.com/scriptzteam/Tor-Bridges-Collector/main/bridges-obfs4") + r.encoding = "utf-8" + contents = r.text + self._lines = contents.splitlines() diff --git a/app/terraform/block/bridge_bridgelines.py b/app/terraform/block/bridge_bridgelines.py new file mode 100644 index 0000000..5ad31d6 --- /dev/null +++ b/app/terraform/block/bridge_bridgelines.py @@ -0,0 +1,22 @@ +import logging +from abc import ABC +from typing import List + +from app.terraform.block.bridge import BlockBridgeAutomation + + +class BlockBridgelinesAutomation(BlockBridgeAutomation, ABC): + + _lines: List[str] + + def parse(self) -> None: + for line in self._lines: + parts = line.split(" ") + try: + ip_address = parts[1].split(":")[0] + fingerprint = parts[2] + self.ips.append(ip_address) + self.fingerprints.append(fingerprint) + logging.debug(f"Added blocked bridge with IP {ip_address} and fingerprint {fingerprint}") + except IndexError: + logging.warning("A parsing error occured.")