aboutsummaryrefslogtreecommitdiff
path: root/rpkid/rpki/gui/app/models.py
diff options
context:
space:
mode:
authorMichael Elkins <melkins@tislabs.com>2013-04-03 21:47:53 +0000
committerMichael Elkins <melkins@tislabs.com>2013-04-03 21:47:53 +0000
commit01f2d809570964c09408c3c81d642d5d4c6382e4 (patch)
tree2443c8fc70530ec62a69bcb88ebe3dc6ea3c8b5e /rpkid/rpki/gui/app/models.py
parent54af2beac87f906f886a29bbd884886b0d662ba0 (diff)
parent3f0a32b5756d9c76305de6225bbeb92601e9170c (diff)
merge /branches/tk500
closes #500 svn path=/trunk/; revision=5264
Diffstat (limited to 'rpkid/rpki/gui/app/models.py')
-rw-r--r--rpkid/rpki/gui/app/models.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/rpkid/rpki/gui/app/models.py b/rpkid/rpki/gui/app/models.py
index 5e74d27c..5b33be5e 100644
--- a/rpkid/rpki/gui/app/models.py
+++ b/rpkid/rpki/gui/app/models.py
@@ -17,6 +17,7 @@ __version__ = '$Id$'
from django.db import models
from django.contrib.auth.models import User
+from django.core.mail import send_mail
import rpki.resource_set
import rpki.exceptions
@@ -84,6 +85,31 @@ class ChildNet(rpki.irdb.models.ChildNet):
return u'%s' % self.as_resource_range()
+class Alert(models.Model):
+ """Stores alert messages intended to be consumed by the user."""
+
+ INFO = 0
+ WARNING = 1
+ ERROR = 2
+
+ SEVERITY_CHOICES = (
+ (INFO, 'info'),
+ (WARNING, 'warning'),
+ (ERROR, 'error'),
+ )
+
+ conf = models.ForeignKey('Conf', related_name='alerts')
+ severity = models.SmallIntegerField(choices=SEVERITY_CHOICES, default=INFO)
+ when = models.DateTimeField(auto_now_add=True)
+ seen = models.BooleanField(default=False)
+ subject = models.CharField(max_length=66)
+ text = models.TextField()
+
+ @models.permalink
+ def get_absolute_url(self):
+ return ('alert-detail', [str(self.pk)])
+
+
class Conf(rpki.irdb.models.ResourceHolderCA):
"""This is the center of the universe, also known as a place to
have a handle on a resource-holding entity. It's the <self>
@@ -146,6 +172,32 @@ class Conf(rpki.irdb.models.ResourceHolderCA):
prefix_max__lte=p.prefix_max)
return RouteOriginV6.objects.filter(q)
+ def send_alert(self, subject, message, from_email, severity=Alert.INFO):
+ """Store an alert for this resource holder."""
+ self.alerts.create(subject=subject, text=message, severity=severity)
+
+ send_mail(
+ subject=subject,
+ message=message,
+ from_email=from_email,
+ recipient_list=self.email_list
+ )
+
+ @property
+ def email_list(self):
+ """Return a list of the contact emails for this resource holder.
+
+ Contact emails are extract from any ghostbuster requests, and any
+ linked user accounts.
+
+ """
+ notify_emails = [gbr.email_address for gbr in self.ghostbusters if gbr.email_address]
+ notify_emails.extend(
+ [acl.user.email for acl in ConfACL.objects.filter(conf=self) if acl.user.email]
+ )
+ return notify_emails
+
+
class Meta:
proxy = True