From 63ba82dd0e8c64f5dac7e311187e6e3026b1e0c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= <raphael@vinot.info>
Date: Mon, 10 Oct 2022 14:14:31 +0200
Subject: [PATCH] fix: Catch exception when getting redirects on broken capture

---
 website/web/genericapi.py | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/website/web/genericapi.py b/website/web/genericapi.py
index 20d3e0b6..d7448834 100644
--- a/website/web/genericapi.py
+++ b/website/web/genericapi.py
@@ -127,19 +127,25 @@ class CaptureRedirects(Resource):
         if not cache:
             return {'error': 'UUID missing in cache, try again later and check the status first.'}, 400
 
-        to_return: Dict[str, Any] = {'response': {'url': cache.url, 'redirects': []}}
-        if not cache.redirects:
-            to_return['response']['info'] = 'No redirects'
-            return to_return
-        if cache.incomplete_redirects:
-            # Trigger tree build, get all redirects
-            lookyloo.get_crawled_tree(capture_uuid)
-            cache = lookyloo.capture_cache(capture_uuid)
-            if cache:
+        to_return: Dict[str, Any] = {}
+        try:
+            to_return = {'response': {'url': cache.url, 'redirects': []}}
+            if not cache.redirects:
+                to_return['response']['info'] = 'No redirects'
+                return to_return
+            if cache.incomplete_redirects:
+                # Trigger tree build, get all redirects
+                lookyloo.get_crawled_tree(capture_uuid)
+                cache = lookyloo.capture_cache(capture_uuid)
+                if cache:
+                    to_return['response']['redirects'] = cache.redirects
+            else:
                 to_return['response']['redirects'] = cache.redirects
-        else:
-            to_return['response']['redirects'] = cache.redirects
-
+        except Exception as e:
+            if cache and hasattr(cache, 'error'):
+                to_return['error'] = cache.error
+            else:
+                to_return['error'] = str(e)
         return to_return