diff --git a/web/jump/urls.py b/web/jump/urls.py new file mode 100644 index 0000000..eb90a13 --- /dev/null +++ b/web/jump/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls.defaults import * + +urlpatterns = patterns('web.jump.views', + (r'^error/', 'error'), + (r'^unknown/', 'unknown'), + (r'^(.+)', 'jumper'), + +) diff --git a/web/jump/views.py b/web/jump/views.py new file mode 100644 index 0000000..a6a8aea --- /dev/null +++ b/web/jump/views.py @@ -0,0 +1,25 @@ +from django.shortcuts import redirect +from django.core.exceptions import ValidationError +from django.http import HttpResponse + +from web.postkey.models import i2phost +from web.lib.validation import validate_hostname + +def jumper(request, data): + """Actually do jumps.""" + try: + hostname = validate_hostname(data) + except ValidationError, e: + return redirect('error/') + try: + key = i2phost.objects.get(name=hostname, activated=True).b64hash + except i2phost.DoesNotExist: + return redirect('unknown/') + url = 'http://' + hostname + '/?i2paddresshelper=' + key + return redirect(url, permanent=True) + +def error(request): + return HttpResponse('You are trying to access an invalid hostname.') + +def unknown(request): + return HttpResponse('You are trying to access an unknown hostname.') diff --git a/web/urls.py b/web/urls.py index 85dd012..7da8985 100644 --- a/web/urls.py +++ b/web/urls.py @@ -6,6 +6,7 @@ admin.autodiscover() urlpatterns = patterns('', (r'^postkey/', include('web.postkey.urls')), + (r'^jump/', include('web.jump.urls')), # Example: # (r'^web/', include('web.foo.urls')),