diff --git a/web/postkey/views.py b/web/postkey/views.py index f42dd94..9ce67da 100644 --- a/web/postkey/views.py +++ b/web/postkey/views.py @@ -1,20 +1,51 @@ from django.shortcuts import render_to_response from django.http import HttpResponseRedirect +from django import forms from django.forms import ModelForm from django.template import RequestContext from web.postkey.models import i2phost +import re class AddForm(ModelForm): class Meta: model = i2phost fields = ('name', 'b64hash') + def clean_name(self): + data = self.cleaned_data['name'] + # convert hostname to lowercase + data = data.lower() + # Must end with '.i2p'. + if re.match(r'.*\.i2p$', data) == None: + raise forms.ValidationError('Hostname doesn\'t ends with .i2p') + # Base 32 hostnames (*.b32.i2p) are not allowed + if re.match(r'.*\.b32\.i2p$', data): + raise forms.ValidationError('Base 32 hostnames are not allowed') + # Must contain only [a-z] [0-9] '.' and '-' + h = re.match(r'([a-z0-9.-]+)\.i2p$', data) + if h == None: + raise forms.ValidationError('Illegal characters in hostname') + else: + namepart = h.groups()[0] + # Must not contain '..' + if re.search(r'\.\.', namepart): + raise forms.ValidationError('".." in hostname') + # Must not contain '.-' or '-.' (as of 0.6.1.33) + if re.search(r'(\.-)|(-\.)', namepart): + raise forms.ValidationError('Hostname contain ".-" or "-."') + # Must not contain '--' except in 'xn--' for IDN + if re.search(r'(?