diff options
Diffstat (limited to 'rpkid/rpki/gui/app/glue.py')
-rw-r--r-- | rpkid/rpki/gui/app/glue.py | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/rpkid/rpki/gui/app/glue.py b/rpkid/rpki/gui/app/glue.py deleted file mode 100644 index a9f6441e..00000000 --- a/rpkid/rpki/gui/app/glue.py +++ /dev/null @@ -1,132 +0,0 @@ -# Copyright (C) 2010, 2011 SPARTA, Inc. dba Cobham Analytic Solutions -# Copyright (C) 2012 SPARTA, Inc. a Parsons Company -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND SPARTA DISCLAIMS ALL WARRANTIES WITH -# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -# AND FITNESS. IN NO EVENT SHALL SPARTA BE LIABLE FOR ANY SPECIAL, DIRECT, -# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -""" -This file contains code that interfaces between the django views implementing -the portal gui and the rpki.* modules. - -""" - -from __future__ import with_statement - -__version__ = '$Id$' - -from datetime import datetime - -from rpki.resource_set import (resource_set_as, resource_set_ipv4, - resource_set_ipv6, resource_range_ipv4, - resource_range_ipv6) -from rpki.left_right import list_received_resources_elt, report_error_elt -from rpki.irdb.zookeeper import Zookeeper -from rpki.gui.app import models -from rpki.exceptions import BadIPResource - -from django.contrib.auth.models import User -from django.db.transaction import commit_on_success - - -def ghostbuster_to_vcard(gbr): - """Convert a GhostbusterRequest object into a vCard object.""" - import vobject - - vcard = vobject.vCard() - vcard.add('N').value = vobject.vcard.Name(family=gbr.family_name, - given=gbr.given_name) - - adr_fields = ['box', 'extended', 'street', 'city', 'region', 'code', - 'country'] - adr_dict = dict((f, getattr(gbr, f, '')) for f in adr_fields) - if any(adr_dict.itervalues()): - vcard.add('ADR').value = vobject.vcard.Address(**adr_dict) - - # mapping from vCard type to Ghostbuster model field - # the ORG type is a sequence of organization unit names, so - # transform the org name into a tuple before stuffing into the - # vCard object - attrs = [('FN', 'full_name', None), - ('TEL', 'telephone', None), - ('ORG', 'organization', lambda x: (x,)), - ('EMAIL', 'email_address', None)] - for vtype, field, transform in attrs: - v = getattr(gbr, field) - if v: - vcard.add(vtype).value = transform(v) if transform else v - return vcard.serialize() - - -class LeftRightError(Exception): - """Class for wrapping report_error_elt errors from Zookeeper.call_rpkid(). - - It expects a single argument, which is the associated report_error_elt instance.""" - - def __str__(self): - return 'Error occurred while communicating with rpkid: handle=%s code=%s text=%s' % ( - self.args[0].self_handle, - self.args[0].error_code, - self.args[0].error_text) - - -@commit_on_success -def list_received_resources(log, conf): - """ - Query rpkid for this resource handle's received resources. - - The semantics are to clear the entire table and populate with the list of - certs received. Other models should not reference the table directly with - foreign keys. - - """ - - z = Zookeeper(handle=conf.handle) - pdus = z.call_rpkid(list_received_resources_elt.make_pdu(self_handle=conf.handle)) - # pdus is sometimes None (see https://trac.rpki.net/ticket/681) - if pdus is None: - print >>log, 'error: call_rpkid() returned None for handle %s when fetching received resources' % conf.handle - return - - models.ResourceCert.objects.filter(conf=conf).delete() - - for pdu in pdus: - if isinstance(pdu, report_error_elt): - # this will cause the db to be rolled back so the above delete() - # won't clobber existing resources - raise LeftRightError, pdu - elif isinstance(pdu, list_received_resources_elt): - if pdu.parent_handle != conf.handle: - parent = models.Parent.objects.get(issuer=conf, - handle=pdu.parent_handle) - else: - # root cert, self-signed - parent = None - - not_before = datetime.strptime(pdu.notBefore, "%Y-%m-%dT%H:%M:%SZ") - not_after = datetime.strptime(pdu.notAfter, "%Y-%m-%dT%H:%M:%SZ") - - cert = models.ResourceCert.objects.create( - conf=conf, parent=parent, not_before=not_before, - not_after=not_after, uri=pdu.uri) - - for asn in resource_set_as(pdu.asn): - cert.asn_ranges.create(min=asn.min, max=asn.max) - - for rng in resource_set_ipv4(pdu.ipv4): - cert.address_ranges.create(prefix_min=rng.min, - prefix_max=rng.max) - - for rng in resource_set_ipv6(pdu.ipv6): - cert.address_ranges_v6.create(prefix_min=rng.min, - prefix_max=rng.max) - else: - print >>log, "error: unexpected pdu from rpkid type=%s" % type(pdu) |