From 2769f0d4bc268949cdbf46d024f6e82eae03cafb Mon Sep 17 00:00:00 2001 From: Hidden Z Date: Sat, 16 Oct 2010 18:30:08 +0000 Subject: [PATCH] Move validation functions to separate module --- web/lib/validation.py | 58 +++++++++++++++++++++++++++++++++++++++++++ web/postkey/views.py | 46 +++++----------------------------- 2 files changed, 64 insertions(+), 40 deletions(-) create mode 100644 web/lib/validation.py diff --git a/web/lib/validation.py b/web/lib/validation.py new file mode 100644 index 0000000..c69f6c3 --- /dev/null +++ b/web/lib/validation.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python2.6 + +import re + +from django import forms +from web.postkey.models import i2phost + + +def validate_hostname(data): + """ + Here we do additional hostname validation as described in + http://www.i2p2.i2p/naming.html + """ + # 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'(?