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 + -
显示快捷键?