Add something that shows the redirect sequence
[bigly] / src / bigly / views.py
index f88753a..b037d6b 100644 (file)
@@ -1,6 +1,6 @@
 from urllib.parse import urlparse, urlunparse, parse_qs
 
-from django.shortcuts import render
+from django.shortcuts import redirect, render
 from django.views.generic.base import TemplateView
 
 from rest_framework import status, viewsets
@@ -31,11 +31,16 @@ def _remove_utm(link):
     ))
 
 def _follow_redirects(link, remove_utm):
+    redirect_sequence = []
+
     while True:
+        redirect_sequence.append(link)
+
         if remove_utm:
             link = _remove_utm(link)
 
-        response = requests.head(link)
+        # TODO Do this in an async call so it doesn't block the main thread
+        response = requests.head(link, timeout=10)
 
         # TODO Handle timeouts
 
@@ -53,6 +58,10 @@ def _follow_redirects(link, remove_utm):
             return {
                 'link': link,
                 'status': response.status_code,
+
+                # TODO Handle different capitalizations of "Content-Type"
+                'content_type': response.headers.get('Content-Type'),
+                'redirect_sequence': redirect_sequence,
             }
 
 class IndexView(TemplateView):
@@ -60,6 +69,11 @@ class IndexView(TemplateView):
 
 index = IndexView.as_view()
 
+class FAQView(TemplateView):
+    template_name = 'bigly/faq.html'
+
+faq = FAQView.as_view()
+
 def embiggen(request):
     serializer = serializers.FollowRedirectsSerializer(data=request.GET)
 
@@ -78,11 +92,15 @@ def embiggen(request):
         remove_utm = serializer.data['remove_utm'],
     )
 
-    return render(
-        request,
-        'bigly/link_info.html',
-        result,
-    )
+    if serializer.data['handler'] == 'redirect':
+        return redirect(result['link'])
+
+    else:
+        return render(
+            request,
+            'bigly/link_info.html',
+            result,
+        )
 
 class FollowRedirectsViewSet(viewsets.ViewSet):
     serializer_class = serializers.FollowRedirectsSerializer