aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki/gui
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2011-06-14 19:02:25 +0000
committerMichael Elkins <melkins@tislabs.com>2011-06-14 19:02:25 +0000
commit9bfb5b58e179dc995606c7c9fcc534dd06b48a78 (patch)
tree65eae00f0de4e741013f1b64b5bf71c5d158530e /rpkid/rpki/gui
parentf9c0ff28cd7b84ec6bc17ed358a252adefd79695 (diff)
extrude validation status lables from the rcynic XML file and shove into django db
color code validation status in signed object detail views to make problems stand out svn path=/rpkid/portal-gui/scripts/rpkigui-rcynic.py; revision=3873
Diffstat (limited to 'rpkid/rpki/gui')
-rw-r--r--rpkid/rpki/gui/cacheview/admin.py4
-rw-r--r--rpkid/rpki/gui/cacheview/models.py34
-rw-r--r--rpkid/rpki/gui/cacheview/templates/cacheview/cacheview_base.html6
-rw-r--r--rpkid/rpki/gui/cacheview/templates/cacheview/cert_detail.html9
-rw-r--r--rpkid/rpki/gui/cacheview/templates/cacheview/query_result.html2
-rw-r--r--rpkid/rpki/gui/cacheview/templates/cacheview/signedobject_detail.html4
6 files changed, 47 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>