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)
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)
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