import re

from django.shortcuts import render_to_response
from django.core.exceptions import ValidationError

from web.postkey.models import i2phost
from web.lib.validation import validate_hostname
from web 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:
		key = i2phost.objects.get(name=hostname, activated=True).b64hash
	except i2phost.DoesNotExist:
		return render_to_response('jump-unknown.html', {
			'title': settings.SITE_NAME,
			})
	# 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,
		})