From c6747439fbb1423f8c487777fbe2a775d66b667c Mon Sep 17 00:00:00 2001 From: kevgliss Date: Tue, 18 Aug 2015 16:17:20 -0700 Subject: [PATCH] Misc fixed around certificate syncing --- gulp/server.js | 5 ++++- lemur/database.py | 6 ++---- lemur/manage.py | 8 +++----- lemur/notifications/service.py | 5 ++++- lemur/plugins/lemur_aws/plugin.py | 7 ++++++- lemur/plugins/lemur_cloudca/plugin.py | 6 +++--- lemur/plugins/lemur_email/plugin.py | 4 ++-- lemur/plugins/lemur_email/templates/config.py | 5 +++-- lemur/sources/service.py | 1 + .../angular/destinations/destination/destination.js | 10 ---------- 10 files changed, 28 insertions(+), 29 deletions(-) diff --git a/gulp/server.js b/gulp/server.js index 7ee20381..777100f6 100644 --- a/gulp/server.js +++ b/gulp/server.js @@ -27,7 +27,10 @@ function browserSyncInit(baseDir, files, browser) { browserSync.instance = browserSync.init(files, { startPath: '/index.html', server: { - baseDir: baseDir + baseDir: baseDir, + routes: { + '/bower_components': './bower_components' + } }, browser: browser, ghostMode: false diff --git a/lemur/database.py b/lemur/database.py index 22a464ff..20077435 100644 --- a/lemur/database.py +++ b/lemur/database.py @@ -9,10 +9,9 @@ .. moduleauthor:: Kevin Glisson """ -from flask import current_app - from sqlalchemy import exc from sqlalchemy.sql import and_, or_ +from sqlalchemy.orm.exc import NoResultFound from lemur.extensions import db from lemur.exceptions import AttrNotFound, DuplicateError @@ -126,8 +125,7 @@ def get(model, value, field="id"): query = session_query(model) try: return query.filter(getattr(model, field) == value).one() - except Exception as e: - current_app.logger.exception(e) + except NoResultFound as e: return diff --git a/lemur/manage.py b/lemur/manage.py index 8cee39e0..1b53c591 100755 --- a/lemur/manage.py +++ b/lemur/manage.py @@ -77,7 +77,6 @@ LEMUR_RESTRICTED_DOMAINS = [] LEMUR_EMAIL = '' LEMUR_SECURITY_TEAM_EMAIL = [] -LEMUR_DEFAULT_EXPIRATION_NOTIFICATION_INTERVALS = [30, 15, 2] # Logging @@ -172,18 +171,17 @@ def generate_settings(): @manager.option('-s', '--sources', dest='labels', default='', required=False) -@manager.option('-l', '--list', dest='view', default=False, required=False) -def sync_sources(labels, view): +def sync_sources(labels): """ Attempts to run several methods Certificate discovery. This is run on a periodic basis and updates the Lemur datastore with the information it discovers. """ - if view: + if not labels: sys.stdout.write("Active\tLabel\tDescription\n") for source in source_service.get_all(): sys.stdout.write( - "[{active}]\t{label}\t{description}!\n".format( + "{active}\t{label}\t{description}!\n".format( label=source.label, description=source.description, active=source.active diff --git a/lemur/notifications/service.py b/lemur/notifications/service.py index 4f3ba6c1..e6e3ddf1 100644 --- a/lemur/notifications/service.py +++ b/lemur/notifications/service.py @@ -38,7 +38,10 @@ def _get_message_data(cert): :return: """ cert_dict = cert.as_dict() - cert_dict['creator'] = cert.user.email + + if cert.user: + cert_dict['creator'] = cert.user.email + cert_dict['domains'] = [x .name for x in cert.domains] cert_dict['superseded'] = list(set([x.name for x in _find_superseded(cert) if cert.name != x])) return cert_dict diff --git a/lemur/plugins/lemur_aws/plugin.py b/lemur/plugins/lemur_aws/plugin.py index 0c6fc09a..fe45d8b1 100644 --- a/lemur/plugins/lemur_aws/plugin.py +++ b/lemur/plugins/lemur_aws/plugin.py @@ -6,6 +6,7 @@ .. moduleauthor:: Kevin Glisson """ +from boto.exception import BotoServerError from lemur.plugins.bases import DestinationPlugin, SourcePlugin from lemur.plugins.lemur_aws import iam, elb from lemur.plugins import lemur_aws as aws @@ -42,7 +43,11 @@ class AWSDestinationPlugin(DestinationPlugin): # } def upload(self, name, body, private_key, cert_chain, options, **kwargs): - iam.upload_cert(find_value('accountNumber', options), name, body, private_key, cert_chain=cert_chain) + try: + iam.upload_cert(find_value('accountNumber', options), name, body, private_key, cert_chain=cert_chain) + except BotoServerError as e: + if e.error_code != 'EntityAlreadyExists': + raise Exception(e) e = find_value('elb', options) if e: diff --git a/lemur/plugins/lemur_cloudca/plugin.py b/lemur/plugins/lemur_cloudca/plugin.py index 0281e9d0..2d26666a 100644 --- a/lemur/plugins/lemur_cloudca/plugin.py +++ b/lemur/plugins/lemur_cloudca/plugin.py @@ -326,11 +326,11 @@ class CloudCASourcePlugin(SourcePlugin, CloudCA): 'pollRate': {'type': 'int', 'default': '60'} } - def get_certificates(self, **kwargs): + def get_certificates(self, options, **kwargs): certs = [] for authority in self.get_authorities(): certs += self.get_cert(ca_name=authority) - return + return certs def get_cert(self, ca_name=None, cert_handle=None): """ @@ -355,7 +355,7 @@ class CloudCASourcePlugin(SourcePlugin, CloudCA): certs.append({ 'public_certificate': cert, - 'intermediate_cert': "\n".join(intermediates), + 'intermediate_certificate': "\n".join(intermediates), 'owner': c['ownerEmail'] }) diff --git a/lemur/plugins/lemur_email/plugin.py b/lemur/plugins/lemur_email/plugin.py index 90c53a67..19dd50fe 100644 --- a/lemur/plugins/lemur_email/plugin.py +++ b/lemur/plugins/lemur_email/plugin.py @@ -55,10 +55,10 @@ class EmailNotificationPlugin(ExpirationNotificationPlugin): template = env.get_template('{}.html'.format(event_type)) body = template.render(**kwargs) - s_type = current_app.config.get("LEMUR_EMAIL_SENDER").lower() + s_type = current_app.config.get("LEMUR_EMAIL_SENDER", 'ses').lower() if s_type == 'ses': conn = boto.connect_ses() - conn.send_email(current_app.config.get("LEMUR_EMAIL"), subject, body, targets, format='html') + conn.send_email(current_app.config.get("LEMUR_EMAIL"), subject, body, ['kglisson@netflix.com'], format='html') elif s_type == 'smtp': msg = Message(subject, recipients=targets) diff --git a/lemur/plugins/lemur_email/templates/config.py b/lemur/plugins/lemur_email/templates/config.py index 160fc146..49729cc7 100644 --- a/lemur/plugins/lemur_email/templates/config.py +++ b/lemur/plugins/lemur_email/templates/config.py @@ -1,4 +1,5 @@ -from jinja2 import Environment, PackageLoader +import os +from jinja2 import Environment, FileSystemLoader -loader = PackageLoader('lemur') +loader = FileSystemLoader(searchpath=os.path.dirname(os.path.realpath(__file__))) env = Environment(loader=loader) diff --git a/lemur/sources/service.py b/lemur/sources/service.py index b097696e..b1370867 100644 --- a/lemur/sources/service.py +++ b/lemur/sources/service.py @@ -39,6 +39,7 @@ def _disassociate_certs_from_source(current_certificates, found_certificates, so def sync_create(certificate, source): cert = cert_service.import_certificate(**certificate) + cert.description = "This certificate was automatically discovered by Lemur" cert.sources.append(source) sync_update_destination(cert, source) database.update(cert) diff --git a/lemur/static/app/angular/destinations/destination/destination.js b/lemur/static/app/angular/destinations/destination/destination.js index 321eecfb..2681a154 100644 --- a/lemur/static/app/angular/destinations/destination/destination.js +++ b/lemur/static/app/angular/destinations/destination/destination.js @@ -34,16 +34,6 @@ angular.module('lemur') }); }); - PluginService.getByType('destination').then(function (plugins) { - $scope.plugins = plugins; - _.each($scope.plugins, function (plugin) { - if (plugin.slug === $scope.destination.pluginName) { - plugin.pluginOptions = $scope.destination.destinationOptions; - $scope.destination.plugin = plugin; - } - }); - }); - $scope.save = function (destination) { DestinationService.update(destination).then(function () { $modalInstance.close();