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)
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)
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
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)
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)
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)