aboutsummaryrefslogtreecommitdiff
path: root/portal-gui/rpkigui/myrpki/forms.py
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2010-07-04 17:36:15 +0000
committerMichael Elkins <melkins@tislabs.com>2010-07-04 17:36:15 +0000
commit60cf2b285c35807ae68ad8fe5b9013dd31b84c6f (patch)
treead28479a779b6665518955a1c87c7d860769bbb0 /portal-gui/rpkigui/myrpki/forms.py
parentfa59bb562d7cbec79899faaa84be5f4441a61028 (diff)
improve validation for prefix split form
svn path=/portal-gui/rpkigui/myrpki/forms.py; revision=3333
Diffstat (limited to 'portal-gui/rpkigui/myrpki/forms.py')
-rw-r--r--portal-gui/rpkigui/myrpki/forms.py40
1 files changed, 32 insertions, 8 deletions
diff --git a/portal-gui/rpkigui/myrpki/forms.py b/portal-gui/rpkigui/myrpki/forms.py
index f86f40dd..fbd02df9 100644
--- a/portal-gui/rpkigui/myrpki/forms.py
+++ b/portal-gui/rpkigui/myrpki/forms.py
@@ -2,6 +2,7 @@
from django import forms
import models
+from rpkigui.myrpki.misc import str_to_addr
def ConfCertForm(request):
class CertForm(forms.ModelForm):
@@ -177,23 +178,46 @@ def PrefixSplitForm(prefix, *args, **kwargs):
def clean_lo(self):
lo = self.cleaned_data.get('lo')
- if lo > prefix.hi:
+ # convert from string to long representation
+ try:
+ loaddr = str_to_addr(lo)
+ except socket.error:
+ raise forms.ValidationError, 'Invalid IP address string'
+ pfx_loaddr = str_to_addr(prefix.lo)
+ pfx_hiaddr = str_to_addr(prefix.hi)
+ if type(loaddr) != type(pfx_hiaddr):
+ raise forms.ValidationError, 'Not the same IP address type as parent'
+ if loaddr < pfx_loaddr or loaddr > pfx_hiaddr:
raise forms.ValidationError, 'Value out of range of parent prefix'
return lo
def clean_hi(self):
hi = self.cleaned_data.get('hi')
- if hi < prefix.lo:
+ # convert from string to long representation
+ try:
+ hiaddr = str_to_addr(hi)
+ except socket.error:
+ raise forms.ValidationError, 'Invalid IP address string'
+ pfx_loaddr = str_to_addr(prefix.lo)
+ pfx_hiaddr = str_to_addr(prefix.hi)
+ if type(hiaddr) != type(pfx_loaddr):
+ raise forms.ValidationError, 'Not the same IP address type as parent'
+ if hiaddr < pfx_loaddr or hiaddr > pfx_hiaddr:
raise forms.ValidationError, 'Value out of range of parent prefix'
return hi
def clean(self):
- hi = self.cleaned_data['hi']
- lo = self.cleaned_data['lo']
- if hi < lo:
- raise forms.ValidationError, 'Invalid upper range'
- if prefix.allocated:
- raise forms.ValidationError, 'Prefix is assigned to child'
+ hi = self.cleaned_data.get('hi')
+ lo = self.cleaned_data.get('lo')
+ # hi or lo may be None if field validation failed
+ if hi and lo:
+ # convert from string to long representation
+ hiaddr = str_to_addr(hi)
+ loaddr = str_to_addr(lo)
+ if hiaddr < loaddr:
+ raise forms.ValidationError, 'Hi value is smaller than Lo'
+ if prefix.allocated:
+ raise forms.ValidationError, 'Prefix is assigned to child'
return self.cleaned_data
return _wrapper(*args, **kwargs)