From 4ab98ec12bff5d04c8e9647e4b65350b107cf0e2 Mon Sep 17 00:00:00 2001 From: db0 Date: Sun, 15 Oct 2023 14:31:06 +0200 Subject: [PATCH] fix: handle bot blocking siteinfo --- fediseer/fediverse.py | 28 ++++++++++++++++++++++++---- fediseer/register.py | 2 +- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/fediseer/fediverse.py b/fediseer/fediverse.py index 92ae6ea..2549660 100644 --- a/fediseer/fediverse.py +++ b/fediseer/fediverse.py @@ -176,7 +176,12 @@ class InstanceInfo(): def get_mastodon_info(self): site = requests.get(f"https://{self.domain}/api/v1/instance",timeout=self._req_timeout) - self.instance_info = site.json() + try: + self.instance_info = site.json() + except Exception as err: + if "challenge-error-text" in site.text: + raise Exception("Instance is preventing scripted retrieval of their site info.") + raise err self.approval_required = self.instance_info["approval_required"] if self.node_info is None: raise Exception("Error retrieving nodeinfo") @@ -186,7 +191,12 @@ class InstanceInfo(): def get_pleroma_info(self): site = requests.get(f"https://{self.domain}/api/v1/instance",timeout=self._req_timeout) - self.instance_info = site.json() + try: + self.instance_info = site.json() + except Exception as err: + if "challenge-error-text" in site.text: + raise Exception("Instance is preventing scripted retrieval of their site info.") + raise err self.approval_required = self.instance_info["approval_required"] if self.node_info is None: raise Exception("Error retrieving nodeinfo") @@ -196,7 +206,12 @@ class InstanceInfo(): def get_firefish_info(self): site = requests.get(f"https://{self.domain}/api/v1/instance",timeout=self._req_timeout) - self.instance_info = site.json() + try: + self.instance_info = site.json() + except Exception as err: + if "challenge-error-text" in site.text: + raise Exception("Instance is preventing scripted retrieval of their site info.") + raise err self.approval_required = self.instance_info["approval_required"] if self.node_info is None: raise Exception("Error retrieving nodeinfo") @@ -213,7 +228,12 @@ class InstanceInfo(): site = requests.get(f"https://{self.domain}/api/v1/instance",timeout=self._req_timeout,allow_redirects=False) if site.status_code != 200: raise Exception(f"Unexpected status code retrieved when discovering instance info: {site.status_code}") - self.instance_info = site.json() + try: + self.instance_info = site.json() + except Exception as err: + if "challenge-error-text" in site.text: + raise Exception("Instance is preventing scripted retrieval of their site info.") + raise err self.approval_required = self.instance_info.get("approval_required") if self.node_info is None: raise Exception("Error retrieving nodeinfo") diff --git a/fediseer/register.py b/fediseer/register.py index 43ee970..13a0904 100644 --- a/fediseer/register.py +++ b/fediseer/register.py @@ -26,7 +26,7 @@ def ensure_instance_registered(domain, allow_unreachable=False, record_unreachab instance.poll_failures += 60 db.session.commit() if not allow_unreachable: - raise e.BadRequest(f"Error encountered while polling domain {domain}. Please check it's running correctly") + raise e.BadRequest(str(err)) if instance: if ( instance.software != instance_info.software or