Exemplo n.º 1
0
def filter_scene_data_fields(scene_data, fields=None):
    scene_fields = fields.get('scene') if fields else None
    net_fields = fields.get('net') if fields else None
    gateway_fields = fields.get('gateway') if fields else None
    terminal_fields = fields.get('terminal') if fields else None
    raw_net_fields = fields.get('raw_net') if fields else None
    raw_gateway_fields = fields.get('raw_gateway') if fields else None
    raw_terminal_fields = fields.get('raw_terminal') if fields else None

    udict.filter_data(scene_data, fields=scene_fields)

    sub_id_node_mapping = {node['data']['id']: node for node in scene_data['vis_structure']['nodes']}

    def filter_data_fields(data_fields, raw=True):
        if data_fields:
            for sub_id, fields in data_fields.items():
                if sub_id in sub_id_node_mapping:
                    node = sub_id_node_mapping[sub_id]
                    if raw:
                        udict.filter_data(node['data'], fields=fields)
                    else:
                        instance = node['data']['_instance']
                        udict.filter_data(instance, fields=fields)
                        handle_public_terminal_data(instance)

    filter_data_fields(raw_net_fields)
    filter_data_fields(raw_gateway_fields)
    filter_data_fields(raw_terminal_fields)
    filter_data_fields(net_fields, False)
    filter_data_fields(gateway_fields, False)
    filter_data_fields(terminal_fields, False)
Exemplo n.º 2
0
 def filter_data_fields(data_fields, raw=True):
     if data_fields:
         for sub_id, fields in data_fields.items():
             if sub_id in sub_id_node_mapping:
                 node = sub_id_node_mapping[sub_id]
                 if raw:
                     udict.filter_data(node['data'], fields=fields)
                 else:
                     instance = node['data']['_instance']
                     udict.filter_data(instance, fields=fields)
                     handle_public_terminal_data(instance)
Exemplo n.º 3
0
def handle_public_terminal_data(data):
    if 'access_mode' in data:
        access_mode_map = {}
        for access_key, access_mode in data['access_mode'].items():
            if access_mode.get('protocol') not in (
                    SceneTerminal.AccessMode.SSH,
                    SceneTerminal.AccessMode.RDP,
                    SceneTerminal.AccessMode.CONSOLE,
            ):
                udict.filter_data(access_mode, fields=('protocol', 'port'))
                access_mode_map[access_key] = access_mode

        data['access_mode'] = access_mode_map
Exemplo n.º 4
0
    def get_data(self, fields=None):
        scene_net = self.node

        data = {
            'id': scene_net.id,
            'sub_id': scene_net.sub_id,
            'cidr': scene_net.cidr,
        }

        return udict.filter_data(data, fields)
Exemplo n.º 5
0
    def get_data(self, category, fields=None):
        scene_gateway = self.node

        data = {
            'id':
            scene_gateway.id,
            'sub_id':
            scene_gateway.sub_id,
            'static_routing':
            json.loads(scene_gateway.static_routing)
            if scene_gateway.static_routing else []
        }
        if category == 'firewall':
            data.update({
                'firewall_rule':
                json.loads(scene_gateway.firewall_rule)
                if scene_gateway.firewall_rule else [],
            })
        return udict.filter_data(data, fields)
Exemplo n.º 6
0
def get_user_role_info(user_id, cr_event_scene, fields=None):
    user_roles = set()
    user_servers = set()
    try:
        role_users_list = json.loads(cr_event_scene.roles)
        user_roles = [role_users['role'] for role_users in role_users_list if user_id in role_users.get('users', [])]
        if udict.need_field('servers', fields):
            role_servers_list = json.loads(cr_event_scene.cr_scene.roles)
            for role_servers in role_servers_list:
                role = role_servers.get('value')
                servers = role_servers.get('servers')
                if role in user_roles and servers:
                    user_servers.update(servers)
    except Exception as e:
        logger.error('get event role users error: %s', e)

    data = {
        'roles': user_roles,
        'servers': user_servers,
    }

    return udict.filter_data(data, fields)