Starting a basic app
[bigly] / src / bigly / views.py
diff --git a/src/bigly/views.py b/src/bigly/views.py
new file mode 100644 (file)
index 0000000..46bccd6
--- /dev/null
@@ -0,0 +1,55 @@
+from django.views.generic.base import TemplateView
+
+from rest_framework import status, viewsets
+from rest_framework.response import Response
+import requests
+
+from . import serializers
+
+class IndexView(TemplateView):
+    template_name = 'bigly/index.html'
+
+index = IndexView.as_view()
+
+class FollowRedirectsViewSet(viewsets.ViewSet):
+    serializer_class = serializers.FollowRedirectsSerializer
+
+    def follow_redirects(self, request):
+        serializer = serializers.FollowRedirectsSerializer(data=request.query_params)
+
+        if not serializer.is_valid():
+            return Response(
+                serializer.errors,
+                status=status.HTTP_400_BAD_REQUEST,
+            )
+
+        link = serializer.data['link']
+
+        while True:
+            response = requests.head(link)
+
+            # TODO Handle timeouts
+
+            if 301 <= response.status_code and response.status_code <= 308:
+                # TODO Handle the different kinds of redirects correctly
+
+                link = response.headers.get('Location')
+
+                if not link:
+                    # TODO Handle this
+                    raise Exception()
+
+            # TODO Handle error responses
+            else:
+                return Response(
+                    {
+                        'link': link,
+                        'status': response.status_code,
+                    },
+                    status=status.HTTP_200_OK,
+                )
+
+
+api_follow_redirects = FollowRedirectsViewSet.as_view({
+    'get': 'follow_redirects',
+})