This commit is contained in:
kevgliss 2015-08-29 13:07:30 -07:00
parent bf8ce354e5
commit aca69ce03c
3 changed files with 45 additions and 10 deletions

View File

@ -91,19 +91,22 @@ def update(cert_id, owner, description, active, destinations, notifications):
cert.description = description cert.description = description
# we might have to create new notifications if the owner changes # we might have to create new notifications if the owner changes
if owner != cert.owner: new_notifications = []
for n in cert.notifications: # get existing names to remove
notification_name = "DEFAULT_{0}".format(cert.owner.split('@')[0].upper()) notification_name = "DEFAULT_{0}".format(cert.owner.split('@')[0].upper())
if n.name == notification_name: for n in notifications:
cert.notifications.remove(n) if notification_name not in n.label:
new_notifications.append(n)
cert.owner = owner notification_name = "DEFAULT_{0}".format(owner.split('@')[0].upper())
notification_name = "DEFAULT_{0}".format(cert.owner.split('@')[0].upper()) new_notifications += notification_service.create_default_expiration_notifications(notification_name, owner)
notifications = notification_service.create_default_expiration_notifications(notification_name, owner)
cert.notifications = new_notifications
database.update_list(cert, 'notifications', Notification, notifications)
database.update_list(cert, 'destinations', Destination, destinations) database.update_list(cert, 'destinations', Destination, destinations)
cert.owner = owner
return database.update(cert) return database.update(cert)

View File

@ -24,6 +24,8 @@ from lemur.roles import service as role_service
from lemur.common.utils import marshal_items, paginated_parser from lemur.common.utils import marshal_items, paginated_parser
from lemur.notifications.views import notification_list
mod = Blueprint('certificates', __name__) mod = Blueprint('certificates', __name__)
api = Api(mod) api = Api(mod)
@ -569,7 +571,7 @@ class Certificates(AuthenticatedResource):
self.reqparse.add_argument('owner', type=str, location='json') self.reqparse.add_argument('owner', type=str, location='json')
self.reqparse.add_argument('description', type=str, location='json') self.reqparse.add_argument('description', type=str, location='json')
self.reqparse.add_argument('destinations', type=list, default=[], location='json') self.reqparse.add_argument('destinations', type=list, default=[], location='json')
self.reqparse.add_argument('notifications', type=list, default=[], location='json') self.reqparse.add_argument('notifications', type=notification_list, default=[], location='json')
args = self.reqparse.parse_args() args = self.reqparse.parse_args()
cert = service.get(certificate_id) cert = service.get(certificate_id)

View File

@ -28,6 +28,36 @@ FIELDS = {
} }
def notification(value, name):
"""
Validates a given notification exits
:param value:
:param name:
:return:
"""
n = service.get(value)
if not n:
raise ValueError("Unable to find notification specified")
return n
def notification_list(value, name):
"""
Validates a given notification exists and returns a list
:param value:
:param name:
:return:
"""
notifications = []
for v in value:
try:
notifications.append(notification(v['id'], 'id'))
except ValueError:
pass
return notifications
class NotificationsList(AuthenticatedResource): class NotificationsList(AuthenticatedResource):
""" Defines the 'notifications' endpoint """ """ Defines the 'notifications' endpoint """
def __init__(self): def __init__(self):