def _initOptions(self): '''Init options.''' self.like_initial = True self.pref = ConfigOptions(self.w3af, self, 'proxy_options') # Proxy options proxyOptions = optionList() proxyOptions.add(Option('ipport', "localhost:8080", "IP:port","ipport")) proxyOptions.add(Option('trap', ".*", _("URLs to trap"), "regex")) proxyOptions.add(Option('methodtrap', "GET,POST", _("Methods to trap"), "list")) proxyOptions.add(Option("notrap", ".*\.(gif|jpg|png|css|js|ico|swf|axd|tif)$", _("URLs not to trap"), "regex")) proxyOptions.add(Option("fixlength", True, _("Fix content length"), "boolean")) proxyOptions.add(comboOption("trap_view", ['Splitted', 'Tabbed'], _("View of Intercept tab"), "combo")) proxyOptions.add(comboOption("home_tab", ['Intercept', 'History', 'Options'], _("Home tab"), "combo")) self.pref.addSection('proxy', _('Proxy Options'), proxyOptions) # HTTP editor options editorOptions = optionList() editorOptions.add(Option("wrap", True, _("Wrap long lines"), "boolean")) editorOptions.add(Option("highlight_current_line", True, _("Highlight current line"), "boolean")) editorOptions.add(Option("highlight_syntax", True, _("Highlight syntax"), "boolean")) editorOptions.add(Option("display_line_num", True, _("Display line numbers"), "boolean")) self.pref.addSection('editor', _('HTTP Editor Options'), editorOptions) # Load values from configfile self.pref.loadValues() self.pref.show()
class ProxiedRequests(entries.RememberingWindow): """Proxies the HTTP requests, allowing modifications. @author: Facundo Batista <facundobatista =at= taniquetil.com.ar> """ def __init__(self, w3af): '''Constructor.''' super(ProxiedRequests,self).__init__( w3af, "proxytool", _("w3af - Proxy"), "Using_the_Proxy", onDestroy=self._close) self.set_icon_from_file('core/ui/gtkUi/data/w3af_icon.png') self.w3af = w3af self.def_padding = 5 self._uimanager = gtk.UIManager() accelgroup = self._uimanager.get_accel_group() self.add_accel_group(accelgroup) actiongroup = gtk.ActionGroup('UIManager') actiongroup.add_actions([ ('Help', gtk.STOCK_HELP, _('_Help'), None, _('Help regarding this window'), self._help), ('Drop', gtk.STOCK_CANCEL, _('_Drop Request'), None, _('Drop request'), self._drop), ('Send', gtk.STOCK_YES, _('_Send Request'), None, _('Send request'), self._send), ('Next', gtk.STOCK_GO_FORWARD, _('_Next Request'), None, _('Move to the next request'), self._next), ]) actiongroup.add_toggle_actions([ # xml_name, icon, real_menu_text, accelerator, tooltip, callback, initial_flag ('TrapReq', gtk.STOCK_JUMP_TO, _('_Trap Requests'), None, _('Trap the requests or not'), self._toggle_trap, False), ]) # Finish the toolbar self._uimanager.insert_action_group(actiongroup, 0) self._uimanager.add_ui_from_string(ui_proxy_menu) toolbar = self._uimanager.get_widget('/Toolbar') self.bt_drop = toolbar.get_nth_item(2) self.bt_send = toolbar.get_nth_item(3) self.bt_next = toolbar.get_nth_item(4) self.bt_next.set_sensitive(False) self.bt_send.set_sensitive(False) self.bt_drop.set_sensitive(False) separat = toolbar.get_nth_item(5) separat.set_draw(False) separat.set_expand(True) self.vbox.pack_start(toolbar, False) self.vbox.show() toolbar.show() # Request-response viewer self._initOptions() self._prevIpport = None # We need to make widget (split or tabbed) firstly self._layout = self.pref.getValue('proxy', 'trap_view') self.reqresp = reqResViewer.reqResViewer(w3af, [self.bt_drop.set_sensitive, self.bt_send.set_sensitive], editableRequest=True, layout=self._layout) self.reqresp.set_sensitive(False) vbox = gtk.VBox() vbox.pack_start(self.reqresp, True, True) vbox.show() # Notebook self.nb = gtk.Notebook() tabs = [] # Intercept tmp = gtk.Label(_("_Intercept")) tmp.set_use_underline(True) self.nb.append_page(vbox, tmp) tabs.append('Intercept') # History self.httplog = httpLogTab.httpLogTab(w3af, time_refresh=True) tmp = gtk.Label(_("_History")) tmp.set_use_underline(True) self.nb.append_page(self.httplog, tmp) tabs.append('History') # Options tmp = gtk.Label(_("_Options")) tmp.set_use_underline(True) self.nb.append_page(self.pref, tmp) tabs.append('Options') self.vbox.pack_start(self.nb, True, True, padding=self.def_padding) self.nb.show() # Go to Home Tab self.nb.set_current_page(tabs.index(self.pref.getValue('proxy', 'home_tab'))) # Status bar for messages self.status_bar = gtk.Statusbar() self.vbox.pack_start(self.status_bar, False, False) self.status_bar.show() self.proxy = None # Finish it self.fuzzable = None self.waitingRequests = False self.keepChecking = False self.reloadOptions() gobject.timeout_add(200, self._superviseRequests) self.show() def _initOptions(self): '''Init options.''' self.like_initial = True self.pref = ConfigOptions(self.w3af, self, 'proxy_options') # Proxy options proxyOptions = optionList() proxyOptions.add(Option('ipport', "localhost:8080", "IP:port","ipport")) proxyOptions.add(Option('trap', ".*", _("URLs to trap"), "regex")) proxyOptions.add(Option('methodtrap', "GET,POST", _("Methods to trap"), "list")) proxyOptions.add(Option("notrap", ".*\.(gif|jpg|png|css|js|ico|swf|axd|tif)$", _("URLs not to trap"), "regex")) proxyOptions.add(Option("fixlength", True, _("Fix content length"), "boolean")) proxyOptions.add(comboOption("trap_view", ['Splitted', 'Tabbed'], _("View of Intercept tab"), "combo")) proxyOptions.add(comboOption("home_tab", ['Intercept', 'History', 'Options'], _("Home tab"), "combo")) self.pref.addSection('proxy', _('Proxy Options'), proxyOptions) # HTTP editor options editorOptions = optionList() editorOptions.add(Option("wrap", True, _("Wrap long lines"), "boolean")) editorOptions.add(Option("highlight_current_line", True, _("Highlight current line"), "boolean")) editorOptions.add(Option("highlight_syntax", True, _("Highlight syntax"), "boolean")) editorOptions.add(Option("display_line_num", True, _("Display line numbers"), "boolean")) self.pref.addSection('editor', _('HTTP Editor Options'), editorOptions) # Load values from configfile self.pref.loadValues() self.pref.show() def configChanged(self, like_initial): """Propagates the change from the options. @params like_initial: If the config is like the initial one """ self.like_initial = like_initial def reloadOptions(self): """Reload options. 1. Stop proxy 2. Try to start proxy with new params 3. If can't => alert 4. If everything is ok then start proxy 5. Set Trap options 6. Save options """ newPort = self.pref.getValue('proxy', 'ipport') if newPort != self._prevIpport: self.w3af.mainwin.sb(_("Stopping local proxy")) if self.proxy: self.proxy.stop() try: self._startProxy() except w3afProxyException: # Ups, port looks already used..:( # Let's show alert and focus Options tab self.w3af.mainwin.sb(_("Failed to start local proxy")) self.fuzzable = None self.waitingRequests = False self.keepChecking = False # Focus Options tab self.nb.set_current_page(2) return else: self.fuzzable = None self.waitingRequests = True self.keepChecking = True # Test of config try: self.proxy.setWhatToTrap(self.pref.getValue('proxy', 'trap')) self.proxy.setWhatNotToTrap(self.pref.getValue('proxy', 'notrap')) self.proxy.setMethodsToTrap(self.pref.getValue('proxy', 'methodtrap')) self.proxy.setFixContentLength(self.pref.getValue('proxy', 'fixlength')) except w3afException, w3: self.showAlert(_("Invalid configuration!\n" + str(w3))) self._prevIpport = newPort httpeditor = self.reqresp.request.getViewById('HttpRawView') httpeditor.set_show_line_numbers(self.pref.getValue('editor', 'display_line_num')) httpeditor.set_highlight_current_line(self.pref.getValue('editor', 'highlight_current_line')) httpeditor.set_highlight_syntax(self.pref.getValue('editor', 'highlight_syntax')) httpeditor.set_wrap(self.pref.getValue('editor', 'wrap')) self.pref.save() if self._layout != self.pref.getValue('proxy', 'trap_view'): self.showAlert(_("Some of options will take effect after you restart proxy tool"))