Exemple #1
0
    def __init__(self, framework, parent = None):
        QObject.__init__(self, parent)
        self.framework = framework

        self.formFillValues = FormFillValues()
        self.formFillPatterns = FormFillPatterns()

        self.re_number_pattern = re.compile('num|number', re.I)

        self.pattern_matches = []
    
        self.framework.subscribe_raft_config_populated(self.configuration_populated)
        self.framework.subscribe_raft_config_updated(self.configuration_updated)
Exemple #2
0
    def __init__(self, framework, mainWindow):
        QObject.__init__(self, mainWindow)
        self.framework = framework
        self.mainWindow = mainWindow

        self.formFillValues = FormFillValues()
        self.formFillPatterns = FormFillPatterns()

        self.mainWindow.dbankPayloadsBox.activated.connect(
            self.fill_fuzz_values)

        self.Attacks = Payloads.Payloads(self.framework)
        self.fill_payload_combo_box()

        self.Data = None
        self.cursor = None
        self.framework.subscribe_database_events(self.db_attach,
                                                 self.db_detach)
Exemple #3
0
    def __init__(self, framework, mainWindow):
        QObject.__init__(self, mainWindow)
        self.framework = framework
        self.mainWindow = mainWindow

        self.formFillValues = FormFillValues()
        self.formFillPatterns = FormFillPatterns()

        self.mainWindow.dbankPayloadsBox.activated.connect(self.fill_fuzz_values)
        
        self.Attacks = Payloads.Payloads(self.framework)
        self.fill_payload_combo_box()

        self.Data = None
        self.cursor = None
        self.framework.subscribe_database_events(self.db_attach, self.db_detach)
Exemple #4
0
class DataBankTab(QObject):
    def __init__(self, framework, mainWindow):
        QObject.__init__(self, mainWindow)
        self.framework = framework
        self.mainWindow = mainWindow

        self.formFillValues = FormFillValues()
        self.formFillPatterns = FormFillPatterns()

        self.mainWindow.dbankPayloadsBox.activated.connect(
            self.fill_fuzz_values)

        self.Attacks = Payloads.Payloads(self.framework)
        self.fill_payload_combo_box()

        self.Data = None
        self.cursor = None
        self.framework.subscribe_database_events(self.db_attach,
                                                 self.db_detach)

    def db_attach(self):
        self.Data = self.framework.getDB()
        self.cursor = self.Data.allocate_thread_cursor()
        self.fill_values()

    def db_detach(self):
        self.close_cursor()
        self.Data = None

    def close_cursor(self):
        if self.cursor and self.Data:
            self.cursor.close()
            self.Data.release_thread_cursor(self.cursor)
            self.cursor = None

    def do_save_databank(self):
        self.save_formFillValues()
        self.save_formFillPatterns()

    def fill_values(self):
        self.fill_formFillValues()
        self.fill_formFillPatterns()

    def fill_formFillValues(self):
        self.formFillValues.rehydrate(
            self.framework.get_raft_config_value('FORMFILL.VALUES'))

        self.mainWindow.formFillFirstNameEdit.setText(
            self.formFillValues.FirstName)
        self.mainWindow.formFillLastNameEdit.setText(
            self.formFillValues.LastName)
        self.mainWindow.formFillEmailAddressEdit.setText(
            self.formFillValues.EmailAddress)
        self.mainWindow.formFillCompanyEdit.setText(
            self.formFillValues.Company)
        self.mainWindow.formFillAddress1Edit.setText(
            self.formFillValues.Address1)
        self.mainWindow.formFillAddress2Edit.setText(
            self.formFillValues.Address2)
        self.mainWindow.formFillCityEdit.setText(self.formFillValues.City)
        self.mainWindow.formFillStateEdit.setText(self.formFillValues.State)
        self.mainWindow.formFillZipCodeEdit.setText(
            self.formFillValues.ZipCode)
        self.mainWindow.formFillCountryEdit.setText(
            self.formFillValues.Country)
        self.mainWindow.formFillPhoneEdit.setText(self.formFillValues.Phone)
        self.mainWindow.formFillSSNEdit.setText(self.formFillValues.SSN)
        self.mainWindow.formFillBirthDateEdit.setText(
            self.formFillValues.BirthDate)
        self.mainWindow.formFillPassportEdit.setText(
            self.formFillValues.Passport)
        self.mainWindow.formFillCreditCardEdit.setText(
            self.formFillValues.CreditCard)
        self.mainWindow.formFillPostalCodeEdit.setText(
            self.formFillValues.PostalCode)
        self.mainWindow.formFillIDNumberEdit.setText(
            self.formFillValues.IDNumber)
        self.mainWindow.formFillHomePageUrlEdit.setText(
            self.formFillValues.HomePageUrl)
        self.mainWindow.formFillUsernameEdit.setText(
            self.formFillValues.Username)
        self.mainWindow.formFillPasswordEdit.setText(
            self.formFillValues.Password)
        self.mainWindow.formFillUnknownTextEdit.setText(
            self.formFillValues.UnknownText)
        self.mainWindow.formFillUnknownNumberEdit.setText(
            self.formFillValues.UnknownNumber)

    def save_formFillValues(self):
        self.formFillValues.FirstName = self.mainWindow.formFillFirstNameEdit.text(
        )
        self.formFillValues.LastName = self.mainWindow.formFillLastNameEdit.text(
        )
        self.formFillValues.EmailAddress = self.mainWindow.formFillEmailAddressEdit.text(
        )
        self.formFillValues.Company = self.mainWindow.formFillCompanyEdit.text(
        )
        self.formFillValues.Address1 = self.mainWindow.formFillAddress1Edit.text(
        )
        self.formFillValues.Address2 = self.mainWindow.formFillAddress2Edit.text(
        )
        self.formFillValues.City = self.mainWindow.formFillCityEdit.text()
        self.formFillValues.State = self.mainWindow.formFillStateEdit.text()
        self.formFillValues.ZipCode = self.mainWindow.formFillZipCodeEdit.text(
        )
        self.formFillValues.Country = self.mainWindow.formFillCountryEdit.text(
        )
        self.formFillValues.Phone = self.mainWindow.formFillPhoneEdit.text()
        self.formFillValues.SSN = self.mainWindow.formFillSSNEdit.text()
        self.formFillValues.BirthDate = self.mainWindow.formFillBirthDateEdit.text(
        )
        self.formFillValues.Passport = self.mainWindow.formFillPassportEdit.text(
        )
        self.formFillValues.CreditCard = self.mainWindow.formFillCreditCardEdit.text(
        )
        self.formFillValues.PostalCode = self.mainWindow.formFillPostalCodeEdit.text(
        )
        self.formFillValues.IDNumber = self.mainWindow.formFillIDNumberEdit.text(
        )
        self.formFillValues.HomePageUrl = self.mainWindow.formFillHomePageUrlEdit.text(
        )
        self.formFillValues.Username = self.mainWindow.formFillUsernameEdit.text(
        )
        self.formFillValues.Password = self.mainWindow.formFillPasswordEdit.text(
        )
        self.formFillValues.UnknownText = self.mainWindow.formFillUnknownTextEdit.text(
        )
        self.formFillValues.UnknownNumber = self.mainWindow.formFillUnknownNumberEdit.text(
        )

        self.framework.set_raft_config_value('FORMFILL.VALUES',
                                             self.formFillValues.flatten())

    def fill_formFillPatterns(self):
        self.formFillPatterns.rehydrate(
            self.framework.get_raft_config_value('FORMFILL.PATTERNS'))

        self.mainWindow.formFillFirstNamePattern.setText(
            self.formFillPatterns.FirstName)
        self.mainWindow.formFillLastNamePattern.setText(
            self.formFillPatterns.LastName)
        self.mainWindow.formFillEmailAddressPattern.setText(
            self.formFillPatterns.EmailAddress)
        self.mainWindow.formFillCompanyPattern.setText(
            self.formFillPatterns.Company)
        self.mainWindow.formFillAddress1Pattern.setText(
            self.formFillPatterns.Address1)
        self.mainWindow.formFillAddress2Pattern.setText(
            self.formFillPatterns.Address2)
        self.mainWindow.formFillCityPattern.setText(self.formFillPatterns.City)
        self.mainWindow.formFillStatePattern.setText(
            self.formFillPatterns.State)
        self.mainWindow.formFillZipCodePattern.setText(
            self.formFillPatterns.ZipCode)
        self.mainWindow.formFillCountryPattern.setText(
            self.formFillPatterns.Country)
        self.mainWindow.formFillPhonePattern.setText(
            self.formFillPatterns.Phone)
        self.mainWindow.formFillSSNPattern.setText(self.formFillPatterns.SSN)
        self.mainWindow.formFillBirthDatePattern.setText(
            self.formFillPatterns.BirthDate)
        self.mainWindow.formFillPassportPattern.setText(
            self.formFillPatterns.Passport)
        self.mainWindow.formFillCreditCardPattern.setText(
            self.formFillPatterns.CreditCard)
        self.mainWindow.formFillPostalCodePattern.setText(
            self.formFillPatterns.PostalCode)
        self.mainWindow.formFillIDNumberPattern.setText(
            self.formFillPatterns.IDNumber)
        self.mainWindow.formFillHomePageUrlPattern.setText(
            self.formFillPatterns.HomePageUrl)
        self.mainWindow.formFillUsernamePattern.setText(
            self.formFillPatterns.Username)
        self.mainWindow.formFillPasswordPattern.setText(
            self.formFillPatterns.Password)
        self.mainWindow.formFillFullNamePattern.setText(
            self.formFillPatterns.FullName)

    def save_formFillPatterns(self):
        self.formFillPatterns.FirstName = self.mainWindow.formFillFirstNamePattern.text(
        )
        self.formFillPatterns.LastName = self.mainWindow.formFillLastNamePattern.text(
        )
        self.formFillPatterns.EmailAddress = self.mainWindow.formFillEmailAddressPattern.text(
        )
        self.formFillPatterns.Company = self.mainWindow.formFillCompanyPattern.text(
        )
        self.formFillPatterns.Address1 = self.mainWindow.formFillAddress1Pattern.text(
        )
        self.formFillPatterns.Address2 = self.mainWindow.formFillAddress2Pattern.text(
        )
        self.formFillPatterns.City = self.mainWindow.formFillCityPattern.text()
        self.formFillPatterns.State = self.mainWindow.formFillStatePattern.text(
        )
        self.formFillPatterns.ZipCode = self.mainWindow.formFillZipCodePattern.text(
        )
        self.formFillPatterns.Country = self.mainWindow.formFillCountryPattern.text(
        )
        self.formFillPatterns.Phone = self.mainWindow.formFillPhonePattern.text(
        )
        self.formFillPatterns.SSN = self.mainWindow.formFillSSNPattern.text()
        self.formFillPatterns.BirthDate = self.mainWindow.formFillBirthDatePattern.text(
        )
        self.formFillPatterns.Passport = self.mainWindow.formFillPassportPattern.text(
        )
        self.formFillPatterns.CreditCard = self.mainWindow.formFillCreditCardPattern.text(
        )
        self.formFillPatterns.PostalCode = self.mainWindow.formFillPostalCodePattern.text(
        )
        self.formFillPatterns.IDNumber = self.mainWindow.formFillIDNumberPattern.text(
        )
        self.formFillPatterns.HomePageUrl = self.mainWindow.formFillHomePageUrlPattern.text(
        )
        self.formFillPatterns.Username = self.mainWindow.formFillUsernamePattern.text(
        )
        self.formFillPatterns.Password = self.mainWindow.formFillPasswordPattern.text(
        )
        self.formFillPatterns.FullName = self.mainWindow.formFillFullNamePattern.text(
        )

        self.framework.set_raft_config_value('FORMFILL.PATTERNS',
                                             self.formFillPatterns.flatten())

    def fill_payload_combo_box(self):

        comboBox = self.mainWindow.dbankPayloadsBox
        comboBox.clear()

        payloads = self.Attacks.list_files()
        for item in payloads:
            if item.startswith("."):
                pass
            else:
                comboBox.addItem(item)

    def fill_fuzz_values(self):
        """ Fill the textedit with the fuzz values of the selected payload file """

        filename = self.mainWindow.dbankPayloadsBox.currentText()

        # Clear the textedit
        self.mainWindow.dbankFuzzValuesEdit.clear()

        values = self.Attacks.read_data(str(filename))

        for item in values:
            self.mainWindow.dbankFuzzValuesEdit.appendPlainText(item)
Exemple #5
0
class DataBankTab(QObject):
    def __init__(self, framework, mainWindow):
        QObject.__init__(self, mainWindow)
        self.framework = framework
        self.mainWindow = mainWindow

        self.formFillValues = FormFillValues()
        self.formFillPatterns = FormFillPatterns()

        self.mainWindow.dbankPayloadsBox.activated.connect(self.fill_fuzz_values)
        
        self.Attacks = Payloads.Payloads(self.framework)
        self.fill_payload_combo_box()

        self.Data = None
        self.cursor = None
        self.framework.subscribe_database_events(self.db_attach, self.db_detach)

    def db_attach(self):
        self.Data = self.framework.getDB()
        self.cursor = self.Data.allocate_thread_cursor()
        self.fill_values()

    def db_detach(self):
        self.close_cursor()
        self.Data = None

    def close_cursor(self):
        if self.cursor and self.Data:
            self.cursor.close()
            self.Data.release_thread_cursor(self.cursor)
            self.cursor = None

    def do_save_databank(self):
        self.save_formFillValues()
        self.save_formFillPatterns()

    def fill_values(self):
        self.fill_formFillValues()
        self.fill_formFillPatterns()

    def fill_formFillValues(self):
        self.formFillValues.rehydrate(self.framework.get_raft_config_value('FORMFILL.VALUES'))

        self.mainWindow.formFillFirstNameEdit.setText(self.formFillValues.FirstName)
        self.mainWindow.formFillLastNameEdit.setText(self.formFillValues.LastName)
        self.mainWindow.formFillEmailAddressEdit.setText(self.formFillValues.EmailAddress)
        self.mainWindow.formFillCompanyEdit.setText(self.formFillValues.Company)
        self.mainWindow.formFillAddress1Edit.setText(self.formFillValues.Address1)
        self.mainWindow.formFillAddress2Edit.setText(self.formFillValues.Address2)
        self.mainWindow.formFillCityEdit.setText(self.formFillValues.City)
        self.mainWindow.formFillStateEdit.setText(self.formFillValues.State)
        self.mainWindow.formFillZipCodeEdit.setText(self.formFillValues.ZipCode)
        self.mainWindow.formFillCountryEdit.setText(self.formFillValues.Country)
        self.mainWindow.formFillPhoneEdit.setText(self.formFillValues.Phone)
        self.mainWindow.formFillSSNEdit.setText(self.formFillValues.SSN)
        self.mainWindow.formFillBirthDateEdit.setText(self.formFillValues.BirthDate)
        self.mainWindow.formFillPassportEdit.setText(self.formFillValues.Passport)
        self.mainWindow.formFillCreditCardEdit.setText(self.formFillValues.CreditCard)
        self.mainWindow.formFillPostalCodeEdit.setText(self.formFillValues.PostalCode)
        self.mainWindow.formFillIDNumberEdit.setText(self.formFillValues.IDNumber)
        self.mainWindow.formFillHomePageUrlEdit.setText(self.formFillValues.HomePageUrl)
        self.mainWindow.formFillUsernameEdit.setText(self.formFillValues.Username)
        self.mainWindow.formFillPasswordEdit.setText(self.formFillValues.Password)
        self.mainWindow.formFillUnknownTextEdit.setText(self.formFillValues.UnknownText)
        self.mainWindow.formFillUnknownNumberEdit.setText(self.formFillValues.UnknownNumber)
        
    def save_formFillValues(self):
        self.formFillValues.FirstName = self.mainWindow.formFillFirstNameEdit.text()
        self.formFillValues.LastName = self.mainWindow.formFillLastNameEdit.text()
        self.formFillValues.EmailAddress = self.mainWindow.formFillEmailAddressEdit.text()
        self.formFillValues.Company = self.mainWindow.formFillCompanyEdit.text()
        self.formFillValues.Address1 = self.mainWindow.formFillAddress1Edit.text()
        self.formFillValues.Address2 = self.mainWindow.formFillAddress2Edit.text()
        self.formFillValues.City = self.mainWindow.formFillCityEdit.text()
        self.formFillValues.State = self.mainWindow.formFillStateEdit.text()
        self.formFillValues.ZipCode = self.mainWindow.formFillZipCodeEdit.text()
        self.formFillValues.Country = self.mainWindow.formFillCountryEdit.text()
        self.formFillValues.Phone = self.mainWindow.formFillPhoneEdit.text()
        self.formFillValues.SSN = self.mainWindow.formFillSSNEdit.text()
        self.formFillValues.BirthDate = self.mainWindow.formFillBirthDateEdit.text()
        self.formFillValues.Passport = self.mainWindow.formFillPassportEdit.text()
        self.formFillValues.CreditCard = self.mainWindow.formFillCreditCardEdit.text()
        self.formFillValues.PostalCode = self.mainWindow.formFillPostalCodeEdit.text()
        self.formFillValues.IDNumber = self.mainWindow.formFillIDNumberEdit.text()
        self.formFillValues.HomePageUrl = self.mainWindow.formFillHomePageUrlEdit.text()
        self.formFillValues.Username = self.mainWindow.formFillUsernameEdit.text()
        self.formFillValues.Password = self.mainWindow.formFillPasswordEdit.text()
        self.formFillValues.UnknownText = self.mainWindow.formFillUnknownTextEdit.text()
        self.formFillValues.UnknownNumber = self.mainWindow.formFillUnknownNumberEdit.text()

        self.framework.set_raft_config_value('FORMFILL.VALUES', self.formFillValues.flatten())

    def fill_formFillPatterns(self):
        self.formFillPatterns.rehydrate(self.framework.get_raft_config_value('FORMFILL.PATTERNS'))

        self.mainWindow.formFillFirstNamePattern.setText(self.formFillPatterns.FirstName)
        self.mainWindow.formFillLastNamePattern.setText(self.formFillPatterns.LastName)
        self.mainWindow.formFillEmailAddressPattern.setText(self.formFillPatterns.EmailAddress)
        self.mainWindow.formFillCompanyPattern.setText(self.formFillPatterns.Company)
        self.mainWindow.formFillAddress1Pattern.setText(self.formFillPatterns.Address1)
        self.mainWindow.formFillAddress2Pattern.setText(self.formFillPatterns.Address2)
        self.mainWindow.formFillCityPattern.setText(self.formFillPatterns.City)
        self.mainWindow.formFillStatePattern.setText(self.formFillPatterns.State)
        self.mainWindow.formFillZipCodePattern.setText(self.formFillPatterns.ZipCode)
        self.mainWindow.formFillCountryPattern.setText(self.formFillPatterns.Country)
        self.mainWindow.formFillPhonePattern.setText(self.formFillPatterns.Phone)
        self.mainWindow.formFillSSNPattern.setText(self.formFillPatterns.SSN)
        self.mainWindow.formFillBirthDatePattern.setText(self.formFillPatterns.BirthDate)
        self.mainWindow.formFillPassportPattern.setText(self.formFillPatterns.Passport)
        self.mainWindow.formFillCreditCardPattern.setText(self.formFillPatterns.CreditCard)
        self.mainWindow.formFillPostalCodePattern.setText(self.formFillPatterns.PostalCode)
        self.mainWindow.formFillIDNumberPattern.setText(self.formFillPatterns.IDNumber)
        self.mainWindow.formFillHomePageUrlPattern.setText(self.formFillPatterns.HomePageUrl)
        self.mainWindow.formFillUsernamePattern.setText(self.formFillPatterns.Username)
        self.mainWindow.formFillPasswordPattern.setText(self.formFillPatterns.Password)
        self.mainWindow.formFillFullNamePattern.setText(self.formFillPatterns.FullName)
        
    def save_formFillPatterns(self):
        self.formFillPatterns.FirstName = self.mainWindow.formFillFirstNamePattern.text()
        self.formFillPatterns.LastName = self.mainWindow.formFillLastNamePattern.text()
        self.formFillPatterns.EmailAddress = self.mainWindow.formFillEmailAddressPattern.text()
        self.formFillPatterns.Company = self.mainWindow.formFillCompanyPattern.text()
        self.formFillPatterns.Address1 = self.mainWindow.formFillAddress1Pattern.text()
        self.formFillPatterns.Address2 = self.mainWindow.formFillAddress2Pattern.text()
        self.formFillPatterns.City = self.mainWindow.formFillCityPattern.text()
        self.formFillPatterns.State = self.mainWindow.formFillStatePattern.text()
        self.formFillPatterns.ZipCode = self.mainWindow.formFillZipCodePattern.text()
        self.formFillPatterns.Country = self.mainWindow.formFillCountryPattern.text()
        self.formFillPatterns.Phone = self.mainWindow.formFillPhonePattern.text()
        self.formFillPatterns.SSN = self.mainWindow.formFillSSNPattern.text()
        self.formFillPatterns.BirthDate = self.mainWindow.formFillBirthDatePattern.text()
        self.formFillPatterns.Passport = self.mainWindow.formFillPassportPattern.text()
        self.formFillPatterns.CreditCard = self.mainWindow.formFillCreditCardPattern.text()
        self.formFillPatterns.PostalCode = self.mainWindow.formFillPostalCodePattern.text()
        self.formFillPatterns.IDNumber = self.mainWindow.formFillIDNumberPattern.text()
        self.formFillPatterns.HomePageUrl = self.mainWindow.formFillHomePageUrlPattern.text()
        self.formFillPatterns.Username = self.mainWindow.formFillUsernamePattern.text()
        self.formFillPatterns.Password = self.mainWindow.formFillPasswordPattern.text()
        self.formFillPatterns.FullName = self.mainWindow.formFillFullNamePattern.text()

        self.framework.set_raft_config_value('FORMFILL.PATTERNS', self.formFillPatterns.flatten())
        
    
    def fill_payload_combo_box(self):
        
        comboBox = self.mainWindow.dbankPayloadsBox
        comboBox.clear()
        
        payloads = self.Attacks.list_files()
        for item in payloads:
            if item.startswith("."):
                pass
            else:
                comboBox.addItem(item)
                
    def fill_fuzz_values(self):
        """ Fill the textedit with the fuzz values of the selected payload file """
        
        filename = self.mainWindow.dbankPayloadsBox.currentText()
        
        # Clear the textedit
        self.mainWindow.dbankFuzzValuesEdit.clear()
        
        values = self.Attacks.read_data(str(filename))
        
        for item in values:
            self.mainWindow.dbankFuzzValuesEdit.appendPlainText(item)
Exemple #6
0
class FormFiller(QObject):
    def __init__(self, framework, parent = None):
        QObject.__init__(self, parent)
        self.framework = framework

        self.formFillValues = FormFillValues()
        self.formFillPatterns = FormFillPatterns()

        self.re_number_pattern = re.compile('num|number', re.I)

        self.pattern_matches = []
    
        self.framework.subscribe_raft_config_populated(self.configuration_populated)
        self.framework.subscribe_raft_config_updated(self.configuration_updated)

    def configuration_populated(self):
        self.formFillValues.rehydrate(self.framework.get_raft_config_value('FORMFILL.VALUES'))
        self.formFillPatterns.rehydrate(self.framework.get_raft_config_value('FORMFILL.PATTERNS'))
        self.make_pattern_matches()

    def configuration_updated(self, name, value):
        if name == 'FORMFILL.VALUES':
            self.formFillValues.rehydrate(value)
        elif name == 'FORMFILL.PATTERNS':
            self.formFillPatterns.rehydrate(value)
            self.make_pattern_matches()

    def make_pattern_matches(self):
        new_pattern_matches = []

        self.add_pattern(new_pattern_matches, self.formFillPatterns.FirstName, self.fill_FirstName)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.LastName, self.fill_LastName)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.EmailAddress, self.fill_EmailAddress)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.Company, self.fill_Company)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.Address1, self.fill_Address1)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.Address2, self.fill_Address2)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.City, self.fill_City)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.State, self.fill_State)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.ZipCode, self.fill_ZipCode)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.Country, self.fill_Country)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.Phone, self.fill_Phone)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.SSN, self.fill_SSN)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.BirthDate, self.fill_BirthDate)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.Passport, self.fill_Passport)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.CreditCard, self.fill_CreditCard)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.PostalCode, self.fill_PostalCode)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.IDNumber, self.fill_IDNumber)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.HomePageUrl, self.fill_HomePageUrl)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.Username, self.fill_Username)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.Password, self.fill_Password)
        self.add_pattern(new_pattern_matches, self.formFillPatterns.FullName, self.fill_FullName)

        self.pattern_matches = new_pattern_matches
    
    def add_pattern(self, new_pattern_matches, match_string, func):
        new_pattern_matches.append((re.compile(match_string, re.I), func))

    def fill_FirstName(self):
        return (self.formFillValues.FirstName, 'FirstName')
    def fill_LastName(self):
        return (self.formFillValues.LastName, 'LastName')
    def fill_EmailAddress(self):
        return (self.formFillValues.EmailAddress, 'EmailAddress')
    def fill_Company(self):
        return (self.formFillValues.Company, 'Company')
    def fill_Address1(self):
        return (self.formFillValues.Address1, 'Address1')
    def fill_Address2(self):
        return (self.formFillValues.Address2, 'Address2')
    def fill_City(self):
        return (self.formFillValues.City, 'City')
    def fill_State(self):
        return (self.formFillValues.State, 'State')
    def fill_ZipCode(self):
        return (self.formFillValues.ZipCode, 'ZipCode')
    def fill_Country(self):
        return (self.formFillValues.Country, 'Country')
    def fill_Phone(self):
        return (self.formFillValues.Phone, 'Phone')
    def fill_SSN(self):
        return (self.formFillValues.SSN, 'SSN')
    def fill_BirthDate(self):
        return (self.formFillValues.BirthDate, 'BirthDate')
    def fill_Passport(self):
        return (self.formFillValues.Passport, 'Passport')
    def fill_CreditCard(self):
        return (self.formFillValues.CreditCard, 'CreditCard')
    def fill_PostalCode(self):
        return (self.formFillValues.PostalCode, 'PostalCode')
    def fill_IDNumber(self):
        return (self.formFillValues.IDNumber, 'IDNumber')
    def fill_HomePageUrl(self):
        return (self.formFillValues.HomePageUrl, 'HomePageUrl')
    def fill_Username(self):
        return (self.formFillValues.Username, 'Username')
    def fill_Password(self):
        return (self.formFillValues.Password, 'Password')
    def fill_FullName(self):
        # TODO: added Last, First ?
        return (self.formFillValues.FirstName + ' ' + self.formFillValues.LastName, 'FullName')
    def fill_UnknownText(self):
        return (self.formFillValues.UnknownText, 'UnknownText')
    def fill_UnknownNumber(self):
        return (self.formFillValues.UnknownNumber, 'UnknownNumber')

    def fill_GenericData(self, name, Id, Class):
        if self.re_number_pattern.search(name) or self.re_number_pattern.search(Id) or self.re_number_pattern.search(Class):
            return_value, return_type =  self.fill_UnknownNumber()
        else:
            return_value, return_type =  self.fill_UnknownText()
        return return_value, return_type

    def populate_generic_value(self, name, Id, value, Type, Class, required, maxlength, accept, label):
        return_value, return_type = self.fill_GenericData(name, Id, Class)
        return return_value

    def populate_form_value(self, name, Id, value, Type, Class, required, maxlength, accept, label):
        match = None
        if Type and Type in ('telephone',): # TODO: complete HTML5 list
            match = self.get_match(Type)
        if not match and name:
            match = self.get_match(name)
        if not match and Id:
            match = self.get_match(Id)
        if not match and Class:
            match = self.get_match(Class)
        if not match and label:
            match = self.get_match(label)

        if match:
            return_value, return_type = match
        elif not match and not value:
            return_value, return_type = self.fill_GenericData(name, Id, Class)
        else:
            return_value = value
            return_type = 'Default'

        return return_value, return_type

    def get_match(self, input_string):
        if not input_string:
            return None
        for pattern_match in self.pattern_matches:
            re_pattern, func = pattern_match
            # TODO: or match?
            m = re_pattern.search(input_string)
            if m:
                # TODO: in future, consider longest match?
                return func()
        return None