Exemplo n.º 1
0
def remove_ssh_keys_from_service(sender, structure, user, role, **kwargs):
    """ Remove user ssh keys if he doesn't have access to service anymore. """
    if isinstance(structure, structure_models.Project):
        lost_services = models.DigitalOceanService.objects.filter(
            customer__projects=structure)
    elif isinstance(structure, structure_models.Customer):
        lost_services = models.DigitalOceanService.objects.filter(
            customer=structure)
    else:
        return
    lost_settings = [service.settings for service in lost_services]
    visible_services = structure_filters.filter_queryset_for_user(
        models.DigitalOceanService.objects.all(), user)
    visible_settings = [service.settings for service in visible_services]
    settings_list = set([
        settings for settings in lost_settings
        if settings not in visible_settings
    ])

    ssh_keys = core_models.SshPublicKey.objects.filter(user=user)
    for settings in settings_list:
        serialized_settings = core_utils.serialize_instance(settings)
        for ssh_key in ssh_keys:
            core_tasks.IndependentBackendMethodTask().delay(
                serialized_settings, 'remove_ssh_key', ssh_key.name,
                ssh_key.fingerprint)
Exemplo n.º 2
0
def remove_ssh_key_from_service_settings_on_deletion(sender, instance,
                                                     **kwargs):
    ssh_key = instance
    user = ssh_key.user
    services = structure_filters.filter_queryset_for_user(
        models.DigitalOceanService.objects.all(), user)
    settings_list = structure_models.ServiceSettings.objects.filter(
        digitaloceanservice__in=services)
    for settings in settings_list:
        serialized_settings = core_utils.serialize_instance(settings)
        core_tasks.IndependentBackendMethodTask().delay(
            serialized_settings, 'remove_ssh_key', ssh_key.name,
            ssh_key.fingerprint)
Exemplo n.º 3
0
def remove_ssh_key_from_all_tenants_on_it_deletion(sender, instance, **kwargs):
    """ Delete key from all tenants that are accessible for user on key deletion. """
    ssh_key = instance
    user = ssh_key.user
    tenants = structure_filters.filter_queryset_for_user(
        Tenant.objects.all(), user)
    for tenant in tenants:
        if not structure_permissions._has_admin_access(user, tenant.project):
            continue
        serialized_tenant = core_utils.serialize_instance(tenant)
        core_tasks.BackendMethodTask().delay(serialized_tenant,
                                             'remove_ssh_key_from_tenant',
                                             ssh_key.name, ssh_key.fingerprint)