--- /dev/null
+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',
+})