Black lint all the things
This commit is contained in:
@ -21,7 +21,14 @@ from lemur.endpoints.models import Endpoint
|
||||
manager = Manager(usage="Handles all endpoint related tasks.")
|
||||
|
||||
|
||||
@manager.option('-ttl', '--time-to-live', type=int, dest='ttl', default=2, help='Time in hours, which endpoint has not been refreshed to remove the endpoint.')
|
||||
@manager.option(
|
||||
"-ttl",
|
||||
"--time-to-live",
|
||||
type=int,
|
||||
dest="ttl",
|
||||
default=2,
|
||||
help="Time in hours, which endpoint has not been refreshed to remove the endpoint.",
|
||||
)
|
||||
def expire(ttl):
|
||||
"""
|
||||
Removed all endpoints that have not been recently updated.
|
||||
@ -31,12 +38,18 @@ def expire(ttl):
|
||||
try:
|
||||
now = arrow.utcnow()
|
||||
expiration = now - timedelta(hours=ttl)
|
||||
endpoints = database.session_query(Endpoint).filter(cast(Endpoint.last_updated, ArrowType) <= expiration)
|
||||
endpoints = database.session_query(Endpoint).filter(
|
||||
cast(Endpoint.last_updated, ArrowType) <= expiration
|
||||
)
|
||||
|
||||
for endpoint in endpoints:
|
||||
print("[!] Expiring endpoint: {name} Last Updated: {last_updated}".format(name=endpoint.name, last_updated=endpoint.last_updated))
|
||||
print(
|
||||
"[!] Expiring endpoint: {name} Last Updated: {last_updated}".format(
|
||||
name=endpoint.name, last_updated=endpoint.last_updated
|
||||
)
|
||||
)
|
||||
database.delete(endpoint)
|
||||
metrics.send('endpoint_expired', 'counter', 1)
|
||||
metrics.send("endpoint_expired", "counter", 1)
|
||||
|
||||
print("[+] Finished expiration.")
|
||||
except Exception as e:
|
||||
|
@ -20,15 +20,11 @@ from lemur.database import db
|
||||
from lemur.models import policies_ciphers
|
||||
|
||||
|
||||
BAD_CIPHERS = [
|
||||
'Protocol-SSLv3',
|
||||
'Protocol-SSLv2',
|
||||
'Protocol-TLSv1'
|
||||
]
|
||||
BAD_CIPHERS = ["Protocol-SSLv3", "Protocol-SSLv2", "Protocol-TLSv1"]
|
||||
|
||||
|
||||
class Cipher(db.Model):
|
||||
__tablename__ = 'ciphers'
|
||||
__tablename__ = "ciphers"
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(String(128), nullable=False)
|
||||
|
||||
@ -38,23 +34,18 @@ class Cipher(db.Model):
|
||||
|
||||
@deprecated.expression
|
||||
def deprecated(cls):
|
||||
return case(
|
||||
[
|
||||
(cls.name in BAD_CIPHERS, True)
|
||||
],
|
||||
else_=False
|
||||
)
|
||||
return case([(cls.name in BAD_CIPHERS, True)], else_=False)
|
||||
|
||||
|
||||
class Policy(db.Model):
|
||||
___tablename__ = 'policies'
|
||||
___tablename__ = "policies"
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(String(128), nullable=True)
|
||||
ciphers = relationship('Cipher', secondary=policies_ciphers, backref='policy')
|
||||
ciphers = relationship("Cipher", secondary=policies_ciphers, backref="policy")
|
||||
|
||||
|
||||
class Endpoint(db.Model):
|
||||
__tablename__ = 'endpoints'
|
||||
__tablename__ = "endpoints"
|
||||
id = Column(Integer, primary_key=True)
|
||||
owner = Column(String(128))
|
||||
name = Column(String(128))
|
||||
@ -62,16 +53,18 @@ class Endpoint(db.Model):
|
||||
type = Column(String(128))
|
||||
active = Column(Boolean, default=True)
|
||||
port = Column(Integer)
|
||||
policy_id = Column(Integer, ForeignKey('policy.id'))
|
||||
policy = relationship('Policy', backref='endpoint')
|
||||
certificate_id = Column(Integer, ForeignKey('certificates.id'))
|
||||
source_id = Column(Integer, ForeignKey('sources.id'))
|
||||
policy_id = Column(Integer, ForeignKey("policy.id"))
|
||||
policy = relationship("Policy", backref="endpoint")
|
||||
certificate_id = Column(Integer, ForeignKey("certificates.id"))
|
||||
source_id = Column(Integer, ForeignKey("sources.id"))
|
||||
sensitive = Column(Boolean, default=False)
|
||||
source = relationship('Source', back_populates='endpoints')
|
||||
source = relationship("Source", back_populates="endpoints")
|
||||
last_updated = Column(ArrowType, default=arrow.utcnow, nullable=False)
|
||||
date_created = Column(ArrowType, default=arrow.utcnow, onupdate=arrow.utcnow, nullable=False)
|
||||
date_created = Column(
|
||||
ArrowType, default=arrow.utcnow, onupdate=arrow.utcnow, nullable=False
|
||||
)
|
||||
|
||||
replaced = association_proxy('certificate', 'replaced')
|
||||
replaced = association_proxy("certificate", "replaced")
|
||||
|
||||
@property
|
||||
def issues(self):
|
||||
@ -79,13 +72,30 @@ class Endpoint(db.Model):
|
||||
|
||||
for cipher in self.policy.ciphers:
|
||||
if cipher.deprecated:
|
||||
issues.append({'name': 'deprecated cipher', 'value': '{0} has been deprecated consider removing it.'.format(cipher.name)})
|
||||
issues.append(
|
||||
{
|
||||
"name": "deprecated cipher",
|
||||
"value": "{0} has been deprecated consider removing it.".format(
|
||||
cipher.name
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
if self.certificate.expired:
|
||||
issues.append({'name': 'expired certificate', 'value': 'There is an expired certificate attached to this endpoint consider replacing it.'})
|
||||
issues.append(
|
||||
{
|
||||
"name": "expired certificate",
|
||||
"value": "There is an expired certificate attached to this endpoint consider replacing it.",
|
||||
}
|
||||
)
|
||||
|
||||
if self.certificate.revoked:
|
||||
issues.append({'name': 'revoked', 'value': 'There is a revoked certificate attached to this endpoint consider replacing it.'})
|
||||
issues.append(
|
||||
{
|
||||
"name": "revoked",
|
||||
"value": "There is a revoked certificate attached to this endpoint consider replacing it.",
|
||||
}
|
||||
)
|
||||
|
||||
return issues
|
||||
|
||||
|
@ -46,7 +46,7 @@ def get_by_name(name):
|
||||
:param name:
|
||||
:return:
|
||||
"""
|
||||
return database.get(Endpoint, name, field='name')
|
||||
return database.get(Endpoint, name, field="name")
|
||||
|
||||
|
||||
def get_by_dnsname(dnsname):
|
||||
@ -56,7 +56,7 @@ def get_by_dnsname(dnsname):
|
||||
:param dnsname:
|
||||
:return:
|
||||
"""
|
||||
return database.get(Endpoint, dnsname, field='dnsname')
|
||||
return database.get(Endpoint, dnsname, field="dnsname")
|
||||
|
||||
|
||||
def get_by_dnsname_and_port(dnsname, port):
|
||||
@ -66,7 +66,11 @@ def get_by_dnsname_and_port(dnsname, port):
|
||||
:param port:
|
||||
:return:
|
||||
"""
|
||||
return Endpoint.query.filter(Endpoint.dnsname == dnsname).filter(Endpoint.port == port).scalar()
|
||||
return (
|
||||
Endpoint.query.filter(Endpoint.dnsname == dnsname)
|
||||
.filter(Endpoint.port == port)
|
||||
.scalar()
|
||||
)
|
||||
|
||||
|
||||
def get_by_source(source_label):
|
||||
@ -95,12 +99,14 @@ def create(**kwargs):
|
||||
"""
|
||||
endpoint = Endpoint(**kwargs)
|
||||
database.create(endpoint)
|
||||
metrics.send('endpoint_added', 'counter', 1, metric_tags={'source': endpoint.source.label})
|
||||
metrics.send(
|
||||
"endpoint_added", "counter", 1, metric_tags={"source": endpoint.source.label}
|
||||
)
|
||||
return endpoint
|
||||
|
||||
|
||||
def get_or_create_policy(**kwargs):
|
||||
policy = database.get(Policy, kwargs['name'], field='name')
|
||||
policy = database.get(Policy, kwargs["name"], field="name")
|
||||
|
||||
if not policy:
|
||||
policy = Policy(**kwargs)
|
||||
@ -110,7 +116,7 @@ def get_or_create_policy(**kwargs):
|
||||
|
||||
|
||||
def get_or_create_cipher(**kwargs):
|
||||
cipher = database.get(Cipher, kwargs['name'], field='name')
|
||||
cipher = database.get(Cipher, kwargs["name"], field="name")
|
||||
|
||||
if not cipher:
|
||||
cipher = Cipher(**kwargs)
|
||||
@ -122,11 +128,13 @@ def get_or_create_cipher(**kwargs):
|
||||
def update(endpoint_id, **kwargs):
|
||||
endpoint = database.get(Endpoint, endpoint_id)
|
||||
|
||||
endpoint.policy = kwargs['policy']
|
||||
endpoint.certificate = kwargs['certificate']
|
||||
endpoint.source = kwargs['source']
|
||||
endpoint.policy = kwargs["policy"]
|
||||
endpoint.certificate = kwargs["certificate"]
|
||||
endpoint.source = kwargs["source"]
|
||||
endpoint.last_updated = arrow.utcnow()
|
||||
metrics.send('endpoint_updated', 'counter', 1, metric_tags={'source': endpoint.source.label})
|
||||
metrics.send(
|
||||
"endpoint_updated", "counter", 1, metric_tags={"source": endpoint.source.label}
|
||||
)
|
||||
database.update(endpoint)
|
||||
return endpoint
|
||||
|
||||
@ -138,19 +146,17 @@ def render(args):
|
||||
:return:
|
||||
"""
|
||||
query = database.session_query(Endpoint)
|
||||
filt = args.pop('filter')
|
||||
filt = args.pop("filter")
|
||||
|
||||
if filt:
|
||||
terms = filt.split(';')
|
||||
if 'active' in filt: # this is really weird but strcmp seems to not work here??
|
||||
terms = filt.split(";")
|
||||
if "active" in filt: # this is really weird but strcmp seems to not work here??
|
||||
query = query.filter(Endpoint.active == truthiness(terms[1]))
|
||||
elif 'port' in filt:
|
||||
if terms[1] != 'null': # ng-table adds 'null' if a number is removed
|
||||
elif "port" in filt:
|
||||
if terms[1] != "null": # ng-table adds 'null' if a number is removed
|
||||
query = query.filter(Endpoint.port == terms[1])
|
||||
elif 'ciphers' in filt:
|
||||
query = query.filter(
|
||||
Cipher.name == terms[1]
|
||||
)
|
||||
elif "ciphers" in filt:
|
||||
query = query.filter(Cipher.name == terms[1])
|
||||
else:
|
||||
query = database.filter(query, Endpoint, terms)
|
||||
|
||||
@ -164,7 +170,7 @@ def stats(**kwargs):
|
||||
:param kwargs:
|
||||
:return:
|
||||
"""
|
||||
attr = getattr(Endpoint, kwargs.get('metric'))
|
||||
attr = getattr(Endpoint, kwargs.get("metric"))
|
||||
query = database.db.session.query(attr, func.count(attr))
|
||||
|
||||
items = query.group_by(attr).all()
|
||||
@ -175,4 +181,4 @@ def stats(**kwargs):
|
||||
keys.append(key)
|
||||
values.append(count)
|
||||
|
||||
return {'labels': keys, 'values': values}
|
||||
return {"labels": keys, "values": values}
|
||||
|
@ -16,12 +16,13 @@ from lemur.endpoints import service
|
||||
from lemur.endpoints.schemas import endpoint_output_schema, endpoints_output_schema
|
||||
|
||||
|
||||
mod = Blueprint('endpoints', __name__)
|
||||
mod = Blueprint("endpoints", __name__)
|
||||
api = Api(mod)
|
||||
|
||||
|
||||
class EndpointsList(AuthenticatedResource):
|
||||
""" Defines the 'endpoints' endpoint """
|
||||
|
||||
def __init__(self):
|
||||
self.reqparse = reqparse.RequestParser()
|
||||
super(EndpointsList, self).__init__()
|
||||
@ -63,7 +64,7 @@ class EndpointsList(AuthenticatedResource):
|
||||
"""
|
||||
parser = paginated_parser.copy()
|
||||
args = parser.parse_args()
|
||||
args['user'] = g.current_user
|
||||
args["user"] = g.current_user
|
||||
return service.render(args)
|
||||
|
||||
|
||||
@ -103,5 +104,5 @@ class Endpoints(AuthenticatedResource):
|
||||
return service.get(endpoint_id)
|
||||
|
||||
|
||||
api.add_resource(EndpointsList, '/endpoints', endpoint='endpoints')
|
||||
api.add_resource(Endpoints, '/endpoints/<int:endpoint_id>', endpoint='endpoint')
|
||||
api.add_resource(EndpointsList, "/endpoints", endpoint="endpoints")
|
||||
api.add_resource(Endpoints, "/endpoints/<int:endpoint_id>", endpoint="endpoint")
|
||||
|
Reference in New Issue
Block a user