aboutsummaryrefslogtreecommitdiff
path: root/portal-gui/rpkigui/myrpki/forms.py
diff options
context:
space:
mode:
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)