def create(**kwargs): """ Creates a new authority. """ body, private_key, chain, roles = mint(**kwargs) kwargs['creator'].roles = list(set(list(kwargs['creator'].roles) + roles)) kwargs['body'] = body kwargs['private_key'] = private_key kwargs['chain'] = chain if kwargs.get('roles'): kwargs['roles'] += roles else: kwargs['roles'] = roles cert = upload(**kwargs) kwargs['authority_certificate'] = cert if kwargs.get('plugin', {}).get('plugin_options', []): kwargs['options'] = json.dumps(kwargs['plugin']['plugin_options']) authority = Authority(**kwargs) authority = database.create(authority) kwargs['creator'].authorities.append(authority) metrics.send('authority_created', 'counter', 1, metric_tags=dict(owner=authority.owner)) return authority
def create(**kwargs): """ Creates a new authority. """ body, private_key, chain, roles = mint(**kwargs) kwargs["creator"].roles = list(set(list(kwargs["creator"].roles) + roles)) kwargs["body"] = body kwargs["private_key"] = private_key kwargs["chain"] = chain if kwargs.get("roles"): kwargs["roles"] += roles else: kwargs["roles"] = roles cert = upload(**kwargs) kwargs["authority_certificate"] = cert if kwargs.get("plugin", {}).get("plugin_options", []): kwargs["options"] = json.dumps(kwargs["plugin"]["plugin_options"]) authority = Authority(**kwargs) authority = database.create(authority) kwargs["creator"].authorities.append(authority) metrics.send("authority_created", "counter", 1, metric_tags=dict(owner=authority.owner)) return authority
def create(**kwargs): """ Creates a new authority. """ kwargs['creator'] = g.user.email body, private_key, chain, roles = mint(**kwargs) g.user.roles = list(set(list(g.user.roles) + roles)) kwargs['body'] = body kwargs['private_key'] = private_key kwargs['chain'] = chain if kwargs.get('roles'): kwargs['roles'] += roles else: kwargs['roles'] = roles cert = upload(**kwargs) kwargs['authority_certificate'] = cert authority = Authority(**kwargs) authority = database.create(authority) g.user.authorities.append(authority) metrics.send('authority_created', 'counter', 1, metric_tags=dict(owner=authority.owner)) return authority
def create(kwargs): """ Create a new authority. :return: """ issuer = plugins.get(kwargs.get('pluginName')) kwargs['creator'] = g.current_user.email cert_body, intermediate, issuer_roles = issuer.create_authority(kwargs) cert = Certificate(cert_body, chain=intermediate) cert.owner = kwargs['ownerEmail'] if kwargs['caType'] == 'subca': cert.description = "This is the ROOT certificate for the {0} sub certificate authority the parent \ authority is {1}.".format( kwargs.get('caName'), kwargs.get('caParent')) else: cert.description = "This is the ROOT certificate for the {0} certificate authority.".format( kwargs.get('caName')) cert.user = g.current_user cert.notifications = notification_service.create_default_expiration_notifications( 'DEFAULT_SECURITY', current_app.config.get('LEMUR_SECURITY_TEAM_EMAIL')) # we create and attach any roles that the issuer gives us role_objs = [] 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']) # the user creating the authority should be able to administer it if role.username == 'admin': g.current_user.roles.append(role) role_objs.append(role) authority = Authority(kwargs.get('caName'), kwargs['ownerEmail'], kwargs['pluginName'], cert_body, description=kwargs['caDescription'], chain=intermediate, roles=role_objs) database.update(cert) authority = database.create(authority) g.current_user.authorities.append(authority) return authority
def create(**kwargs): """ Creates a new authority. """ ca_name = kwargs.get("name") if get_by_name(ca_name): raise Exception(f"Authority with name {ca_name} already exists") if role_service.get_by_name( f"{ca_name}_admin") or role_service.get_by_name( f"{ca_name}_operator"): raise Exception( f"Admin and/or operator roles for authority {ca_name} already exist" ) body, private_key, chain, roles = mint(**kwargs) kwargs["creator"].roles = list(set(list(kwargs["creator"].roles) + roles)) kwargs["body"] = body kwargs["private_key"] = private_key kwargs["chain"] = chain if kwargs.get("roles"): kwargs["roles"] += roles else: kwargs["roles"] = roles cert = upload(**kwargs) kwargs["authority_certificate"] = cert if kwargs.get("plugin", {}).get("plugin_options", []): # encrypt the private key before persisting in DB for option in kwargs.get("plugin").get("plugin_options"): if option["name"] == "acme_private_key" and option["value"]: option["value"] = data_encrypt(option["value"]) kwargs["options"] = json.dumps(kwargs["plugin"]["plugin_options"]) authority = Authority(**kwargs) authority = database.create(authority) kwargs["creator"].authorities.append(authority) log_service.audit_log("create_authority", ca_name, "Created new authority") issuer = kwargs["plugin"]["plugin_object"] current_app.logger.warning( f"Created new authority {ca_name} with issuer {issuer.title}") metrics.send("authority_created", "counter", 1, metric_tags=dict(owner=authority.owner)) return authority
def create(**kwargs): """ Creates a new authority. """ ca_name = kwargs.get("name") if get_by_name(ca_name): raise Exception(f"Authority with name {ca_name} already exists") if role_service.get_by_name( f"{ca_name}_admin") or role_service.get_by_name( f"{ca_name}_operator"): raise Exception( f"Admin and/or operator roles for authority {ca_name} already exist" ) body, private_key, chain, roles = mint(**kwargs) kwargs["creator"].roles = list(set(list(kwargs["creator"].roles) + roles)) kwargs["body"] = body kwargs["private_key"] = private_key kwargs["chain"] = chain if kwargs.get("roles"): kwargs["roles"] += roles else: kwargs["roles"] = roles cert = upload(**kwargs) kwargs["authority_certificate"] = cert if kwargs.get("plugin", {}).get("plugin_options", []): kwargs["options"] = json.dumps(kwargs["plugin"]["plugin_options"]) authority = Authority(**kwargs) authority = database.create(authority) kwargs["creator"].authorities.append(authority) log_service.audit_log("create_authority", ca_name, "Created new authority") metrics.send("authority_created", "counter", 1, metric_tags=dict(owner=authority.owner)) return authority
def create(**kwargs): """ Creates a new authority. """ kwargs['creator'] = g.user.email body, chain, roles = mint(**kwargs) kwargs['body'] = body kwargs['chain'] = chain if kwargs.get('roles'): kwargs['roles'] += roles else: kwargs['roles'] = roles if kwargs['type'] == 'subca': description = "This is the ROOT certificate for the {0} sub certificate authority the parent \ authority is {1}.".format( kwargs.get('name'), kwargs.get('parent')) else: description = "This is the ROOT certificate for the {0} certificate authority.".format( kwargs.get('name')) kwargs['description'] = description cert = upload(**kwargs) kwargs['authority_certificate'] = cert authority = Authority(**kwargs) authority = database.create(authority) g.user.authorities.append(authority) metrics.send('authority_created', 'counter', 1, metric_tags=dict(owner=authority.owner)) return authority
def automatically_enable_autorotate(): """ This function automatically enables auto-rotation for unexpired certificates that are attached to an endpoint but do not have autorotate enabled. WARNING: This will overwrite the Auto-rotate toggle! """ log_data = { "function": f"{__name__}.{sys._getframe().f_code.co_name}", } permitted_authorities = current_app.config.get( "ENABLE_AUTO_ROTATE_AUTHORITY", []) eligible_certs = get_all_certs_attached_to_endpoint_without_autorotate() for cert in eligible_certs: if cert.authority_id not in permitted_authorities: continue log_data["certificate"] = cert.name log_data["certificate_id"] = cert.id log_data["message"] = "Enabling auto-rotate for certificate" current_app.logger.info(log_data) # TODO: add the cert destination to the logging metrics.send("automatically_enable_autorotate", "counter", 1, metric_tags={ "certificate": cert.name, "certificate_id": cert.id, "authority_id": cert.authority_id, "authority_name": Authority.get(cert.authority_id).name }) cert.rotation = True database.update(cert)