mirror of https://github.com/r4sas/py-i2phosts
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
import re |
|
|
|
from django.shortcuts import render_to_response |
|
from django.shortcuts import redirect |
|
from django.core.exceptions import ValidationError |
|
|
|
from pyi2phosts.postkey.models import i2phost |
|
from pyi2phosts.lib.validation import validate_hostname |
|
import settings |
|
|
|
def jumper(request, host): |
|
"""Actually do jumps.""" |
|
try: |
|
hostname = validate_hostname(host) |
|
except ValidationError, e: |
|
return render_to_response('jump-error.html', { |
|
'title': settings.SITE_NAME, |
|
'error': e, |
|
}) |
|
try: |
|
h = i2phost.objects.get(name=hostname) |
|
except i2phost.DoesNotExist: |
|
return render_to_response('jump-unknown.html', { |
|
'title': settings.SITE_NAME, |
|
}) |
|
if h.activated == True: |
|
key = h.b64hash |
|
else: |
|
return redirect('/search/?q=' + hostname) |
|
# begin forming url |
|
url = 'http://' + hostname |
|
# get params from requst string, e.g. from 'example.i2p/smth/1?a=b&c=d' get 'smth/1?a=b&c=d' |
|
pattern = host + r'/(.+)' |
|
m = re.search(pattern, request.get_full_path()) |
|
if m: |
|
params = m.group(1) |
|
url += '/' + params |
|
# determine how we should pass i2paddresshelper |
|
# http://zzz.i2p/oldnews.html#jump |
|
if params.find('?') == -1: |
|
suffix = '?' |
|
else: |
|
suffix = '&' |
|
url += suffix + 'i2paddresshelper=' + key |
|
else: |
|
url += '/?i2paddresshelper=' + key |
|
return render_to_response('jump.html', { |
|
'title': settings.SITE_NAME, |
|
'url': url, |
|
})
|
|
|