def on_config_error_menu(self, item): """Show configuration error (unused object and unbinded rules) in new pages""" if not self.node.object.unused_objects and not self.node.object.unbounded_rules: Gtk_DialogBox("No error found !") return treeview = Gtk_TreeView("Configuration error (%s)" % self.node.object.hostname) if self.node.object.unused_objects: p_iter1 = treeview.add_row(None, "Unused objects", 'black', '#B9B9B9') count = 0 for i in self.node.object.unused_objects: treeview.add_row(p_iter1, "Unused object: " + i, 'black', '#FFFFFF' if count % 2 else '#DCDCDC') count += 1 if self.node.object.unbounded_rules: p_iter1 = treeview.add_row(None, "Unbounded rules", 'black', '#B9B9B9') count = 0 for i in self.node.object.unbounded_rules: treeview.add_row(p_iter1, "Unbounded rule: " + i, 'black', '#FFFFFF' if count % 2 else '#DCDCDC') count += 1 Gtk_Main.Gtk_Main().notebook.add_tab( treeview.scrolled_window, "Configuration error (%s)" % self.node.object.hostname, can_close=True, ref=self.node.object, export=Gtk_Export.export_error_configuration) Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message( Gtk_Message.ON_ERROR_CONFIG)
def treeview_output(query_path): """Add a tab in the notebook showing the result of the query path. Parameters ---------- query_path : list. List of query path result to show """ result = query_path.result treeview = Gtk_TreeView("Query Path Import") for i in result: rule = i[0] path_data = i[1] fg_color = 'darkred' if not path_data else '#DDDD00' if isinstance(path_data[0], str) else 'darkgreen' p0 = treeview.add_row(None, rule.to_string(' '), fg_color, '#969696') if isinstance(path_data, str): treeview.add_row(p0, path_data, 'black', '#B9B9B9') continue for data in path_data: p1 = treeview.add_row(p0, path_to_string(data[0], ' '), 'black', '#B9B9B9') count = 0 for r in data[1]: treeview.add_row(p1, r[1].to_string(' '), 'black', '#DCDCDC' if count % 2 else '#FFFFFF') count += 1 Gtk_Main.Gtk_Main().notebook.add_tab(treeview.scrolled_window, "Query path import", can_close=True, ref=query_path, export=Gtk_Export.export_query_path)
def on_object_menu(self, item): """Show all element in dictionary in a new tab""" od = collections.OrderedDict(sorted(self.node.object.get_objects().items())) if not od: Gtk_DialogBox("No object found !") return object_dictionary = Gtk_TreeView("Object list") for k, v in od.items(): p_iter = object_dictionary.add_row(None, k, 'black', '#969696') for k1, v1 in self.node.object.resolve(k).items(): p_iter2 = object_dictionary.add_row(p_iter, k1, 'black', '#B9B9B9') count = 0 for e in v1: object_dictionary.add_row(p_iter2, e, 'black', '#FFFFFF' if count % 2 else '#DCDCDC') count += 1 rule_list = list(set([i for i in v if isinstance(i, Rule.Rule)])) if rule_list: p_iter2 = object_dictionary.add_row(p_iter, 'Rule', 'black', '#B9B9B9') count = 0 for e in rule_list: object_dictionary.add_row(p_iter2, e.to_string(' '), 'black', '#FFFFFF' if count % 2 else '#DCDCDC') count += 1 Gtk_Main.Gtk_Main().notebook.add_tab(object_dictionary.scrolled_window, "Object list (%s)" % self.node.object.hostname, can_close=True) Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(Gtk_Message.ON_SHOW_OBJECT)
def on_object_menu(self, item): """Show all element in dictionary in a new tab""" od = collections.OrderedDict( sorted(self.node.object.get_objects().items())) if not od: Gtk_DialogBox("No object found !") return object_dictionary = Gtk_TreeView("Object list") for k, v in od.items(): p_iter = object_dictionary.add_row(None, k, 'black', '#969696') for k1, v1 in self.node.object.resolve(k).items(): p_iter2 = object_dictionary.add_row(p_iter, k1, 'black', '#B9B9B9') count = 0 for e in v1: object_dictionary.add_row( p_iter2, e, 'black', '#FFFFFF' if count % 2 else '#DCDCDC') count += 1 rule_list = list(set([i for i in v if isinstance(i, Rule.Rule)])) if rule_list: p_iter2 = object_dictionary.add_row(p_iter, 'Rule', 'black', '#B9B9B9') count = 0 for e in rule_list: object_dictionary.add_row( p_iter2, e.to_string(' '), 'black', '#FFFFFF' if count % 2 else '#DCDCDC') count += 1 Gtk_Main.Gtk_Main().notebook.add_tab(object_dictionary.scrolled_window, "Object list (%s)" % self.node.object.hostname, can_close=True) Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message( Gtk_Message.ON_SHOW_OBJECT)
def add_distributed_anomaly_tab(self, distributed_detection): """Add an distributed anomaly page Parameters ---------- obj : the distributed anomaly instance """ def on_cursor_changed(tree_view): tree_row = tree_view.get_selection().get_selected()[1] if not tree_row: return model = tree_view.get_model() lateral_pane = Gtk_Main.Gtk_Main().lateral_pane lateral_pane.details.clear() if not model[tree_row].parent: lateral_pane.details.add_row("") else: lateral_pane.details.add_row( AnomalyError.get_error_help(model[tree_row][0], 'distributed')) lateral_pane.focus_details() distributed_anomaly = Gtk_TreeView("Anomaly detection (distributed)") distributed_anomaly.treeview.connect('cursor-changed', on_cursor_changed) self._add_distributed_anomaly(distributed_detection.error_path, distributed_anomaly) self.search_bar = Gtk_SearchBar(distributed_detection, distributed_anomaly, distributed_anomaly.scrolled_window) self.add_tab(self.search_bar.vbox, "Anomaly (Distributed)", can_close=True, ref=distributed_detection, export=Gtk_Export.export_distributed_detection) Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message( Gtk_Message.ON_DISTRIBUTED_ANOMALY)
def on_config_error_menu(self, item): """Show configuration error (unused object and unbinded rules) in new pages""" if not self.node.object.unused_objects and not self.node.object.unbounded_rules: Gtk_DialogBox("No error found !") return treeview = Gtk_TreeView("Configuration error (%s)" % self.node.object.hostname) if self.node.object.unused_objects: p_iter1 = treeview.add_row(None, "Unused objects", 'black', '#B9B9B9') count = 0 for i in self.node.object.unused_objects: treeview.add_row(p_iter1, "Unused object: " + i, 'black', '#FFFFFF' if count % 2 else '#DCDCDC') count += 1 if self.node.object.unbounded_rules: p_iter1 = treeview.add_row(None, "Unbounded rules", 'black', '#B9B9B9') count = 0 for i in self.node.object.unbounded_rules: treeview.add_row(p_iter1, "Unbounded rule: " + i, 'black', '#FFFFFF' if count % 2 else '#DCDCDC') count += 1 Gtk_Main.Gtk_Main().notebook.add_tab(treeview.scrolled_window, "Configuration error (%s)" % self.node.object.hostname, can_close=True, ref=self.node.object, export=Gtk_Export.export_error_configuration) Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(Gtk_Message.ON_ERROR_CONFIG)
def on_service_menu(self, item): """Show all service enable in a new tab""" service_list = Gtk_TreeView("Service list") p_iter_dict = {} handler_id = None def on_service_row_expanded(treeview, iter, path, p_iter_dict): model = treeview.get_model() if not (model[iter].parent and not model[iter].parent.parent): return treeview.freeze_child_notify() treeview.set_model(None) min = p_iter_dict[model[iter][0]][0] max = p_iter_dict[model[iter][0]][1] if model[iter].parent[0] == 'TCP': od = collections.OrderedDict( sorted( self.node.object.get_services(min, max, 'tcp').items())) elif model[iter].parent[0] == 'UDP': od = collections.OrderedDict( sorted( self.node.object.get_services(min, max, 'udp').items())) else: od = collections.OrderedDict( sorted( self.node.object.get_services(min, max, None).items())) iter_child = model.iter_children(iter) # apparently if we remove all, even if we add rows after, the row doesn't expand # so we least just 1 who we remove later while model.iter_n_children(iter) > 1: model.remove(iter_child) iter_child = model.iter_children(iter) for k, v in od.items(): name = Port.Port.get_service_name(k) p_iter1 = model.append( iter, [name if name else k, 'black', '#B9B9B9']) count = 0 for e in list(set(v)): model.append(p_iter1, [ e.to_string(' '), 'black', '#FFFFFF' if count % 2 else '#DCDCDC' ]) count += 1 treeview.set_model(model) treeview.thaw_child_notify() # remove the first one see above why model.remove(model.iter_children(iter)) # disconnect handler and force expand treeview.handler_block(handler_id) treeview.expand_to_path(path) treeview.handler_unblock(handler_id) Gtk_Main.Gtk_Main().create_progress_bar("Services", 3 * 2**6) for j in xrange(0, 3): if j == 0: protocol = 'tcp' p_proto = service_list.add_row(None, "TCP", 'black', '#737373') elif j == 1: protocol = 'udp' p_proto = service_list.add_row(None, "UDP", 'black', '#737373') else: protocol = None p_proto = service_list.add_row(None, "IP", 'black', '#737373') for i in xrange(0, 2**16, 2**10): Gtk_Main.Gtk_Main().update_interface() Gtk_Main.Gtk_Main().update_progress_bar(1) if self.node.object.get_services(i, i + 2**10 - 1, protocol): p_iter = service_list.add_row( p_proto, "[ %i - %i ]" % (i, i + 2**10 - 1), 'black', '#969696') p_iter_dict["[ %i - %i ]" % (i, i + 2**10 - 1)] = (i, i + 2**10 - 1) service_list.add_row(p_iter, ' ', 'black', '#FFFFFF') Gtk_Main.Gtk_Main().destroy_progress_bar() handler_id = service_list.treeview.connect("row-expanded", on_service_row_expanded, p_iter_dict) Gtk_Main.Gtk_Main().notebook.add_tab(service_list.scrolled_window, "Service list (%s)" % self.node.object.hostname, can_close=True) Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message( Gtk_Message.ON_SHOW_SERVICE)
def on_service_menu(self, item): """Show all service enable in a new tab""" service_list = Gtk_TreeView("Service list") p_iter_dict = {} handler_id = None def on_service_row_expanded(treeview, iter, path, p_iter_dict): model = treeview.get_model() if not (model[iter].parent and not model[iter].parent.parent): return treeview.freeze_child_notify() treeview.set_model(None) min = p_iter_dict[model[iter][0]][0] max = p_iter_dict[model[iter][0]][1] if model[iter].parent[0] == 'TCP': od = collections.OrderedDict(sorted(self.node.object.get_services(min, max, 'tcp').items())) elif model[iter].parent[0] == 'UDP': od = collections.OrderedDict(sorted(self.node.object.get_services(min, max, 'udp').items())) else: od = collections.OrderedDict(sorted(self.node.object.get_services(min, max, None).items())) iter_child = model.iter_children(iter) # apparently if we remove all, even if we add rows after, the row doesn't expand # so we least just 1 who we remove later while model.iter_n_children(iter) > 1: model.remove(iter_child) iter_child = model.iter_children(iter) for k, v in od.items(): name = Port.Port.get_service_name(k) p_iter1 = model.append(iter, [name if name else k, 'black', '#B9B9B9']) count = 0 for e in list(set(v)): model.append(p_iter1, [e.to_string(' '), 'black', '#FFFFFF' if count % 2 else '#DCDCDC']) count += 1 treeview.set_model(model) treeview.thaw_child_notify() # remove the first one see above why model.remove(model.iter_children(iter)) # disconnect handler and force expand treeview.handler_block(handler_id) treeview.expand_to_path(path) treeview.handler_unblock(handler_id) Gtk_Main.Gtk_Main().create_progress_bar("Services", 3*2**6) for j in xrange(0, 3): if j == 0: protocol = 'tcp' p_proto = service_list.add_row(None, "TCP", 'black', '#737373') elif j == 1: protocol = 'udp' p_proto = service_list.add_row(None, "UDP", 'black', '#737373') else: protocol = None p_proto = service_list.add_row(None, "IP", 'black', '#737373') for i in xrange(0, 2**16, 2**10): Gtk_Main.Gtk_Main().update_interface() Gtk_Main.Gtk_Main().update_progress_bar(1) if self.node.object.get_services(i, i + 2**10 - 1, protocol): p_iter = service_list.add_row(p_proto, "[ %i - %i ]" % (i, i + 2**10 - 1), 'black', '#969696') p_iter_dict["[ %i - %i ]" % (i, i + 2**10 - 1)] = (i, i + 2**10 - 1) service_list.add_row(p_iter, ' ', 'black', '#FFFFFF') Gtk_Main.Gtk_Main().destroy_progress_bar() handler_id = service_list.treeview.connect("row-expanded", on_service_row_expanded, p_iter_dict) Gtk_Main.Gtk_Main().notebook.add_tab(service_list.scrolled_window, "Service list (%s)" % self.node.object.hostname, can_close=True) Gtk_Main.Gtk_Main().lateral_pane.help_message.change_message(Gtk_Message.ON_SHOW_SERVICE)