diff options
Diffstat (limited to 'rpkid/rpki')
7 files changed, 57 insertions, 12 deletions
diff --git a/rpkid/rpki/gui/cacheview/admin.py b/rpkid/rpki/gui/cacheview/admin.py index af8b31da..2b88c1f3 100644 --- a/rpkid/rpki/gui/cacheview/admin.py +++ b/rpkid/rpki/gui/cacheview/admin.py @@ -37,11 +37,15 @@ class ROAAdmin(admin.ModelAdmin): class GhostbusterAdmin(admin.ModelAdmin): pass +class ValidationStatusAdmin(admin.ModelAdmin): + pass + admin.site.register(models.AddressRange, AddressRangeAdmin) admin.site.register(models.ASRange, AddressRangeAdmin) admin.site.register(models.Cert, CertAdmin) admin.site.register(models.Ghostbuster, GhostbusterAdmin) admin.site.register(models.ROA, ROAAdmin) admin.site.register(models.ROAPrefix, ROAPrefixAdmin) +admin.site.register(models.ValidationStatus, ValidationStatusAdmin) # vim:sw=4 ts=8 diff --git a/rpkid/rpki/gui/cacheview/models.py b/rpkid/rpki/gui/cacheview/models.py index b00a1933..afdd2c74 100644 --- a/rpkid/rpki/gui/cacheview/models.py +++ b/rpkid/rpki/gui/cacheview/models.py @@ -73,6 +73,26 @@ class ASRange(models.Model): def get_absolute_url(self): return ('rpki.gui.cacheview.views.asrange_detail', [str(self.pk)]) +kinds = ( (0, 'good'), (1, 'warn'), (2, 'bad') ) + +class ValidationStatus(models.Model): + """ + Represents a specific error condition defined in the rcynic XML + output file. + """ + label = models.CharField(max_length=30, db_index=True, unique=True) + status = models.CharField(max_length=255) + kind = models.PositiveSmallIntegerField(choices=kinds) + + def __unicode__(self): + return self.label + + def kind_as_str(self): + return kinds[self.kind][1] + + class Meta: + verbose_name_plural = 'ValidationStatuses' + class SignedObject(models.Model): """ Abstract class to hold common metadata for all signed objects. @@ -80,16 +100,16 @@ class SignedObject(models.Model): value for the 'related_name' attribute. """ # attributes from rcynic's output XML file - uri = models.URLField(unique=True, db_index=True) - timestamp = models.DateTimeField() - ok = models.BooleanField() - status = models.CharField(max_length=255) + uri = models.URLField(unique=True, db_index=True) + timestamp = models.DateTimeField() + ok = models.BooleanField() + status = models.ForeignKey('ValidationStatus') - mtime = models.PositiveIntegerField(default=0) + mtime = models.PositiveIntegerField(default=0) # validity period from EE cert which signed object - not_before = models.DateTimeField() - not_after = models.DateTimeField() + not_before = models.DateTimeField() + not_after = models.DateTimeField() class Meta: abstract = True diff --git a/rpkid/rpki/gui/cacheview/templates/cacheview/cacheview_base.html b/rpkid/rpki/gui/cacheview/templates/cacheview/cacheview_base.html index 1947401c..65f8da07 100644 --- a/rpkid/rpki/gui/cacheview/templates/cacheview/cacheview_base.html +++ b/rpkid/rpki/gui/cacheview/templates/cacheview/cacheview_base.html @@ -1,5 +1,11 @@ {% extends "base.html" %} +{% block css %} +.good { background-color: #77ff77 } +.warn { background-color: yellow } +.bad { background-color: #ff5500 } +{% endblock %} + {% block sidebar %} <ul class='compact'> <li><a href="/cacheview/search">resource search</a> diff --git a/rpkid/rpki/gui/cacheview/templates/cacheview/cert_detail.html b/rpkid/rpki/gui/cacheview/templates/cacheview/cert_detail.html index 276aa8b2..46d84d61 100644 --- a/rpkid/rpki/gui/cacheview/templates/cacheview/cert_detail.html +++ b/rpkid/rpki/gui/cacheview/templates/cacheview/cert_detail.html @@ -60,10 +60,15 @@ Resource Certificate Detail <h3>ROAs</h3> {% if object.roas.all %} <table> - <tr><th>Prefix</th><th>AS</th></tr> + <tr><th>Prefix</th><th>AS</th><th>Valid</th><th>Until</th></tr> {% for roa in object.roas.all %} {% for pfx in roa.prefixes.all %} - <tr><td>{{ pfx }}</td><td>{{ roa.asid }}</td></tr> + <tr> + <td>{{ pfx }}</td> + <td>{{ roa.asid }}</td> + <td class='{{ roa.status.kind_as_str }}'><a href="{{ roa.get_absolute_url }}">{{ roa.ok }}</a></td> + <td>{{ roa.not_after }}</td> + </tr> {% endfor %} {% endfor %} </table> diff --git a/rpkid/rpki/gui/cacheview/templates/cacheview/query_result.html b/rpkid/rpki/gui/cacheview/templates/cacheview/query_result.html index 3bc7e259..3c354f27 100644 --- a/rpkid/rpki/gui/cacheview/templates/cacheview/query_result.html +++ b/rpkid/rpki/gui/cacheview/templates/cacheview/query_result.html @@ -10,7 +10,7 @@ <tr> <td>{{ object.0 }}</td> <td>{{ object.1.asid }}</td> - <td><a href="{{ object.1.get_absolute_url }}">{{ object.1.ok }}</a></td> + <td class='{{ object.1.status.kind_as_str }}'><a href="{{ object.1.get_absolute_url }}">{{ object.1.ok }}</a></td> <td>{{ object.1.not_after }}</td> </tr> {% endfor %} diff --git a/rpkid/rpki/gui/cacheview/templates/cacheview/signedobject_detail.html b/rpkid/rpki/gui/cacheview/templates/cacheview/signedobject_detail.html index aa2ec444..e18b3cf4 100644 --- a/rpkid/rpki/gui/cacheview/templates/cacheview/signedobject_detail.html +++ b/rpkid/rpki/gui/cacheview/templates/cacheview/signedobject_detail.html @@ -9,11 +9,11 @@ <tr><td>URI</td><td>{{ object.uri }}</td></tr> <tr><td>Last Modified</td><td>{{ object.mtime_as_datetime|date:"DATETIME_FORMAT" }}</td></tr> <tr><td>Timestamp</td><td>{{ object.timestamp }}</td></tr> - <tr><td>Status</td><td>{{ object.status }}</td></tr> + <tr><td>Status</td><td class='{{ object.status.kind_as_str }}'>{{ object.status.status }}</td></tr> <tr><td>Valid</td><td>{{ object.ok }}</td></tr> </table> -<h2>Auth Info</h2> +<h2>X.509 Certificate Info</h2> <table> <tr><td>Validity</td><td>{{ object.not_before }} - {{ object.not_after }}</td></tr> diff --git a/rpkid/rpki/rcynic.py b/rpkid/rpki/rcynic.py index 2f6ffe12..0d258542 100644 --- a/rpkid/rpki/rcynic.py +++ b/rpkid/rpki/rcynic.py @@ -238,6 +238,16 @@ class rcynic_xml_iterator(object): if ext in file_name_classes: yield file_name_classes[ext](filename = filename, uri = uri, ok = ok, status = status, timestamp = timestamp) +def label_iterator(xml_file): + """ + Returns an iterator which contains all defined labels from an rcynic XML + output file. Each item is a tuple of the form + (label, kind, description). + """ + + for label in ElementTree(file=xml_file).find("labels"): + yield label.tag, label.get("kind"), label.text.strip() + if __name__ == "__main__": if False: for i in rcynic_file_iterator("/u/sra/rpki/subvert-rpki.hactrn.net/rcynic/rcynic-data"): |