diff --git a/gulp/karma.conf.js b/gulp/karma.conf.js index 48c2f9ec..b9777c7a 100644 --- a/gulp/karma.conf.js +++ b/gulp/karma.conf.js @@ -24,4 +24,4 @@ module.exports = function (config) { //... } }); -} \ No newline at end of file +}; \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index a9da3d3c..1f79f902 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -27,5 +27,5 @@ gulp.task('default', function () { console.log(c.green + '-------------------------------------------' + c.reset); console.log(Object.keys(gulp.tasks).sort().join('\n')); console.log(''); - return; + }); diff --git a/lemur/__init__.py b/lemur/__init__.py index 59d8fff1..85bb846f 100644 --- a/lemur/__init__.py +++ b/lemur/__init__.py @@ -36,6 +36,7 @@ LEMUR_BLUEPRINTS = ( plugins_bp, ) + def create_app(config=None): app = factory.create_app(app_name=__name__, blueprints=LEMUR_BLUEPRINTS, config=config) configure_hook(app) @@ -61,4 +62,3 @@ def configure_hook(app): response = {'message': 'You are not allow to access this resource'} response.status_code = 403 return response - diff --git a/lemur/analyze/service.py b/lemur/analyze/service.py index 7b17d3db..8c384306 100644 --- a/lemur/analyze/service.py +++ b/lemur/analyze/service.py @@ -4,7 +4,7 @@ :license: Apache, see LICENSE for more details. .. moduleauthor:: Kevin Glisson """ -#def analyze(endpoints, truststores): +# def analyze(endpoints, truststores): # results = {"headings": ["Endpoint"], # "results": [], # "time": datetime.now().strftime("#Y%m%d %H:%M:%S")} @@ -37,7 +37,9 @@ # log.debug(e) # if 'hostname' in str(e): # tests.append('pass') -# result['details'].append("{}: This test passed ssl negotiation but failed hostname verification becuase the hostname is not included in the certificate".format(region)) +# result['details'].append( +# "{}: This test passed ssl negotiation but failed hostname verification because \ +# the hostname is not included in the certificate".format(region)) # elif 'certificate verify failed' in str(e): # tests.append('fail') # result['details'].append("{}: This test failed to verify the SSL certificate".format(region)) diff --git a/lemur/auth/service.py b/lemur/auth/service.py index 6386f6d0..807404b9 100644 --- a/lemur/auth/service.py +++ b/lemur/auth/service.py @@ -28,7 +28,7 @@ from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicNumbers from lemur.users import service as user_service from lemur.auth.permissions import CertificateOwnerNeed, CertificateCreatorNeed, \ - AuthorityCreatorNeed, AuthorityOwnerNeed, ViewRoleCredentialsNeed + AuthorityCreatorNeed, ViewRoleCredentialsNeed def base64url_decode(data): @@ -143,7 +143,6 @@ def fetch_token_header(token): raise jwt.DecodeError('Invalid header padding') - @identity_loaded.connect def on_identity_loaded(sender, identity): """ @@ -187,5 +186,3 @@ class AuthenticatedResource(Resource): def __init__(self): super(AuthenticatedResource, self).__init__() - - diff --git a/lemur/auth/views.py b/lemur/auth/views.py index fd7255ca..796b42d5 100644 --- a/lemur/auth/views.py +++ b/lemur/auth/views.py @@ -9,16 +9,15 @@ import jwt import base64 import requests -from flask import g, Blueprint, current_app, abort +from flask import g, Blueprint, current_app from flask.ext.restful import reqparse, Resource, Api from flask.ext.principal import Identity, identity_changed -from lemur.auth.permissions import admin_permission from lemur.users import service as user_service from lemur.roles import service as role_service from lemur.certificates import service as cert_service -from lemur.auth.service import AuthenticatedResource, create_token, fetch_token_header, get_rsa_public_key +from lemur.auth.service import create_token, fetch_token_header, get_rsa_public_key mod = Blueprint('auth', __name__) @@ -222,7 +221,7 @@ class Ping(Resource): profile['email'], profile['email'], True, - profile.get('thumbnailPhotoUrl'), # incase profile isn't google+ enabled + profile.get('thumbnailPhotoUrl'), # Encase profile isn't google+ enabled roles ) @@ -234,5 +233,3 @@ class Ping(Resource): api.add_resource(Login, '/auth/login', endpoint='login') api.add_resource(Ping, '/auth/ping', endpoint='ping') - - diff --git a/lemur/authorities/service.py b/lemur/authorities/service.py index 25c42e8c..9c0abb95 100644 --- a/lemur/authorities/service.py +++ b/lemur/authorities/service.py @@ -19,6 +19,7 @@ import lemur.certificates.service as cert_service from lemur.plugins.base import plugins + def update(authority_id, active=None, roles=None): """ Update a an authority with new values. @@ -30,7 +31,7 @@ def update(authority_id, active=None, roles=None): """ authority = get(authority_id) if roles: - authority = database.update_list(authority, 'roles', Role, roles) + authority = database.update_list(authority, 'roles', Role, roles) if active: authority.active = active @@ -62,9 +63,9 @@ def create(kwargs): for r in issuer_roles: role = role_service.create( r['name'], - password=r['password'], - description="{0} auto generated role".format(kwargs.get('pluginName')), - username=r['username']) + password=r['password'], + description="{0} auto generated role".format(kwargs.get('pluginName')), + username=r['username']) # the user creating the authority should be able to administer it if role.username == 'admin': @@ -132,7 +133,7 @@ def get_authority_role(ca_name): """ if g.current_user.is_admin: authority = get_by_name(ca_name) - #TODO we should pick admin ca roles for admin + # TODO we should pick admin ca roles for admin return authority.roles[0] else: for role in g.current_user.roles: @@ -156,7 +157,7 @@ def render(args): if filt: terms = filt.split(';') - if 'active' in filt: # this is really weird but strcmp seems to not work here?? + if 'active' in filt: # this is really weird but strcmp seems to not work here?? query = query.filter(Authority.active == terms[1]) else: query = database.filter(query, Authority, terms) diff --git a/lemur/authorities/views.py b/lemur/authorities/views.py index cb1797ed..f449a837 100644 --- a/lemur/authorities/views.py +++ b/lemur/authorities/views.py @@ -183,8 +183,8 @@ class AuthoritiesList(AuthenticatedResource): self.reqparse.add_argument('caDescription', type=str, location='json', required=False) self.reqparse.add_argument('ownerEmail', type=str, location='json', required=True) self.reqparse.add_argument('caDN', type=dict, location='json', required=False) - self.reqparse.add_argument('validityStart', type=str, location='json', required=False) # TODO validate - self.reqparse.add_argument('validityEnd', type=str, location='json', required=False) # TODO validate + self.reqparse.add_argument('validityStart', type=str, location='json', required=False) # TODO validate + self.reqparse.add_argument('validityEnd', type=str, location='json', required=False) # TODO validate self.reqparse.add_argument('extensions', type=dict, location='json', required=False) self.reqparse.add_argument('pluginName', type=str, location='json', required=True) self.reqparse.add_argument('caType', type=str, location='json', required=False) diff --git a/lemur/certificates/exceptions.py b/lemur/certificates/exceptions.py index a9ed6e0a..83437704 100644 --- a/lemur/certificates/exceptions.py +++ b/lemur/certificates/exceptions.py @@ -53,6 +53,7 @@ class UnableToCreateCSR(LemurException): def __str__(self): return repr(self.data['message']) + class UnableToCreatePrivateKey(LemurException): def __init__(self): self.code = 500 @@ -63,6 +64,7 @@ class UnableToCreatePrivateKey(LemurException): def __str__(self): return repr(self.data['message']) + class MissingFiles(LemurException): def __init__(self, path): self.code = 500 @@ -84,4 +86,3 @@ class NoPersistanceFound(LemurException): def __str__(self): return repr(self.data['message']) - diff --git a/lemur/certificates/models.py b/lemur/certificates/models.py index 10e0900d..bfe03d74 100644 --- a/lemur/certificates/models.py +++ b/lemur/certificates/models.py @@ -21,7 +21,7 @@ from lemur.database import db from lemur.domains.models import Domain -from lemur.constants import SAN_NAMING_TEMPLATE, DEFAULT_NAMING_TEMPLATE, NONSTANDARD_NAMING_TEMPLATE +from lemur.constants import SAN_NAMING_TEMPLATE, DEFAULT_NAMING_TEMPLATE from lemur.models import certificate_associations, certificate_destination_associations @@ -110,6 +110,7 @@ def cert_is_san(cert): if len(cert_get_domains(cert)) > 1: return True + def cert_is_wildcard(cert): """ Determines if certificate is a wildcard certificate. @@ -197,8 +198,8 @@ class Certificate(db.Model): owner = Column(String(128)) body = Column(Text()) private_key = Column(EncryptedType(String, os.environ.get('LEMUR_ENCRYPTION_KEY'))) - challenge = Column(EncryptedType(String, os.environ.get('LEMUR_ENCRYPTION_KEY'))) # TODO deprecate - csr_config = Column(Text()) # TODO deprecate + challenge = Column(EncryptedType(String, os.environ.get('LEMUR_ENCRYPTION_KEY'))) # TODO deprecate + csr_config = Column(Text()) # TODO deprecate status = Column(String(128)) deleted = Column(Boolean, index=True) name = Column(String(128)) @@ -266,4 +267,3 @@ class Certificate(db.Model): def as_dict(self): return {c.name: getattr(self, c.name) for c in self.__table__.columns} - diff --git a/lemur/certificates/service.py b/lemur/certificates/service.py index b89cf159..75159189 100644 --- a/lemur/certificates/service.py +++ b/lemur/certificates/service.py @@ -27,7 +27,6 @@ from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.primitives.asymmetric import rsa - def get(cert_id): """ Retrieves certificate by it's ID. @@ -106,7 +105,7 @@ def mint(issuer_options): csr, private_key = create_csr(issuer_options) - issuer_options['challenge'] = create_challenge() + issuer_options['challenge'] = create_challenge() # TODO deprecate issuer_options['creator'] = g.user.email cert_body, cert_chain = issuer.create_certificate(csr, issuer_options) @@ -212,8 +211,8 @@ def render(args): time_range = args.pop('time_range') destination_id = args.pop('destination_id') show = args.pop('show') - owner = args.pop('owner') - creator = args.pop('creator') # TODO we should enabling filtering by owner + # owner = args.pop('owner') + # creator = args.pop('creator') # TODO we should enabling filtering by owner filt = args.pop('filter') @@ -235,7 +234,7 @@ def render(args): if 'destination' in terms: query = query.filter(Certificate.destinations.any(Destination.id == terms[1])) - elif 'active' in filt: # this is really weird but strcmp seems to not work here?? + elif 'active' in filt: # this is really weird but strcmp seems to not work here?? query = query.filter(Certificate.active == terms[1]) else: query = database.filter(query, Certificate, terms) @@ -288,7 +287,7 @@ def create_csr(csr_config): x509.BasicConstraints(ca=False, path_length=None), critical=True, ) - #for k, v in csr_config.get('extensions', {}).items(): + # for k, v in csr_config.get('extensions', {}).items(): # if k == 'subAltNames': # builder = builder.add_extension( # x509.SubjectAlternativeName([x509.DNSName(n) for n in v]), critical=True, @@ -354,14 +353,16 @@ def create_csr(csr_config): return csr, pem + +# TODO deprecate def create_challenge(): """ Create a random and strongish csr challenge. """ - challenge = ''.join(random.choice(string.ascii_uppercase) for x in range(6)) - challenge += ''.join(random.choice("~!@#$%^&*()_+") for x in range(6)) + challenge = ''.join(random.choice(string.ascii_uppercase) for x in range(6)) # noqa + challenge += ''.join(random.choice("~!@#$%^&*()_+") for x in range(6)) # noqa challenge += ''.join(random.choice(string.ascii_lowercase) for x in range(6)) - challenge += ''.join(random.choice(string.digits) for x in range(6)) + challenge += ''.join(random.choice(string.digits) for x in range(6)) # noqa return challenge @@ -405,5 +406,3 @@ def stats(**kwargs): values.append(count) return {'labels': keys, 'values': values} - - diff --git a/lemur/certificates/sync.py b/lemur/certificates/sync.py index a3ec0d2f..b91af6b1 100644 --- a/lemur/certificates/sync.py +++ b/lemur/certificates/sync.py @@ -21,6 +21,7 @@ from lemur.certificates import service as cert_service from lemur.plugins.base import plugins from lemur.plugins.bases.source import SourcePlugin + def sync(): for plugin in plugins: new = 0 @@ -42,5 +43,4 @@ def sync(): # TODO associated cert with source # TODO update cert if found from different source - # TODO dissassociate source if missing - + # TODO disassociate source if missing diff --git a/lemur/certificates/verify.py b/lemur/certificates/verify.py index 4f3b0332..1e0febec 100644 --- a/lemur/certificates/verify.py +++ b/lemur/certificates/verify.py @@ -30,7 +30,7 @@ def ocsp_verify(cert_path, issuer_chain_path): url, err = p1.communicate() p2 = subprocess.Popen(['openssl', 'ocsp', '-issuer', issuer_chain_path, - '-cert', cert_path, "-url", url.strip()], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + '-cert', cert_path, "-url", url.strip()], stdout=subprocess.PIPE, stderr=subprocess.PIPE) message, err = p2.communicate() if 'error' in message or 'Error' in message: @@ -132,4 +132,4 @@ def verify_string(cert_string, issuer_string): def remove_tmp_file(file_path): - os.remove(file_path) \ No newline at end of file + os.remove(file_path) diff --git a/lemur/certificates/views.py b/lemur/certificates/views.py index f94011ce..df5f3737 100644 --- a/lemur/certificates/views.py +++ b/lemur/certificates/views.py @@ -51,7 +51,7 @@ def valid_authority(authority_options): """ Defends against invalid authorities - :param authority_name: + :param authority_options: :return: :raise ValueError: """ name = authority_options['name'] @@ -76,7 +76,7 @@ def pem_str(value, name): """ try: x509.load_pem_x509_certificate(str(value), default_backend()) - except Exception as e: + except Exception: raise ValueError("The parameter '{0}' needs to be a valid PEM string".format(name)) return value @@ -91,12 +91,11 @@ def private_key_str(value, name): """ try: serialization.load_pem_private_key(str(value), None, backend=default_backend()) - except Exception as e: + except Exception: raise ValueError("The parameter '{0}' needs to be a valid RSA private key".format(name)) return value - class CertificatesList(AuthenticatedResource): """ Defines the 'certificates' endpoint """ def __init__(self): @@ -274,8 +273,8 @@ class CertificatesList(AuthenticatedResource): self.reqparse.add_argument('destinations', type=list, default=[], location='json') self.reqparse.add_argument('elbs', type=list, location='json') self.reqparse.add_argument('owner', type=str, location='json') - self.reqparse.add_argument('validityStart', type=str, location='json') # parse date - self.reqparse.add_argument('validityEnd', type=str, location='json') # parse date + self.reqparse.add_argument('validityStart', type=str, location='json') # TODO validate + self.reqparse.add_argument('validityEnd', type=str, location='json') # TODO validate self.reqparse.add_argument('authority', type=valid_authority, location='json') self.reqparse.add_argument('description', type=str, location='json') self.reqparse.add_argument('country', type=str, location='json') diff --git a/lemur/common/health.py b/lemur/common/health.py index 11306de2..e5b6d509 100644 --- a/lemur/common/health.py +++ b/lemur/common/health.py @@ -10,6 +10,7 @@ from flask import Blueprint mod = Blueprint('healthCheck', __name__) + @mod.route('/healthcheck') def health(): - return 'ok' \ No newline at end of file + return 'ok' diff --git a/lemur/common/managers.py b/lemur/common/managers.py index 43079f46..4e693677 100644 --- a/lemur/common/managers.py +++ b/lemur/common/managers.py @@ -8,6 +8,7 @@ """ from flask import current_app + # inspired by https://github.com/getsentry/sentry class InstanceManager(object): def __init__(self, class_list=None, instances=True): @@ -61,4 +62,4 @@ class InstanceManager(object): continue self.cache = results - return results \ No newline at end of file + return results diff --git a/lemur/common/services/aws/ses.py b/lemur/common/services/aws/ses.py index 071437ca..8e5aeb4f 100644 --- a/lemur/common/services/aws/ses.py +++ b/lemur/common/services/aws/ses.py @@ -6,8 +6,8 @@ .. moduleauthor:: Kevin Glisson """ -from flask import current_app import boto.ses +from flask import current_app from lemur.templates.config import env @@ -22,8 +22,7 @@ def send(subject, data, email_type, recipients): :param recipients: """ conn = boto.connect_ses() - #jinja template depending on type + # jinja template depending on type template = env.get_template('{}.html'.format(email_type)) body = template.render(**data) conn.send_email(current_app.config.get("LEMUR_EMAIL"), subject, body, recipients, format='html') - diff --git a/lemur/common/utils.py b/lemur/common/utils.py index b0f1ded7..e776e513 100644 --- a/lemur/common/utils.py +++ b/lemur/common/utils.py @@ -12,7 +12,6 @@ from flask import current_app from flask.ext.restful import marshal from flask.ext.restful.reqparse import RequestParser - from flask.ext.sqlalchemy import Pagination diff --git a/lemur/constants.py b/lemur/constants.py index 15d4bdee..3708bbec 100644 --- a/lemur/constants.py +++ b/lemur/constants.py @@ -6,5 +6,3 @@ SAN_NAMING_TEMPLATE = "SAN-{subject}-{issuer}-{not_before}-{not_after}" DEFAULT_NAMING_TEMPLATE = "{subject}-{issuer}-{not_before}-{not_after}" NONSTANDARD_NAMING_TEMPLATE = "{issuer}-{not_before}-{not_after}" - - diff --git a/lemur/database.py b/lemur/database.py index fe591ced..6de3d964 100644 --- a/lemur/database.py +++ b/lemur/database.py @@ -9,13 +9,11 @@ .. moduleauthor:: Kevin Glisson """ -from flask import current_app - from sqlalchemy import exc from sqlalchemy.sql import and_, or_ from lemur.extensions import db -from lemur.exceptions import AttrNotFound, IntegrityError, DuplicateError +from lemur.exceptions import AttrNotFound, DuplicateError def filter_none(kwargs): @@ -126,7 +124,7 @@ def get(model, value, field="id"): query = session_query(model) try: return query.filter(getattr(model, field) == value).one() - except: + except Exception: return @@ -209,7 +207,7 @@ def sort(query, model, field, direction): direction = getattr(field, direction) query = query.order_by(direction()) return query - except AttributeError as e: + except AttributeError: raise AttrNotFound(field) @@ -274,6 +272,3 @@ def sort_and_page(query, model, args): query = sort(query, model, sort_by, sort_dir) return paginate(query, page, count) - - - diff --git a/lemur/decorators.py b/lemur/decorators.py index d1cb695b..bb37dcf4 100644 --- a/lemur/decorators.py +++ b/lemur/decorators.py @@ -9,6 +9,7 @@ from flask import make_response, request, current_app from functools import update_wrapper +# this is only used for dev def crossdomain(origin=None, methods=None, headers=None, max_age=21600, attach_to_all=True, automatic_options=True): @@ -44,12 +45,10 @@ def crossdomain(origin=None, methods=None, headers=None, h['Access-Control-Allow-Origin'] = origin h['Access-Control-Allow-Methods'] = get_methods() h['Access-Control-Max-Age'] = str(max_age) - #if headers is not None: - h['Access-Control-Allow-Headers'] = "Origin, X-Requested-With, Content-Type, Accept, Authorization " # headers + h['Access-Control-Allow-Headers'] = "Origin, X-Requested-With, Content-Type, Accept, Authorization " h['Access-Control-Allow-Credentials'] = 'true' return resp f.provide_automatic_options = False return update_wrapper(wrapped_function, f) return decorator - diff --git a/lemur/default.conf.py b/lemur/default.conf.py index 1ca0cc72..c5f760fc 100644 --- a/lemur/default.conf.py +++ b/lemur/default.conf.py @@ -7,18 +7,13 @@ ADMINS = frozenset(['']) THREADS_PER_PAGE = 8 -############# -## General ## -############# +# General # These will need to be set to `True` if you are developing locally CORS = False debug = False -############# -## Logging ## -############# +# Logging LOG_LEVEL = "DEBUG" LOG_FILE = "lemur.log" - diff --git a/lemur/destinations/models.py b/lemur/destinations/models.py index 20f910bc..c4cc8a76 100644 --- a/lemur/destinations/models.py +++ b/lemur/destinations/models.py @@ -12,6 +12,7 @@ from lemur.database import db from lemur.plugins.base import plugins + class Destination(db.Model): __tablename__ = 'destinations' id = Column(Integer, primary_key=True) diff --git a/lemur/destinations/service.py b/lemur/destinations/service.py index d43d64d0..e98e4982 100644 --- a/lemur/destinations/service.py +++ b/lemur/destinations/service.py @@ -107,4 +107,3 @@ def render(args): query = database.sort(query, Destination, sort_by, sort_dir) return database.paginate(query, page, count) - diff --git a/lemur/destinations/views.py b/lemur/destinations/views.py index 10c195ca..5d336e4a 100644 --- a/lemur/destinations/views.py +++ b/lemur/destinations/views.py @@ -229,7 +229,6 @@ class Destinations(AuthenticatedResource): return {'result': True} - class CertificateDestinations(AuthenticatedResource): """ Defines the 'certificate/', endpoint='account') -api.add_resource(CertificateDestinations, '/certificates//destinations', endpoint='certificateDestinations') - +api.add_resource(CertificateDestinations, '/certificates//destinations', + endpoint='certificateDestinations') diff --git a/lemur/domains/models.py b/lemur/domains/models.py index 14f52a3d..0bb62f65 100644 --- a/lemur/domains/models.py +++ b/lemur/domains/models.py @@ -24,4 +24,3 @@ class Domain(db.Model): blob = self.as_dict() blob['certificates'] = [x.id for x in self.certificate] return blob - diff --git a/lemur/domains/service.py b/lemur/domains/service.py index f9452bb3..b1e2d559 100644 --- a/lemur/domains/service.py +++ b/lemur/domains/service.py @@ -61,4 +61,3 @@ def render(args): query = database.sort(query, Domain, sort_by, sort_dir) return database.paginate(query, page, count) - diff --git a/lemur/elbs/models.py b/lemur/elbs/models.py index b334df8f..d57a9f1f 100644 --- a/lemur/elbs/models.py +++ b/lemur/elbs/models.py @@ -6,7 +6,7 @@ .. moduleauthor:: Kevin Glisson """ -from sqlalchemy import Column, BigInteger, String, ForeignKey, DateTime, PassiveDefault, func +from sqlalchemy import Column, BigInteger, String, DateTime, PassiveDefault, func from sqlalchemy.orm import relationship from lemur.database import db @@ -16,7 +16,7 @@ from lemur.listeners.models import Listener class ELB(db.Model): __tablename__ = 'elbs' id = Column(BigInteger, primary_key=True) - #account_id = Column(BigInteger, ForeignKey("accounts.id"), index=True) + # account_id = Column(BigInteger, ForeignKey("accounts.id"), index=True) region = Column(String(32)) name = Column(String(128)) vpc_id = Column(String(128)) diff --git a/lemur/elbs/service.py b/lemur/elbs/service.py index 8aa60ccb..d00110bf 100644 --- a/lemur/elbs/service.py +++ b/lemur/elbs/service.py @@ -14,6 +14,7 @@ from lemur import database from lemur.elbs.models import ELB from lemur.listeners.models import Listener + def get_all(account_id, elb_name): """ Retrieves all ELBs in a given account @@ -112,7 +113,7 @@ def stats(**kwargs): if kwargs.get('active') == 'true': query = query.join(ELB.listeners) - query = query.filter(Listener.certificate_id != None) + query = query.filter(Listener.certificate_id != None) # noqa items = query.group_by(attr).all() @@ -121,5 +122,3 @@ def stats(**kwargs): if key: results.append({"key": key, "y": count}) return results - - diff --git a/lemur/elbs/sync.py b/lemur/elbs/sync.py deleted file mode 100644 index f3d90ab0..00000000 --- a/lemur/elbs/sync.py +++ /dev/null @@ -1,72 +0,0 @@ - -""" -.. module: lemur.elbs.sync - :platform: Unix - :synopsis: This module attempts to sync with AWS and ensure that all elbs - currently available in AWS are available in Lemur as well - - :copyright: (c) 2015 by Netflix Inc., see AUTHORS for more - :license: Apache, see LICENSE for more details. -.. moduleauthor:: Kevin Glisson - -""" - -from flask import current_app -#from lemur.accounts import service as account_service -from lemur.elbs import service as elb_service -#from lemur.common.services.aws.elb import get_all_elbs, get_all_regions - - -def create_new(known, aws, account): - new = 0 - for elb in aws: - for n in known: - if elb.name == n.name: - break - else: - new += 1 - current_app.logger.debug("Creating {0}".format(elb.name)) - try: - elb_service.create(account, elb) - except AttributeError as e: - current_app.logger.exception(e) - return new - - -def remove_missing(known, aws): - deleted = 0 - for ke in known: - for elb in aws: - if elb.name == ke.name: - break - else: - deleted += 1 - current_app.logger.debug("Deleting {0}".format(ke.name)) - elb_service.delete(ke.id) - return deleted - - -def sync_all_elbs(): - for account in account_service.get_all(): - regions = get_all_regions() - for region in regions: - current_app.logger.info("Importing ELBs from '{0}/{1}/{2}'... ".format(account.account_number, account.label, region)) - try: - aws_elbs = get_all_elbs(account.account_number, region) - except Exception as e: - current_app.logger.error("Failed to get ELBS from '{0}/{1}/{2}' reason: {3}".format( - account.label, account.account_number, region, e.message) - ) - continue - - known_elbs = elb_service.get_by_region_and_account(region, account.id) - - new_elbs = create_new(known_elbs, aws_elbs, account) - current_app.logger.info( - "Created {0} new ELBs in '{1}/{2}/{3}'...".format( - new_elbs, account.account_number, account.label, region)) - - deleted_elbs = remove_missing(known_elbs, aws_elbs) - current_app.logger.info( - "Deleted {0} missing ELBs from '{1}/{2}/{3}'...".format( - deleted_elbs, account.account_number, account.label, region)) diff --git a/lemur/extensions.py b/lemur/extensions.py index 07101c4d..8c945f80 100644 --- a/lemur/extensions.py +++ b/lemur/extensions.py @@ -3,7 +3,6 @@ :copyright: (c) 2015 by Netflix Inc., see AUTHORS for more :license: Apache, see LICENSE for more details. """ - from flask.ext.sqlalchemy import SQLAlchemy db = SQLAlchemy() @@ -15,4 +14,3 @@ bcrypt = Bcrypt() from flask.ext.principal import Principal principal = Principal() - diff --git a/lemur/factory.py b/lemur/factory.py index a606700a..f895a136 100644 --- a/lemur/factory.py +++ b/lemur/factory.py @@ -19,7 +19,6 @@ from logging.handlers import RotatingFileHandler from flask import Flask from lemur.common.health import mod as health -from lemur.exceptions import NoEncryptionKeyFound from lemur.extensions import db, migrate, principal @@ -161,7 +160,6 @@ def install_plugins(app): try: plugin = ep.load() except Exception: - import sys import traceback app.logger.error("Failed to load plugin %r:\n%s\n" % (ep.name, traceback.format_exc())) else: diff --git a/lemur/listeners/models.py b/lemur/listeners/models.py index 8f83437d..b72c9b48 100644 --- a/lemur/listeners/models.py +++ b/lemur/listeners/models.py @@ -40,4 +40,3 @@ class Listener(db.Model): blob = self.as_dict() del blob['date_created'] return blob - diff --git a/lemur/listeners/service.py b/lemur/listeners/service.py index 25c19d8e..6f2ae596 100644 --- a/lemur/listeners/service.py +++ b/lemur/listeners/service.py @@ -18,7 +18,7 @@ from lemur.listeners.models import Listener from lemur.elbs import service as elb_service from lemur.certificates import service as certificate_service -#from lemur.common.services.aws.elb import update_listeners, create_new_listeners, delete_listeners +# from lemur.common.services.aws.elb import update_listeners, create_new_listeners, delete_listeners def verify_attachment(certificate_id, elb_account_number): @@ -60,7 +60,7 @@ def create(elb_id, instance_protocol, instance_port, load_balancer_port, load_ba cert = verify_attachment(certificate_id, account_number) listener_tuple = (load_balancer_port, instance_port, load_balancer_protocol, cert.get_art(account_number),) - create_new_listeners(account_number, elb.region, elb.name, [listener_tuple]) + # create_new_listeners(account_number, elb.region, elb.name, [listener_tuple]) return {'message': 'Listener has been created'} @@ -98,7 +98,7 @@ def update(listener_id, **kwargs): database.update(listener) listener_tuple = (listener.load_balancer_port, listener.instance_port, listener.load_balancer_protocol, arn,) - update_listeners(account_number, elb.region, elb.name, [listener_tuple], ports) + # update_listeners(account_number, elb.region, elb.name, [listener_tuple], ports) return {'message': 'Listener has been updated'} @@ -106,7 +106,7 @@ def update(listener_id, **kwargs): def delete(listener_id): # first try to delete the listener in aws listener = get(listener_id) - delete_listeners(listener.elb.account.account_number, listener.elb.region, listener.elb.name, [listener.load_balancer_port]) + # delete_listeners(listener.elb.account.account_number, listener.elb.region, listener.elb.name, [listener.load_balancer_port]) # cleanup operation in lemur database.delete(listener) @@ -149,7 +149,7 @@ def stats(**kwargs): query = query.filter(ELB.account_id == kwargs.get('account_id')) if kwargs.get('active') == 'true': - query = query.filter(Listener.certificate_id != None) + query = query.filter(Listener.certificate_id != None) # noqa items = query.group_by(attr).all() results = [] @@ -157,6 +157,3 @@ def stats(**kwargs): if key: results.append({"key": key, "y": count}) return results - - - diff --git a/lemur/manage.py b/lemur/manage.py index e8a623c4..b104f157 100755 --- a/lemur/manage.py +++ b/lemur/manage.py @@ -20,19 +20,18 @@ from lemur.plugins.base import plugins from lemur.certificates.verify import verify_string from lemur.certificates import sync -from lemur.elbs.sync import sync_all_elbs from lemur import create_app # Needed to be imported so that SQLAlchemy create_all can find our models -from lemur.users.models import User -from lemur.roles.models import Role -from lemur.authorities.models import Authority -from lemur.certificates.models import Certificate -from lemur.destinations.models import Destination -from lemur.domains.models import Domain -from lemur.elbs.models import ELB -from lemur.listeners.models import Listener +from lemur.users.models import User # noqa +from lemur.roles.models import Role # noqa +from lemur.authorities.models import Authority # noqa +from lemur.certificates.models import Certificate # noqa +from lemur.destinations.models import Destination # noqa +from lemur.domains.models import Domain # noqa +from lemur.elbs.models import ELB # noqa +from lemur.listeners.models import Listener # noqa manager = Manager(create_app) manager.add_option('-c', '--config', dest='config') @@ -135,6 +134,7 @@ SQLALCHEMY_DATABASE_URI = '' #VERSIGN_EMAIL = '' """ + @MigrateCommand.command def create(): database.db.create_all() @@ -214,7 +214,7 @@ class Sync(Command): sys.stdout.write("[!] Starting to sync with AWS!\n") try: sync.aws() - #sync_all_elbs() + # sync_all_elbs() sys.stdout.write("[+] Finished syncing with AWS!\n") except Exception as e: sys.stdout.write("[-] Syncing with AWS failed!\n") diff --git a/lemur/models.py b/lemur/models.py index 493e1778..f12e49b6 100644 --- a/lemur/models.py +++ b/lemur/models.py @@ -14,17 +14,18 @@ from sqlalchemy import Column, Integer, ForeignKey from lemur.database import db certificate_associations = db.Table('certificate_associations', - Column('domain_id', Integer, ForeignKey('domains.id')), - Column('certificate_id', Integer, ForeignKey('certificates.id')) -) + Column('domain_id', Integer, ForeignKey('domains.id')), + Column('certificate_id', Integer, ForeignKey('certificates.id')) + ) certificate_destination_associations = db.Table('certificate_destination_associations', - Column('destination_id', Integer, ForeignKey('destinations.id', ondelete='cascade')), - Column('certificate_id', Integer, ForeignKey('certificates.id', ondelete='cascade')) -) + Column('destination_id', Integer, + ForeignKey('destinations.id', ondelete='cascade')), + Column('certificate_id', Integer, + ForeignKey('certificates.id', ondelete='cascade')) + ) roles_users = db.Table('roles_users', - Column('user_id', Integer, ForeignKey('users.id')), - Column('role_id', Integer, ForeignKey('roles.id')) -) - + Column('user_id', Integer, ForeignKey('users.id')), + Column('role_id', Integer, ForeignKey('roles.id')) + ) diff --git a/lemur/notifications.py b/lemur/notifications.py index 09bcfec7..055b6b42 100644 --- a/lemur/notifications.py +++ b/lemur/notifications.py @@ -58,7 +58,7 @@ def _find_superseded(domains): current_app.logger.info("Trying to resolve {0}".format(domain.name)) query = query.filter(Certificate.domains.any(Domain.name.in_([x.name for x in domains]))) - query = query.filter(Certificate.active == True) + query = query.filter(Certificate.active == True) # noqa query = query.filter(Certificate.not_after >= arrow.utcnow().format('YYYY-MM-DD')) ss_list.extend(query.all()) diff --git a/lemur/plugins/__init__.py b/lemur/plugins/__init__.py index d2656990..16450064 100644 --- a/lemur/plugins/__init__.py +++ b/lemur/plugins/__init__.py @@ -1,4 +1,4 @@ from __future__ import absolute_import -from lemur.plugins.base import * # NOQA -from lemur.plugins.bases import * # NOQA +from lemur.plugins.base import * # noqa +from lemur.plugins.bases import * # noqa diff --git a/lemur/plugins/base/__init__.py b/lemur/plugins/base/__init__.py index 7091b27b..107cbcf4 100644 --- a/lemur/plugins/base/__init__.py +++ b/lemur/plugins/base/__init__.py @@ -9,7 +9,7 @@ from __future__ import absolute_import, print_function from lemur.plugins.base.manager import PluginManager -from lemur.plugins.base.v1 import * # NOQA +from lemur.plugins.base.v1 import * # noqa plugins = PluginManager() register = plugins.register diff --git a/lemur/plugins/base/manager.py b/lemur/plugins/base/manager.py index 0ec270d0..12556e7d 100644 --- a/lemur/plugins/base/manager.py +++ b/lemur/plugins/base/manager.py @@ -8,6 +8,7 @@ from flask import current_app from lemur.common.managers import InstanceManager + # inspired by https://github.com/getsentry/sentry class PluginManager(InstanceManager): def __iter__(self): @@ -57,4 +58,3 @@ class PluginManager(InstanceManager): def unregister(self, cls): self.remove('%s.%s' % (cls.__module__, cls.__name__)) return cls - diff --git a/lemur/plugins/base/v1.py b/lemur/plugins/base/v1.py index 2055577b..ce378b98 100644 --- a/lemur/plugins/base/v1.py +++ b/lemur/plugins/base/v1.py @@ -8,6 +8,7 @@ """ from threading import local + # stolen from https://github.com/getsentry/sentry/ class PluginMount(type): def __new__(cls, name, bases, attrs): diff --git a/lemur/plugins/bases/__init__.py b/lemur/plugins/bases/__init__.py index 2e501d35..044bb213 100644 --- a/lemur/plugins/bases/__init__.py +++ b/lemur/plugins/bases/__init__.py @@ -1,3 +1,3 @@ -from .destination import DestinationPlugin # NOQA -from .issuer import IssuerPlugin # NOQA -from .source import SourcePlugin \ No newline at end of file +from .destination import DestinationPlugin # noqa +from .issuer import IssuerPlugin # noqa +from .source import SourcePlugin # noqa diff --git a/lemur/plugins/bases/destination.py b/lemur/plugins/bases/destination.py index b3dcef5f..61c908eb 100644 --- a/lemur/plugins/bases/destination.py +++ b/lemur/plugins/bases/destination.py @@ -8,9 +8,9 @@ """ from lemur.plugins.base import Plugin + class DestinationPlugin(Plugin): type = 'destination' def upload(self): raise NotImplemented - diff --git a/lemur/plugins/bases/issuer.py b/lemur/plugins/bases/issuer.py index bfa7dbd6..29f44a97 100644 --- a/lemur/plugins/bases/issuer.py +++ b/lemur/plugins/bases/issuer.py @@ -8,6 +8,7 @@ """ from lemur.plugins.base import Plugin + class IssuerPlugin(Plugin): """ This is the base class from which all of the supported @@ -20,4 +21,3 @@ class IssuerPlugin(Plugin): def create_authority(self): raise NotImplemented - diff --git a/lemur/plugins/bases/source.py b/lemur/plugins/bases/source.py index a706acf2..9ddae1a0 100644 --- a/lemur/plugins/bases/source.py +++ b/lemur/plugins/bases/source.py @@ -8,6 +8,7 @@ """ from lemur.plugins.base import Plugin + class SourcePlugin(Plugin): type = 'source' @@ -16,4 +17,3 @@ class SourcePlugin(Plugin): def get_options(self): return {} - diff --git a/lemur/plugins/lemur_aws/__init__.py b/lemur/plugins/lemur_aws/__init__.py index d29488d2..e572596e 100644 --- a/lemur/plugins/lemur_aws/__init__.py +++ b/lemur/plugins/lemur_aws/__init__.py @@ -2,4 +2,4 @@ try: VERSION = __import__('pkg_resources') \ .get_distribution(__name__).version except Exception, e: - VERSION = 'unknown' \ No newline at end of file + VERSION = 'unknown' diff --git a/lemur/plugins/lemur_aws/elb.py b/lemur/plugins/lemur_aws/elb.py index 1edfd5b4..d71b5013 100644 --- a/lemur/plugins/lemur_aws/elb.py +++ b/lemur/plugins/lemur_aws/elb.py @@ -38,6 +38,7 @@ def is_valid(listener_tuple): return listener_tuple + def get_all_regions(): """ Retrieves all current EC2 regions. @@ -49,6 +50,7 @@ def get_all_regions(): regions.append(r.name) return regions + def get_all_elbs(account_number, region): """ Fetches all elb objects for a given account and region. @@ -74,7 +76,6 @@ def get_all_elbs(account_number, region): # return elbs - def attach_certificate(account_number, region, name, port, certificate_id): """ Attaches a certificate to a listener, throws exception @@ -137,4 +138,3 @@ def delete_listeners(account_number, region, name, ports): :return: """ return assume_service(account_number, 'elb', region).delete_load_balancer_listeners(name, ports) - diff --git a/lemur/plugins/lemur_aws/iam.py b/lemur/plugins/lemur_aws/iam.py index fa8e50e0..63971958 100644 --- a/lemur/plugins/lemur_aws/iam.py +++ b/lemur/plugins/lemur_aws/iam.py @@ -44,7 +44,8 @@ def upload_cert(account_number, cert, private_key, cert_chain=None): :param cert_chain: :return: """ - return assume_service(account_number, 'iam').upload_server_cert(cert.name, str(cert.body), str(private_key), cert_chain=str(cert_chain)) + return assume_service(account_number, 'iam').upload_server_cert(cert.name, str(cert.body), str(private_key), + cert_chain=str(cert_chain)) def delete_cert(account_number, cert): @@ -109,5 +110,3 @@ def digest_aws_cert_response(response): chain = cert['certificate_chain'] return str(body), str(chain), - - diff --git a/lemur/plugins/lemur_aws/plugin.py b/lemur/plugins/lemur_aws/plugin.py index 35800f51..7eec91c9 100644 --- a/lemur/plugins/lemur_aws/plugin.py +++ b/lemur/plugins/lemur_aws/plugin.py @@ -35,11 +35,11 @@ class AWSDestinationPlugin(DestinationPlugin): 'helpMessage': 'Must be a valid AWS account number!', } ] - #'elb': { - # 'name': {'type': 'name'}, - # 'region': {'type': 'str'}, - # 'port': {'type': 'int'} - #} + # 'elb': { + # 'name': {'type': 'name'}, + # 'region': {'type': 'str'}, + # 'port': {'type': 'int'} + # } def upload(self, cert, private_key, cert_chain, options, **kwargs): iam.upload_cert(find_value('accountNumber', options), cert, private_key, cert_chain=cert_chain) diff --git a/lemur/plugins/lemur_aws/sts.py b/lemur/plugins/lemur_aws/sts.py index f53a545b..843cf0f8 100644 --- a/lemur/plugins/lemur_aws/sts.py +++ b/lemur/plugins/lemur_aws/sts.py @@ -25,17 +25,13 @@ def assume_service(account_number, service, region=None): elif service in 'elb': return boto.ec2.elb.connect_to_region( - region, - aws_access_key_id=role.credentials.access_key, - aws_secret_access_key=role.credentials.secret_key, - security_token=role.credentials.session_token) + region, + aws_access_key_id=role.credentials.access_key, + aws_secret_access_key=role.credentials.secret_key, + security_token=role.credentials.session_token) elif service in 'vpc': return boto.connect_vpc( - aws_access_key_id=role.credentials.access_key, - aws_secret_access_key=role.credentials.secret_key, - security_token=role.credentials.session_token) - - - - + aws_access_key_id=role.credentials.access_key, + aws_secret_access_key=role.credentials.secret_key, + security_token=role.credentials.session_token) diff --git a/lemur/plugins/lemur_cloudca/__init__.py b/lemur/plugins/lemur_cloudca/__init__.py index d29488d2..e572596e 100644 --- a/lemur/plugins/lemur_cloudca/__init__.py +++ b/lemur/plugins/lemur_cloudca/__init__.py @@ -2,4 +2,4 @@ try: VERSION = __import__('pkg_resources') \ .get_distribution(__name__).version except Exception, e: - VERSION = 'unknown' \ No newline at end of file + VERSION = 'unknown' diff --git a/lemur/plugins/lemur_cloudca/plugin.py b/lemur/plugins/lemur_cloudca/plugin.py index 68de48d3..229e58a7 100644 --- a/lemur/plugins/lemur_cloudca/plugin.py +++ b/lemur/plugins/lemur_cloudca/plugin.py @@ -23,7 +23,7 @@ from lemur.plugins import lemur_cloudca as cloudca from lemur.authorities import service as authority_service -API_ENDPOINT = '/v1/ca/netflix' # TODO this should be configurable +API_ENDPOINT = '/v1/ca/netflix' # TODO this should be configurable class CloudCAException(LemurException): @@ -72,7 +72,8 @@ def get_default_issuance(options): if not options.get('validityStart') and not options.get('validityEnd'): start = arrow.utcnow() options['validityStart'] = start.floor('second').isoformat() - options['validityEnd'] = start.replace(years=current_app.config.get('CLOUDCA_DEFAULT_VALIDITY')).ceil('second').isoformat() + options['validityEnd'] = start.replace(years=current_app.config.get('CLOUDCA_DEFAULT_VALIDITY'))\ + .ceil('second').isoformat() return options @@ -95,7 +96,8 @@ def convert_date_to_utc_time(date): :return: """ d = arrow.get(date) - return arrow.utcnow().replace(day=d.naive.day).replace(month=d.naive.month).replace(year=d.naive.year).replace(microsecond=0) + return arrow.utcnow().replace(day=d.naive.day).replace(month=d.naive.month).replace(year=d.naive.year)\ + .replace(microsecond=0) def process_response(response): @@ -152,7 +154,9 @@ class CloudCA(object): self.session.cert = current_app.config.get('CLOUDCA_PEM_PATH') self.ca_bundle = current_app.config.get('CLOUDCA_BUNDLE') else: - current_app.logger.warning("No CLOUDCA credentials found, lemur will be unable to request certificates from CLOUDCA") + current_app.logger.warning( + "No CLOUDCA credentials found, lemur will be unable to request certificates from CLOUDCA" + ) super(CloudCA, self).__init__(*args, **kwargs) @@ -203,7 +207,7 @@ class CloudCA(object): for ca in self.get(endpoint)['data']['caList']: try: authorities.append(ca['caName']) - except AttributeError as e: + except AttributeError: current_app.logger.error("No authority has been defined for {}".format(ca['caName'])) return authorities @@ -235,7 +239,8 @@ class CloudCAIssuerPlugin(IssuerPlugin, CloudCA): options['validityStart'] = convert_date_to_utc_time(options['validityStart']).isoformat() options['validityEnd'] = convert_date_to_utc_time(options['validityEnd']).isoformat() - response = self.session.post(self.url + endpoint, data=dumps(remove_none(options)), timeout=10, verify=self.ca_bundle) + response = self.session.post(self.url + endpoint, data=dumps(remove_none(options)), timeout=10, + verify=self.ca_bundle) json = process_response(response) roles = [] @@ -326,7 +331,8 @@ class CloudCASourcePlugin(SourcePlugin, CloudCA): :return: """ endpoint = '{0}/getCert'.format(API_ENDPOINT) - response = self.session.post(self.url + endpoint, data=dumps({'caName': ca_name}), timeout=10, verify=self.ca_bundle) + response = self.session.post(self.url + endpoint, data=dumps({'caName': ca_name}), timeout=10, + verify=self.ca_bundle) raw = process_response(response) certs = [] diff --git a/lemur/plugins/lemur_verisign/__init__.py b/lemur/plugins/lemur_verisign/__init__.py index d29488d2..e572596e 100644 --- a/lemur/plugins/lemur_verisign/__init__.py +++ b/lemur/plugins/lemur_verisign/__init__.py @@ -2,4 +2,4 @@ try: VERSION = __import__('pkg_resources') \ .get_distribution(__name__).version except Exception, e: - VERSION = 'unknown' \ No newline at end of file + VERSION = 'unknown' diff --git a/lemur/plugins/lemur_verisign/constants.py b/lemur/plugins/lemur_verisign/constants.py index 0f90ed98..b7ea6a53 100644 --- a/lemur/plugins/lemur_verisign/constants.py +++ b/lemur/plugins/lemur_verisign/constants.py @@ -55,4 +55,3 @@ F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- """ - diff --git a/lemur/plugins/lemur_verisign/plugin.py b/lemur/plugins/lemur_verisign/plugin.py index eb00907d..ef080e83 100644 --- a/lemur/plugins/lemur_verisign/plugin.py +++ b/lemur/plugins/lemur_verisign/plugin.py @@ -151,4 +151,3 @@ class VerisignIssuerPlugin(IssuerPlugin): url = current_app.config.get("VERISIGN_URL") + '/getTokens' response = self.session.post(url, headers={'content-type': 'application/x-www-form-urlencoded'}) return handle_response(response.content)['Response']['Order'] - diff --git a/lemur/plugins/views.py b/lemur/plugins/views.py index a1b7a000..eb774415 100644 --- a/lemur/plugins/views.py +++ b/lemur/plugins/views.py @@ -137,4 +137,3 @@ class PluginsTypeList(AuthenticatedResource): api.add_resource(PluginsList, '/plugins', endpoint='plugins') api.add_resource(PluginsTypeList, '/plugins/', endpoint='pluginType') - diff --git a/lemur/roles/models.py b/lemur/roles/models.py index 9df2a4fb..08781c6c 100644 --- a/lemur/roles/models.py +++ b/lemur/roles/models.py @@ -36,4 +36,3 @@ class Role(db.Model): def serialize(self): blob = self.as_dict() return blob - diff --git a/lemur/roles/service.py b/lemur/roles/service.py index 92c1011d..4e879143 100644 --- a/lemur/roles/service.py +++ b/lemur/roles/service.py @@ -15,6 +15,7 @@ from lemur import database from lemur.roles.models import Role from lemur.users.models import User + def update(role_id, name, description, users): """ Update a role @@ -122,4 +123,3 @@ def render(args): query = database.sort(query, Role, sort_by, sort_dir) return database.paginate(query, page, count) - diff --git a/lemur/static/app/angular/authentication/services.js b/lemur/static/app/angular/authentication/services.js index 7230a41d..193989e0 100644 --- a/lemur/static/app/angular/authentication/services.js +++ b/lemur/static/app/angular/authentication/services.js @@ -41,7 +41,7 @@ angular.module('lemur') }); } ); - } + }; AuthenticationService.logout = function () { if (!$auth.isAuthenticated()) { diff --git a/lemur/static/app/angular/authorities/view/view.js b/lemur/static/app/angular/authorities/view/view.js index 0208307f..0ee16082 100644 --- a/lemur/static/app/angular/authorities/view/view.js +++ b/lemur/static/app/angular/authorities/view/view.js @@ -35,7 +35,7 @@ angular.module('lemur') $scope.getAuthorityStatus = function () { var def = $q.defer(); - def.resolve([{'title': 'Active', 'id': true}, {'title': 'Inactive', 'id': false}]) + def.resolve([{'title': 'Active', 'id': true}, {'title': 'Inactive', 'id': false}]); return def; }; diff --git a/lemur/static/app/angular/certificates/view/view.js b/lemur/static/app/angular/certificates/view/view.js index 230f9181..3c295f84 100644 --- a/lemur/static/app/angular/certificates/view/view.js +++ b/lemur/static/app/angular/certificates/view/view.js @@ -48,7 +48,7 @@ angular.module('lemur') $scope.getCertificateStatus = function () { var def = $q.defer(); - def.resolve([{'title': 'Active', 'id': true}, {'title': 'Inactive', 'id': false}]) + def.resolve([{'title': 'Active', 'id': true}, {'title': 'Inactive', 'id': false}]); return def; }; diff --git a/lemur/static/app/angular/destinations/destination/destination.js b/lemur/static/app/angular/destinations/destination/destination.js index 15fb2b42..7ef85dd1 100644 --- a/lemur/static/app/angular/destinations/destination/destination.js +++ b/lemur/static/app/angular/destinations/destination/destination.js @@ -32,7 +32,7 @@ angular.module('lemur') DestinationService.update(destination).then(function () { $modalInstance.close(); }); - } + }; $scope.cancel = function () { $modalInstance.dismiss('cancel'); diff --git a/lemur/static/app/angular/users/user/user.js b/lemur/static/app/angular/users/user/user.js index 7a3524f2..99de4d0e 100644 --- a/lemur/static/app/angular/users/user/user.js +++ b/lemur/static/app/angular/users/user/user.js @@ -18,7 +18,7 @@ angular.module('lemur') UserService.update(user).then(function () { $modalInstance.close(); }); - } + }; $scope.cancel = function () { $modalInstance.dismiss('cancel'); diff --git a/lemur/tests/__init__.py b/lemur/tests/__init__.py index c293a1cc..27dc8f42 100644 --- a/lemur/tests/__init__.py +++ b/lemur/tests/__init__.py @@ -1,4 +1,5 @@ import unittest + class LemurTestCase(unittest.TestCase): pass diff --git a/lemur/tests/certs.py b/lemur/tests/certs.py index ce2f123b..d71d2064 100644 --- a/lemur/tests/certs.py +++ b/lemur/tests/certs.py @@ -218,4 +218,4 @@ CSR_CONFIG = """ [alt_names] # Put your SANs here -""" \ No newline at end of file +""" diff --git a/lemur/tests/conftest.py b/lemur/tests/conftest.py index 849a3a7d..de9b3f44 100644 --- a/lemur/tests/conftest.py +++ b/lemur/tests/conftest.py @@ -73,4 +73,3 @@ def session(db, request): @pytest.yield_fixture(scope="function") def client(app, session, client): yield client - diff --git a/lemur/tests/test_accounts.py b/lemur/tests/test_accounts.py index c5dec77e..f91c6525 100644 --- a/lemur/tests/test_accounts.py +++ b/lemur/tests/test_accounts.py @@ -1,5 +1,5 @@ -from lemur.destinations.service import * -from lemur.destinations.views import * +from lemur.destinations.service import * # noqa +from lemur.destinations.views import * # noqa from json import dumps @@ -40,6 +40,7 @@ def test_destination_patch(client): VALID_USER_HEADER_TOKEN = { 'Authorization': 'Basic ' + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MzUyMzMzNjksInN1YiI6MSwiZXhwIjoxNTIxNTQ2OTY5fQ.1qCi0Ip7mzKbjNh0tVd3_eJOrae3rNa_9MCVdA4WtQI'} + def test_auth_destination_get(client): assert client.get(api.url_for(Destinations, destination_id=1), headers=VALID_USER_HEADER_TOKEN).status_code == 200 @@ -63,6 +64,7 @@ def test_auth_destination_patch(client): VALID_ADMIN_HEADER_TOKEN = { 'Authorization': 'Basic ' + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MzUyNTAyMTgsInN1YiI6MiwiZXhwIjoxNTIxNTYzODE4fQ.6mbq4-Ro6K5MmuNiTJBB153RDhlM5LGJBjI7GBKkfqA'} + def test_admin_destination_get(client): assert client.get(api.url_for(Destinations, destination_id=1), headers=VALID_ADMIN_HEADER_TOKEN).status_code == 200 @@ -120,7 +122,7 @@ def test_admin_destinations_get(client): def test_admin_destinations_crud(client): assert client.post(api.url_for(DestinationsList), headers=VALID_ADMIN_HEADER_TOKEN).status_code == 400 data = {'destinationNumber': 111, 'label': 'test', 'comments': 'test'} - resp = client.post(api.url_for(DestinationsList), data=dumps(data), content_type='application/json', headers=VALID_ADMIN_HEADER_TOKEN) + resp = client.post(api.url_for(DestinationsList), data=dumps(data), content_type='application/json', headers=VALID_ADMIN_HEADER_TOKEN) assert resp.status_code == 200 assert client.get(api.url_for(Destinations, destination_id=resp.json['id']), headers=VALID_ADMIN_HEADER_TOKEN).status_code == 200 resp = client.get(api.url_for(DestinationsList), headers=VALID_ADMIN_HEADER_TOKEN) diff --git a/lemur/tests/test_authorities.py b/lemur/tests/test_authorities.py index e66147e5..3d9becbd 100644 --- a/lemur/tests/test_authorities.py +++ b/lemur/tests/test_authorities.py @@ -1,7 +1,6 @@ -import pytest -from lemur.authorities.views import * +from lemur.authorities.views import * # noqa -#def test_crud(session): +# def test_crud(session): # role = create('role1') # assert role.id > 0 # diff --git a/lemur/tests/test_certificates.py b/lemur/tests/test_certificates.py index 5990c09c..3d2757a4 100644 --- a/lemur/tests/test_certificates.py +++ b/lemur/tests/test_certificates.py @@ -1,5 +1,6 @@ import pytest -from lemur.certificates.views import * +from lemur.certificates.views import * # noqa + def test_valid_authority(session): assert 1 == 2 @@ -87,6 +88,7 @@ def test_cert_get_bitstrength(): from lemur.certificates.models import cert_get_bitstrength assert cert_get_bitstrength(INTERNAL_VALID_LONG_CERT) == 2048 + def test_cert_get_issuer(): from lemur.tests.certs import INTERNAL_VALID_LONG_CERT from lemur.certificates.models import cert_get_issuer @@ -324,4 +326,3 @@ def test_admin_certificate_credentials_delete(client): def test_admin_certificate_credentials_patch(client): assert client.patch(api.url_for(CertificatePrivateKey, certificate_id=1), data={}, headers=VALID_ADMIN_HEADER_TOKEN).status_code == 405 - diff --git a/lemur/tests/test_crypto.py b/lemur/tests/test_crypto.py deleted file mode 100644 index e69de29b..00000000 diff --git a/lemur/tests/test_csr.py b/lemur/tests/test_csr.py deleted file mode 100644 index 25633a4a..00000000 --- a/lemur/tests/test_csr.py +++ /dev/null @@ -1,38 +0,0 @@ -TEST_CSR = """ - # Configuration for standard CSR generation for Netflix - # Used for procuring VeriSign certificates - # Author: jachan - # Contact: cloudsecurity@netflix.com - - [ req ] - # Use a 2048 bit private key - default_bits = 2048 - default_keyfile = key.pem - prompt = no - encrypt_key = no - - # base request - distinguished_name = req_distinguished_name - - # extensions - # Uncomment the following line if you are requesting a SAN cert - {is_san_comment}req_extensions = req_ext - - # distinguished_name - [ req_distinguished_name ] - countryName = "US" # C= - stateOrProvinceName = "CALIFORNIA" # ST= - localityName = "Los Gatos" # L= - organizationName = "Netflix, Inc." # O= - organizationalUnitName = "Operations" # OU= - # This is the hostname/subject name on the certificate - commonName = "{DNS[0]}" # CN= - - [ req_ext ] - # Uncomment the following line if you are requesting a SAN cert - {is_san_comment}subjectAltName = @alt_names - - [alt_names] - # Put your SANs here - {DNS_LINES} - """ diff --git a/lemur/tests/test_domains.py b/lemur/tests/test_domains.py index e8f94728..85909f72 100644 --- a/lemur/tests/test_domains.py +++ b/lemur/tests/test_domains.py @@ -1,4 +1,5 @@ -from lemur.domains.views import * +from lemur.domains.views import * # noqa + def test_domain_get(client): assert client.get(api.url_for(Domains, domain_id=1)).status_code == 401 @@ -23,6 +24,7 @@ def test_domain_patch(client): VALID_USER_HEADER_TOKEN = { 'Authorization': 'Basic ' + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MzUyMzMzNjksInN1YiI6MSwiZXhwIjoxNTIxNTQ2OTY5fQ.1qCi0Ip7mzKbjNh0tVd3_eJOrae3rNa_9MCVdA4WtQI'} + def test_auth_domain_get(client): assert client.get(api.url_for(Domains, domain_id=1), headers=VALID_USER_HEADER_TOKEN).status_code == 200 @@ -46,6 +48,7 @@ def test_auth_domain_patch(client): VALID_ADMIN_HEADER_TOKEN = { 'Authorization': 'Basic ' + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MzUyNTAyMTgsInN1YiI6MiwiZXhwIjoxNTIxNTYzODE4fQ.6mbq4-Ro6K5MmuNiTJBB153RDhlM5LGJBjI7GBKkfqA'} + def test_admin_domain_get(client): assert client.get(api.url_for(Domains, domain_id=1), headers=VALID_ADMIN_HEADER_TOKEN).status_code == 200 @@ -119,5 +122,6 @@ def test_certificate_domains_patch(client): def test_auth_certificate_domains_get(client): assert client.get(api.url_for(CertificateDomains, certificate_id=1), headers=VALID_USER_HEADER_TOKEN).status_code == 200 + def test_admin_certificate_domains_get(client): assert client.get(api.url_for(CertificateDomains, certificate_id=1), headers=VALID_ADMIN_HEADER_TOKEN).status_code == 200 diff --git a/lemur/tests/test_elb.py b/lemur/tests/test_elb.py index bc4a10c7..e336aaf2 100644 --- a/lemur/tests/test_elb.py +++ b/lemur/tests/test_elb.py @@ -1,10 +1,10 @@ -import boto -from lemur.tests import LemurTestCase +# import boto +# from lemur.tests import LemurTestCase -from moto import mock_elb, mock_sts +# from moto import mock_elb, mock_sts -#class ELBTestCase(LemurTestCase): +# class ELBTestCase(LemurTestCase): # @mock_sts # @mock_elb # def test_add_listener(self): diff --git a/lemur/tests/test_iam.py b/lemur/tests/test_iam.py index 2405f9b5..89e1a6fc 100644 --- a/lemur/tests/test_iam.py +++ b/lemur/tests/test_iam.py @@ -1,11 +1,11 @@ -from lemur.tests import LemurTestCase +# from lemur.tests import LemurTestCase -from lemur.certificates.models import Certificate +# from lemur.certificates.models import Certificate -from moto import mock_iam, mock_sts +# from moto import mock_iam, mock_sts -#class IAMTestCase(LemurTestCase): +# class IAMTestCase(LemurTestCase): # @mock_sts # @mock_iam # def test_get_all_server_certs(self): diff --git a/lemur/tests/test_issuer_manager.py b/lemur/tests/test_issuer_manager.py index 5eaec09b..e3472400 100644 --- a/lemur/tests/test_issuer_manager.py +++ b/lemur/tests/test_issuer_manager.py @@ -1,6 +1,6 @@ -from lemur.tests import LemurTestCase +# from lemur.tests import LemurTestCase -#class ManagerTestCase(LemurTestCase): +# class ManagerTestCase(LemurTestCase): # def test_validate_authority(self): # pass # diff --git a/lemur/tests/test_roles.py b/lemur/tests/test_roles.py index 7339aeb4..e14b6c61 100644 --- a/lemur/tests/test_roles.py +++ b/lemur/tests/test_roles.py @@ -1,6 +1,6 @@ from json import dumps -from lemur.roles.service import * -from lemur.roles.views import * +from lemur.roles.service import * # noqa +from lemur.roles.views import * # noqa def test_crud(session): diff --git a/lemur/users/models.py b/lemur/users/models.py index 08b341e7..a3a13b1e 100644 --- a/lemur/users/models.py +++ b/lemur/users/models.py @@ -84,5 +84,3 @@ class User(db.Model): listen(User, 'before_insert', hash_password) - - diff --git a/lemur/users/service.py b/lemur/users/service.py index c4eebcee..79b77a14 100644 --- a/lemur/users/service.py +++ b/lemur/users/service.py @@ -145,5 +145,3 @@ def render(args): query = database.sort(query, User, sort_by, sort_dir) return database.paginate(query, page, count) - -