aboutsummaryrefslogtreecommitdiffstats
path: root/brevisurl/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'brevisurl/views.py')
-rw-r--r--brevisurl/views.py35
1 files changed, 27 insertions, 8 deletions
diff --git a/brevisurl/views.py b/brevisurl/views.py
index 965439d..a210693 100644
--- a/brevisurl/views.py
+++ b/brevisurl/views.py
@@ -9,6 +9,7 @@ from django.core.exceptions import ImproperlyConfigured
import brevisurl.settings
from brevisurl import get_connection
from brevisurl.models import ShortUrl
+from brevisurl.utils import absurl
log = logging.getLogger(__name__)
@@ -17,25 +18,43 @@ log = logging.getLogger(__name__)
class BrevisUrlRedirectView(RedirectView):
def get_redirect_url(self, **kwargs):
+ # No token present
try:
token = kwargs.pop('token')
except KeyError:
log.exception('Token not found in keyword arguments')
raise Http404
+
connection = get_connection('brevisurl.backends.local.BrevisUrlBackend')
+ short_url_obj = None
+
+ # Seeking domain in settings
if brevisurl.settings.LOCAL_BACKEND_DOMAIN is not None:
domain = brevisurl.settings.LOCAL_BACKEND_DOMAIN.rstrip('/')
- else:
+ short_url = absurl(domain=domain, path=reverse('brevisurl_redirect', kwargs={'token': token}))
+ try:
+ short_url_obj = ShortUrl.objects.get(backend=connection.class_path, shortened_url=short_url)
+ except ShortUrl.DoesNotExist:
+ pass
+
+ # Seeking domain in django site framework and current site
+ if short_url_obj is None:
try:
site = Site.objects.get_current()
- domain = '{0}://{1}'.format(brevisurl.settings.LOCAL_BACKEND_DOMAIN_PROTOCOL, site.domain)
+ short_url = absurl(site=site, path=reverse('brevisurl_redirect', kwargs={'token': token}))
+ short_url_obj = ShortUrl.objects.get(backend=connection.class_path, shortened_url=short_url)
except ImproperlyConfigured:
log.exception('No site object configured for this django project')
+ except ShortUrl.DoesNotExist:
+ pass
+
+ # Seeking domain from current request
+ if short_url_obj is None:
+ try:
+ short_url = absurl(domain=self.request.get_host(), path=reverse('brevisurl_redirect', kwargs={'token': token}))
+ short_url_obj = ShortUrl.objects.get(backend=connection.class_path, shortened_url=short_url)
+ except ShortUrl.DoesNotExist:
+ log.exception('No shortened url found for backend: "%s" and token: "%s"', connection.class_path, token)
raise Http404
- try:
- short_url = '{0}{1}'.format(domain, reverse('brevisurl_redirect', kwargs={'token': token}))
- short_url_obj = ShortUrl.objects.get(backend=connection.class_path, shortened_url=short_url)
- except ShortUrl.DoesNotExist:
- log.exception('No shortened url found for backend: "%s" and token: "%s"', connection.class_path, token)
- raise Http404
+
return short_url_obj.original_url \ No newline at end of file