Exemple #1
0
    def run(self):
        '''
        Setup the dialog and return the results to the invoker.
        '''
        
        msg = '\nChoose how to report the bug(s)'
        
        if self._invalid_login:
            msg += '<b><i>Invalid credentials, please try again.</i></b>\n\n'
        
        self.set_markup( msg )
    
        #
        #    Anon
        #
        anon_button = gtk.RadioButton(None, "Anonymously")
        anon_button.set_active(True)
        self.vbox.pack_start(anon_button, True, True, 0)
    
        separator = gtk.HSeparator()
        self.vbox.pack_start(separator, True, True, 0)
        
        #
        #    Email
        #
        email_button = gtk.RadioButton(anon_button, "Use email address")
        self.vbox.pack_start(email_button, True, True, 0)
        
        # Create the text input field
        self.email_entry = EmailEntry(self._email_entry_changed)
        self.email_entry.connect("activate", lambda x: self.response(gtk.RESPONSE_OK))  
        
        # Create a horizontal box to pack the entry and a label
        email_hbox = gtk.HBox()
        email_hbox.pack_start(gtk.Label("Email address:"), False, 5, 5)
        email_hbox.pack_end(self.email_entry)
        email_hbox.set_sensitive(False)
        self.vbox.pack_start(email_hbox, True, True, 0)
        
        separator = gtk.HSeparator()
        self.vbox.pack_start(separator, True, True, 0)
    
        #
        #    Sourceforge credentials
        #
        sf_button = gtk.RadioButton(email_button, "Sourceforge credentials:")
        self.vbox.pack_start(sf_button, True, True, 0)
        
        sf_vbox = gtk.VBox()
        
        # Create the text input field
        user_entry = gtk.Entry()
        user_entry.connect("activate", lambda x: self.response(gtk.RESPONSE_OK))  
    
        user_hbox = gtk.HBox()
        user_hbox.pack_start(gtk.Label("Username:  "******"activate", lambda x: self.response(gtk.RESPONSE_OK))  
    
        passwd_hbox = gtk.HBox()
        passwd_hbox.pack_start(gtk.Label("Password:  "******"\nYour credentials won't be stored in your computer,\n"
        warning += "  and will only be sent over HTTPS connections."
        warning_label.set_text(warning)
        sf_vbox.pack_start(warning_label, True, True, 0)
        sf_vbox.set_sensitive(False)
        self.vbox.pack_start(sf_vbox, True, True, 0)
        
        separator = gtk.HSeparator()
        self.vbox.pack_start(separator, True, True, 0)
    
        # Handling of sensitiviness between the radio contents
        anon_button.connect("toggled", self._radio_callback_anon, [], [email_hbox,sf_vbox])        
        email_button.connect("toggled", self._radio_callback_email, [email_hbox,], [sf_vbox,])
        sf_button.connect("toggled", self._radio_callback_sf, [sf_vbox,], [email_hbox,])
                
        # Go go go!        
        self.show_all()
        super(dlg_ask_credentials, self).run()
        
        #
        # Get the results, generate the result tuple and return
        #
        active_label = [r.get_label() for r in anon_button.get_group() if r.get_active()]
        active_label = active_label[0].lower()
        
        if 'email' in active_label:
            method = self.METHOD_EMAIL
            email = self.email_entry.get_text()
            params = (email,)
        elif 'sourceforge' in active_label:
            method = self.METHOD_SF
            user = user_entry.get_text()
            passwd = passwd_entry.get_text()
            params = (user, passwd)
        else:
            method = self.METHOD_ANON
            params = ()
        
        # I'm done!
        self.destroy()

        return (method, params)
Exemple #2
0
class dlg_ask_credentials(gtk.MessageDialog):
    '''
    A dialog that allows any exception handler to ask the user for his credentials
    before sending any bug report information to the network. The supported types
    of credentials are:
    
        * Anonymous
        * Email
        * Sourceforge user (soon to be deprecated, nobody uses it).
    
    '''

    METHOD_ANON = 1
    METHOD_EMAIL = 2
    METHOD_SF = 3

    def __init__(self, invalid_login=False):
        '''
        @return: A tuple with the following information:
                    (method, params)
                
                Where method is one of METHOD_ANON, METHOD_EMAIL, METHOD_SF and,
                params is the email or the sourceforge username and password,
                in the anon case, the params are empty.
        '''
        gtk.MessageDialog.__init__(self,
                                   None,
                                   gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
                                   gtk.MESSAGE_QUESTION,
                                   gtk.BUTTONS_OK,
                                   None)
        
        self._invalid_login = invalid_login
        
        self.set_icon_from_file(W3AF_ICON)
        self.set_title('Bug report method - Step 1/2')
        
    
    def run(self):
        '''
        Setup the dialog and return the results to the invoker.
        '''
        
        msg = '\nChoose how to report the bug(s)'
        
        if self._invalid_login:
            msg += '<b><i>Invalid credentials, please try again.</i></b>\n\n'
        
        self.set_markup( msg )
    
        #
        #    Anon
        #
        anon_button = gtk.RadioButton(None, "Anonymously")
        anon_button.set_active(True)
        self.vbox.pack_start(anon_button, True, True, 0)
    
        separator = gtk.HSeparator()
        self.vbox.pack_start(separator, True, True, 0)
        
        #
        #    Email
        #
        email_button = gtk.RadioButton(anon_button, "Use email address")
        self.vbox.pack_start(email_button, True, True, 0)
        
        # Create the text input field
        self.email_entry = EmailEntry(self._email_entry_changed)
        self.email_entry.connect("activate", lambda x: self.response(gtk.RESPONSE_OK))  
        
        # Create a horizontal box to pack the entry and a label
        email_hbox = gtk.HBox()
        email_hbox.pack_start(gtk.Label("Email address:"), False, 5, 5)
        email_hbox.pack_end(self.email_entry)
        email_hbox.set_sensitive(False)
        self.vbox.pack_start(email_hbox, True, True, 0)
        
        separator = gtk.HSeparator()
        self.vbox.pack_start(separator, True, True, 0)
    
        #
        #    Sourceforge credentials
        #
        sf_button = gtk.RadioButton(email_button, "Sourceforge credentials:")
        self.vbox.pack_start(sf_button, True, True, 0)
        
        sf_vbox = gtk.VBox()
        
        # Create the text input field
        user_entry = gtk.Entry()
        user_entry.connect("activate", lambda x: self.response(gtk.RESPONSE_OK))  
    
        user_hbox = gtk.HBox()
        user_hbox.pack_start(gtk.Label("Username:  "******"activate", lambda x: self.response(gtk.RESPONSE_OK))  
    
        passwd_hbox = gtk.HBox()
        passwd_hbox.pack_start(gtk.Label("Password:  "******"\nYour credentials won't be stored in your computer,\n"
        warning += "  and will only be sent over HTTPS connections."
        warning_label.set_text(warning)
        sf_vbox.pack_start(warning_label, True, True, 0)
        sf_vbox.set_sensitive(False)
        self.vbox.pack_start(sf_vbox, True, True, 0)
        
        separator = gtk.HSeparator()
        self.vbox.pack_start(separator, True, True, 0)
    
        # Handling of sensitiviness between the radio contents
        anon_button.connect("toggled", self._radio_callback_anon, [], [email_hbox,sf_vbox])        
        email_button.connect("toggled", self._radio_callback_email, [email_hbox,], [sf_vbox,])
        sf_button.connect("toggled", self._radio_callback_sf, [sf_vbox,], [email_hbox,])
                
        # Go go go!        
        self.show_all()
        super(dlg_ask_credentials, self).run()
        
        #
        # Get the results, generate the result tuple and return
        #
        active_label = [r.get_label() for r in anon_button.get_group() if r.get_active()]
        active_label = active_label[0].lower()
        
        if 'email' in active_label:
            method = self.METHOD_EMAIL
            email = self.email_entry.get_text()
            params = (email,)
        elif 'sourceforge' in active_label:
            method = self.METHOD_SF
            user = user_entry.get_text()
            passwd = passwd_entry.get_text()
            params = (user, passwd)
        else:
            method = self.METHOD_ANON
            params = ()
        
        # I'm done!
        self.destroy()

        return (method, params)

    def _email_entry_changed(self, x, y):
        '''
        Disable the OK button if the email is invalid
        '''
        ok_button = self.get_widget_for_response(gtk.RESPONSE_OK)
        
        if self.email_entry.isValid():
            # Activate OK button
            ok_button.set_sensitive(True)
        else:
            # Disable OK button
            ok_button.set_sensitive(False)

    def _radio_callback_anon(self, event, enable, disable):
        self._radio_callback(event, enable, disable)
        # re-enable the button in case it was disabled by an invalid email address entry
        ok_button = self.get_widget_for_response(gtk.RESPONSE_OK)
        ok_button.set_sensitive(True)

    def _radio_callback_email(self, event, enable, disable):
        self._radio_callback(event, enable, disable)
        self._email_entry_changed(True,True)

    def _radio_callback_sf(self, event, enable, disable):
        self._radio_callback(event, enable, disable)
        # re-enable the button in case it was disabled by an invalid email address entry
        ok_button = self.get_widget_for_response(gtk.RESPONSE_OK)
        ok_button.set_sensitive(True)

    def _radio_callback(self, event, enable, disable):
        '''
        Handle the clicks on the different radio buttons.
        '''
        for section in enable:
            section.set_sensitive(True)

        for section in disable:
            section.set_sensitive(False)