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
))
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
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):
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)
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