diff options
author | Michael Elkins <melkins@tislabs.com> | 2013-04-03 21:47:53 +0000 |
---|---|---|
committer | Michael Elkins <melkins@tislabs.com> | 2013-04-03 21:47:53 +0000 |
commit | 01f2d809570964c09408c3c81d642d5d4c6382e4 (patch) | |
tree | 2443c8fc70530ec62a69bcb88ebe3dc6ea3c8b5e /rpkid/rpki/gui/app/models.py | |
parent | 54af2beac87f906f886a29bbd884886b0d662ba0 (diff) | |
parent | 3f0a32b5756d9c76305de6225bbeb92601e9170c (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.py | 52 |
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 |