aboutsummaryrefslogtreecommitdiff
path: root/rpki/gui/app/views.py
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2014-11-20 18:52:39 +0000
committerMichael Elkins <melkins@tislabs.com>2014-11-20 18:52:39 +0000
commit44feb68865682e16e2a6c35b0fa4bfb150a06377 (patch)
treee8533b19fc92287312766811c8010caf879719e8 /rpki/gui/app/views.py
parentd1bf25209dcc88832d61e1b66d6a9a3175f9f5f2 (diff)
Catch exception when the user attempts to import prefix/asn CSV files with missing children, and allow the user to skip missing children in the import form. see #735
Catch rpki.csv_util.BadCSVSyntax and display an error to the user. svn path=/trunk/; revision=6033
Diffstat (limited to 'rpki/gui/app/views.py')
-rw-r--r--rpki/gui/app/views.py65
1 files changed, 49 insertions, 16 deletions
diff --git a/rpki/gui/app/views.py b/rpki/gui/app/views.py
index fa01adc0..1f740d31 100644
--- a/rpki/gui/app/views.py
+++ b/rpki/gui/app/views.py
@@ -47,6 +47,7 @@ from rpki.resource_set import (resource_range_as, resource_range_ip,
roa_prefix_ipv4)
from rpki import sundial
import rpki.exceptions
+import rpki.csv_utils
from rpki.gui.cacheview.models import ROA
from rpki.gui.routeview.models import RouteOrigin
@@ -325,11 +326,25 @@ def import_asns(request):
f.write(request.FILES['csv'].read())
f.close()
z = Zookeeper(handle=conf.handle, disable_signal_handlers=True)
- z.load_asns(f.name)
- z.run_rpkid_now()
- os.unlink(f.name)
- messages.success(request, 'Successfully imported AS delgations from CSV file.')
- return redirect(dashboard)
+ try:
+ z.load_asns(
+ f.name,
+ ignore_missing_children=form.cleaned_data['ignore_missing_children']
+ )
+ except rpki.irdb.models.Child.DoesNotExist:
+ messages.error(
+ request,
+ 'CSV file contains children not found in the IRDB'
+ )
+ except rpki.csv_utils.BadCSVSyntax as e:
+ messages.error(request,
+ 'CSV file has an invalid syntax: %s' % (e,))
+ else:
+ z.run_rpkid_now()
+ messages.success(request, 'Successfully imported AS delgations from CSV file.')
+ return redirect(dashboard)
+ finally:
+ os.unlink(f.name)
else:
form = forms.ImportCSVForm()
return render(request, 'app/import_resource_form.html', {
@@ -360,11 +375,22 @@ def import_prefixes(request):
f.write(request.FILES['csv'].read())
f.close()
z = Zookeeper(handle=conf.handle, disable_signal_handlers=True)
- z.load_prefixes(f.name)
- z.run_rpkid_now()
- os.unlink(f.name)
- messages.success(request, 'Successfully imported prefix delegations from CSV file.')
- return redirect(dashboard)
+ try:
+ z.load_prefixes(
+ f.name,
+ ignore_missing_children=form.cleaned_data['ignore_missing_children']
+ )
+ except rpki.irdb.models.Child.DoesNotExist:
+ messages.error(request, 'CSV file contains children not found in the IRDB')
+ except rpki.csv_utils.BadCSVSyntax as e:
+ messages.error(request,
+ 'CSV file has an invalid syntax: %s' % (e,))
+ else:
+ z.run_rpkid_now()
+ messages.success(request, 'Successfully imported AS delgations from CSV file.')
+ return redirect(dashboard)
+ finally:
+ os.unlink(f.name)
else:
form = forms.ImportCSVForm()
return render(request, 'app/import_resource_form.html', {
@@ -837,12 +863,19 @@ def roa_import(request):
tmp = tempfile.NamedTemporaryFile(suffix='.csv', prefix='roas', delete=False)
tmp.write(request.FILES['csv'].read())
tmp.close()
- z = Zookeeper(handle=request.session['handle'], disable_signal_handlers=True)
- z.load_roa_requests(tmp.name)
- z.run_rpkid_now()
- os.unlink(tmp.name)
- messages.success(request, 'Successfully imported ROAs.')
- return redirect(dashboard)
+ z = Zookeeper(handle=request.session['handle'],
+ disable_signal_handlers=True)
+ try:
+ z.load_roa_requests(tmp.name)
+ except rpki.csv_utils.BadCSVSyntax as e:
+ messages.error(request,
+ 'CSV has bad syntax: %s' % (e,))
+ else:
+ z.run_rpkid_now()
+ messages.success(request, 'Successfully imported ROAs.')
+ return redirect(dashboard)
+ finally:
+ os.unlink(tmp.name)
else:
form = forms.ImportCSVForm()
return render(request, 'app/import_resource_form.html', {