mainwindow.py
来自「Ubuntu packages of security software。 相」· Python 代码 · 共 910 行 · 第 1/3 页
PY
910 行
</menubar> <toolbar> <toolitem action='New Scan'/> <toolitem action='Wizard'/> <toolitem action='Save Scan'/> <toolitem action='Open Scan'/> <separator/> <toolitem action='Report a bug'/> <toolitem action='Show Help'/> </toolbar> """ self.get_recent_scans() self.main_action_group.add_actions(self.main_actions) for action in self.main_action_group.list_actions(): action.set_accel_group(self.main_accel_group) action.connect_accelerator() self.ui_manager.insert_action_group(self.main_action_group, 0) self.ui_manager.add_ui_from_string(self.default_ui) def _show_bug_report(self, widget): bug = BugReport() bug.show_all() def _search_scan_result(self, widget): search_window = SearchWindow(self._load_search_result, self.scan_notebook) search_window.show_all() def _load_search_result(self, results): for result in results: if results[result][1].is_unsaved(): for i in range(self.scan_notebook.get_n_pages()): if results[result][0] == "Unsaved " + \ self.scan_notebook.get_nth_page(i).get_tab_label(): self.scan_notebook.set_current_page(i) else: page = self._load(parsed_result=results[result][1], title=results[result][1].scan_name) page.status.set_search_loaded() def _close_scan_cb(self, widget, data=None): # data can be none, if the current page is to be closed if data == None: page_num = self.scan_notebook.get_current_page() # but can also be this page's content, which will be used # to find this page number else: page_num = self.scan_notebook.page_num(data) page = self.scan_notebook.get_nth_page(page_num) filename = None if page == None: return True if page.status.unsaved_unchanged \ or page.status.unsaved_changed\ or page.status.loaded_changed: log.debug("Found changes on closing tab") dialog = HIGDialog(buttons=(gtk.STOCK_SAVE, gtk.RESPONSE_OK, _('Close anyway'), gtk.RESPONSE_CLOSE, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) title = self.scan_notebook.get_tab_title(page) alert = None if title: alert = HIGEntryLabel('<b>%s "%s"</b>' % (_("Save changes on"), title)) else: alert = HIGEntryLabel('<b>%s</b>' % _("Save changes")) text = HIGEntryLabel(_('The given scan has unsaved changes.\n\What do you want to do?')) hbox = HIGHBox() hbox.set_border_width(5) hbox.set_spacing(12) vbox = HIGVBox() vbox.set_border_width(5) vbox.set_spacing(12) image = gtk.Image() image.set_from_stock(gtk.STOCK_DIALOG_QUESTION,gtk.ICON_SIZE_DIALOG) vbox.pack_start(alert) vbox.pack_start(text) hbox.pack_start(image) hbox.pack_start(vbox) dialog.vbox.pack_start(hbox) dialog.vbox.show_all() response = dialog.run() dialog.destroy() if response == gtk.RESPONSE_OK: filename = self._save_scan_results_cb(page) # filename = None means that user didn't saved the result elif response == gtk.RESPONSE_CANCEL: return False self.store_result(page, filename) elif page.status.scanning: log.debug("Trying to close a tab with a running scan") dialog = HIGDialog(buttons=(_('Close anyway'), gtk.RESPONSE_CLOSE, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) title = self.scan_notebook.get_tab_title(page) alert = None if title: alert = HIGEntryLabel('<b>%s "%s"</b>' % (_("Trying to close"), title)) else: alert = HIGEntryLabel('<b>%s</b>' % _("Trying to close")) text = HIGEntryLabel(_('The page you are trying to close has a scan \running at the background.\nWhat do you want to do?')) hbox = HIGHBox() hbox.set_border_width(5) hbox.set_spacing(12) vbox = HIGVBox() vbox.set_border_width(5) vbox.set_spacing(12) image = gtk.Image() image.set_from_stock(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_DIALOG) vbox.pack_start(alert) vbox.pack_start(text) hbox.pack_start(image) hbox.pack_start(vbox) dialog.vbox.pack_start(hbox) dialog.vbox.show_all() response = dialog.run() dialog.destroy() if response == gtk.RESPONSE_CLOSE: page.kill_scan() elif response == gtk.RESPONSE_CANCEL: return False elif not page.status.empty: alert = HIGAlertDialog(message_format=_('Closing current Scan Tab'), secondary_text=_('Are you sure you want to close current \Scan Tab?'), buttons=gtk.BUTTONS_OK_CANCEL, type=gtk.MESSAGE_WARNING) response = alert.run() alert.destroy() if response != gtk.RESPONSE_OK: return False page.close_tab() del(page) self.scan_notebook.remove_page(page_num) return True def store_result(self, page, filename): page.parsed.scan_name = self.scan_notebook.get_tab_title(page) if not filename: filename = mktemp() f = open(filename, "w") page.parsed.write_xml(f) f.close() search_config = SearchConfig() if search_config.store_results: try: log.debug(">>> Saving result into data base...") scan = Scans(scan_name=self.scan_notebook.get_tab_title(page), nmap_xml_output=open(filename).read(), date=time()) except: log.debug("Error while trying to store result in Data Base!") def get_recent_scans(self): r_scans = recent_scans.get_recent_scans_list() new_rscan_xml = '' for scan in r_scans[:7]: scan = scan.replace('\n','') if os.access(split(scan)[0],os.R_OK) and isfile(scan): scan = scan.replace('\n','') new_rscan = (scan, None, scan, None, scan, self._load_recent_scan) new_rscan_xml += "<menuitem action='%s'/>\n" % xml.sax.saxutils.escape(scan) self.main_actions.append(new_rscan) else: new_rscan_xml += "<separator />\n" self.default_ui %= new_rscan_xml def _create_menubar(self): # Get and pack the menubar menubar = self.ui_manager.get_widget('/menubar') if is_maemo(): menu = gtk.Menu() for child in menubar.get_children(): child.reparent(menu) self.set_menu(menu) menubar.destroy() self.menubar = menu else: self.menubar = menubar self.vbox.pack_start(self.menubar, False, False, 0) self.menubar.show_all() def _create_toolbar(self): toolbar = self.ui_manager.get_widget('/toolbar') if is_maemo(): tb = gtk.Toolbar() for child in toolbar.get_children(): child.reparent(tb) self.add_toolbar(tb) self.toolbar = tb toolbar.destroy() else: self.toolbar = toolbar self.vbox.pack_start(self.toolbar, False, False, 0) self.toolbar.show_all() def _create_scan_notebook(self): self.scan_notebook = ScanNotebook() self.scan_notebook.close_scan_cb = self._close_scan_cb page = self._new_scan_cb() self.scan_notebook.show_all() # Applying some command line options target = option_parser.get_target() profile = option_parser.get_profile() nmap = option_parser.get_nmap() if nmap: page.command_toolbar.command = " ".join(nmap) page.start_scan_cb() else: if target: page.toolbar.selected_target = target if profile: page.toolbar.selected_profile = profile if target and profile: log.debug(">>> Executing scan with the given args: %s \with %s" % (target, profile)) page.start_scan_cb() if is_maemo(): # No padding. We need space! self.vbox.pack_start(self.scan_notebook, True, True, 0) else: self.vbox.pack_start(self.scan_notebook, True, True, 4) def _create_statusbar(self): self.statusbar = gtk.Statusbar() self.vbox.pack_start(self.statusbar, False, False, 0) def _wizard_cb(self, widget): w = Wizard() w.set_notebook(self.scan_notebook) w.show_all() def _load_scan_results_cb(self, p): self._results_filechooser_dialog = ResultsFileChooserDialog(title=p.get_name()) if (self._results_filechooser_dialog.run() == gtk.RESPONSE_OK): self._load(filename=self._results_filechooser_dialog.get_filename()) self._results_filechooser_dialog.destroy() self._results_filechooser_dialog = None def _load_recent_scan(self, widget): self._load(widget.get_name()) def _verify_page_usage(self, page): """Verifies if given page is empty and can be used to load a result, or if it's not empty and shouldn't be used to load a result. Returns True, if it's ok to be used, and False if not. """ if page == None \ or page.status.saved\ or page.status.unsaved_unchanged\ or page.status.unsaved_changed\ or page.status.loaded_unchanged\ or page.status.loaded_changed\
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?