class SCL_Long_TuneUp_BPM_Offsets_Controller: def __init__(self,scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #------top panels = offsets analysis ---------------------------- top_panel = JPanel(BorderLayout()) self.bpms_offsets_from_ccl4_panel = BPMs_Offsets_from_CCL4_Panel(self.scl_long_tuneup_controller) self.bpms_offsets_from_hebt1_panel = BPMs_Offsets_from_HEBT1_Panel(self.scl_long_tuneup_controller) self.bpms_offsets_from_ext_file_panel = BPMs_Offsets_from_ExtFile_Panel(self.scl_long_tuneup_controller) top_panel0 = JPanel(BorderLayout()) top_panel0.add(self.bpms_offsets_from_ccl4_panel,BorderLayout.NORTH) top_panel0.add(self.bpms_offsets_from_hebt1_panel,BorderLayout.SOUTH) top_panel1 = JPanel(BorderLayout()) top_panel1.add(top_panel0,BorderLayout.NORTH) top_panel1.add(self.bpms_offsets_from_ext_file_panel,BorderLayout.SOUTH) top_panel.add(top_panel1,BorderLayout.NORTH) #--------center panel = table------------ center_panel = JPanel(BorderLayout()) self.bpm_offsets_table_model = PhaseOffsets_BPMs_Table_Model(self.scl_long_tuneup_controller) self.bpm_offsets_table = JTable(self.bpm_offsets_table_model) self.bpm_offsets_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.bpm_offsets_table.setFillsViewportHeight(true) scrl_panel = JScrollPane(self.bpm_offsets_table) scrl_panel.setBorder(etched_border) center_panel.add(scrl_panel,BorderLayout.CENTER) #-------- bottom panel = post analysis --------------- bottom_panel = JPanel(BorderLayout()) self.set_bpms_as_bad_panel = Set_BPMs_as_Bad_Panel(self.scl_long_tuneup_controller) bottom_panel.add(self.set_bpms_as_bad_panel,BorderLayout.SOUTH) #-------------------------------------------------- self.main_panel.add(top_panel,BorderLayout.NORTH) self.main_panel.add(center_panel,BorderLayout.CENTER) self.main_panel.add(bottom_panel,BorderLayout.SOUTH) def getMainPanel(self): return self.main_panel def setFinalOffsets(self): ccl4_button = self.set_bpms_as_bad_panel.ccl4_button ccl4_final = ccl4_button.isSelected() bpm_wrappers = self.scl_long_tuneup_controller.bpm_wrappers for bpm_wrapper in bpm_wrappers: if(bpm_wrapper.isGood): if(ccl4_final): bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.left_phase_offset.phaseOffset_avg bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.left_phase_offset.phaseOffset_err bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.left_phase_offset.isReady else: bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.right_phase_offset.phaseOffset_avg bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.right_phase_offset.phaseOffset_err bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.right_phase_offset.isReady self.bpm_offsets_table.getModel().fireTableDataChanged()
class SCL_Long_TuneUp_BPM_Offsets_Controller: def __init__(self,scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #------top panels = offsets analysis ---------------------------- top_panel = JPanel(BorderLayout()) self.bpms_offsets_from_ccl4_panel = BPMs_Offsets_from_CCL4_Panel(self.scl_long_tuneup_controller) self.bpms_offsets_from_hebt1_panel = BPMs_Offsets_from_HEBT1_Panel(self.scl_long_tuneup_controller) self.bpms_offsets_from_ext_file_panel = BPMs_Offsets_from_ExtFile_Panel(self.scl_long_tuneup_controller) top_panel0 = JPanel(BorderLayout()) top_panel0.add(self.bpms_offsets_from_ccl4_panel,BorderLayout.NORTH) top_panel0.add(self.bpms_offsets_from_hebt1_panel,BorderLayout.SOUTH) top_panel1 = JPanel(BorderLayout()) top_panel1.add(top_panel0,BorderLayout.NORTH) top_panel1.add(self.bpms_offsets_from_ext_file_panel,BorderLayout.SOUTH) top_panel.add(top_panel1,BorderLayout.NORTH) #--------center panel = table------------ center_panel = JPanel(BorderLayout()) self.bpm_offsets_table_model = PhaseOffsets_BPMs_Table_Model(self.scl_long_tuneup_controller) self.bpm_offsets_table = JTable(self.bpm_offsets_table_model) self.bpm_offsets_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.bpm_offsets_table.setFillsViewportHeight(true) scrl_panel = JScrollPane(self.bpm_offsets_table) scrl_panel.setBorder(etched_border) center_panel.add(scrl_panel,BorderLayout.CENTER) #-------- bottom panel = post analysis --------------- bottom_panel = JPanel(BorderLayout()) self.set_bpms_as_bad_panel = Set_BPMs_as_Bad_Panel(self.scl_long_tuneup_controller) bottom_panel.add(self.set_bpms_as_bad_panel,BorderLayout.SOUTH) #-------------------------------------------------- self.main_panel.add(top_panel,BorderLayout.NORTH) self.main_panel.add(center_panel,BorderLayout.CENTER) self.main_panel.add(bottom_panel,BorderLayout.SOUTH) def getMainPanel(self): return self.main_panel def setFinalOffsets(self): ccl4_button = self.set_bpms_as_bad_panel.ccl4_button ccl4_final = ccl4_button.isSelected() bpm_wrappers = self.scl_long_tuneup_controller.bpm_wrappers for bpm_wrapper in bpm_wrappers: if(bpm_wrapper.isGood): if(ccl4_final): bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.left_phase_offset.phaseOffset_avg bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.left_phase_offset.phaseOffset_err bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.left_phase_offset.isReady else: bpm_wrapper.final_phase_offset.phaseOffset_avg = bpm_wrapper.right_phase_offset.phaseOffset_avg bpm_wrapper.final_phase_offset.phaseOffset_err = bpm_wrapper.right_phase_offset.phaseOffset_err bpm_wrapper.final_phase_offset.isReady = bpm_wrapper.right_phase_offset.isReady self.bpm_offsets_table.getModel().fireTableDataChanged()
class SCL_Long_TuneUp_Rescale_Controller: def __init__(self,scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller self.main_panel = JTabbedPane() self.scl_long_tuneup_operations_rescale_controller = SCL_Long_TuneUp_Operations_Rescale_Controller(scl_long_tuneup_controller) self.operations_panel = self.scl_long_tuneup_operations_rescale_controller.getMainPanel() self.expert_panel = JPanel(BorderLayout()) self.main_panel.add("Operations Re-scale Panel",self.operations_panel) self.main_panel.add("Expert Re-scale Panel",self.expert_panel) #----etched border etched_border = BorderFactory.createEtchedBorder() #------top params panel----------------------- top_panel = JPanel(BorderLayout()) self.bpms_phase_shift_panel = BPMs_Phase_Shift_Panel(self.scl_long_tuneup_controller) self.init_amp_phases_panel = Init_New_Amps_Phases_Panel(self.scl_long_tuneup_controller) self.new_amp_phases_to_epics_panel = NEW_Amp_and_Phases_to_EPICS_Panel(self.scl_long_tuneup_controller) top_panel.add(self.bpms_phase_shift_panel,BorderLayout.NORTH) top_panel.add(self.init_amp_phases_panel,BorderLayout.CENTER) top_panel.add(self.new_amp_phases_to_epics_panel,BorderLayout.SOUTH) #------cavities table panel -------- cavs_rescale_panel = JPanel(BorderLayout()) txt = "Cavities' Prameters. New Amp and Avg. Gap Phases can be changed manually." rescale_table_border = BorderFactory.createTitledBorder(etched_border,txt) cavs_rescale_panel.setBorder(rescale_table_border) self.cavs_rescale_table = JTable(Cavs_Rescale_Table_Model(self.scl_long_tuneup_controller)) self.cavs_rescale_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.cavs_rescale_table.setFillsViewportHeight(true) self.cavs_rescale_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller)) scrl_panel0 = JScrollPane(self.cavs_rescale_table) cavs_rescale_panel.add(scrl_panel0,BorderLayout.CENTER) center_panel = JPanel(BorderLayout()) center_panel.add(cavs_rescale_panel,BorderLayout.CENTER) #-------- post-rescale actions panel bottom_panel = JPanel(BorderLayout()) #bottom_panel.add(self.post_rescale_panel,BorderLayout.WEST) #-------------------------------------------------- self.expert_panel.add(top_panel,BorderLayout.NORTH) self.expert_panel.add(center_panel,BorderLayout.CENTER) self.expert_panel.add(bottom_panel,BorderLayout.SOUTH) #----- model for tracking self.scl_tracker_model = SCL_RfGaps_Fitter_Tracker_Model(self.scl_long_tuneup_controller) def getMainPanel(self): return self.main_panel def updateTables(self): self.cavs_rescale_table.getModel().fireTableDataChanged()
class SCL_Long_TuneUp_Rescale_Controller: def __init__(self,scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #------top params panel----------------------- top_panel = JPanel(BorderLayout()) self.bpms_phase_shift_panel = BPMs_Phase_Shift_Panel(self.scl_long_tuneup_controller) self.init_amp_phases_panel = Init_New_Amps_Phases_Panel(self.scl_long_tuneup_controller) self.new_amp_phases_to_epics_panel = NEW_Amp_and_Phases_to_EPICS_Panel(self.scl_long_tuneup_controller) top_panel.add(self.bpms_phase_shift_panel,BorderLayout.NORTH) top_panel.add(self.init_amp_phases_panel,BorderLayout.CENTER) top_panel.add(self.new_amp_phases_to_epics_panel,BorderLayout.SOUTH) #------cavities table panel -------- cavs_rescale_panel = JPanel(BorderLayout()) txt = "Cavities' Prameters. New Amp and Avg. Gap Phases can be changed manually." rescale_table_border = BorderFactory.createTitledBorder(etched_border,txt) cavs_rescale_panel.setBorder(rescale_table_border) self.cavs_rescale_table = JTable(Cavs_Rescale_Table_Model(self.scl_long_tuneup_controller)) self.cavs_rescale_table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION) self.cavs_rescale_table.setFillsViewportHeight(true) self.cavs_rescale_table.getSelectionModel().addListSelectionListener(Cavs_Table_Selection_Listener(self.scl_long_tuneup_controller)) scrl_panel0 = JScrollPane(self.cavs_rescale_table) cavs_rescale_panel.add(scrl_panel0,BorderLayout.CENTER) center_panel = JPanel(BorderLayout()) center_panel.add(cavs_rescale_panel,BorderLayout.CENTER) #-------- post-rescale actions panel bottom_panel = JPanel(BorderLayout()) #bottom_panel.add(self.post_rescale_panel,BorderLayout.WEST) #-------------------------------------------------- self.main_panel.add(top_panel,BorderLayout.NORTH) self.main_panel.add(center_panel,BorderLayout.CENTER) self.main_panel.add(bottom_panel,BorderLayout.SOUTH) #----- model for tracking self.scl_tracker_model = SCL_RfGaps_Fitter_Tracker_Model(self.scl_long_tuneup_controller) def getMainPanel(self): return self.main_panel def updateTables(self): self.cavs_rescale_table.getModel().fireTableDataChanged()
class CTSearchTab(ITab): # constructor: def __init__(self, callbacks): self.callbacks = callbacks self._stdout = PrintWriter(callbacks.getStdout(), True) # Implement ITab: def saveResults(self, e): self._stdout.println("Saving results") fileChooser = JFileChooser() fileChooser.setDialogTitle("Specify the file name") userSelection = fileChooser.showSaveDialog(self.getUiComponent()) if userSelection == JFileChooser.APPROVE_OPTION: f = fileChooser.getSelectedFile() fileout = open(f, 'w') for domain in self.domain_list: self._stdout.println("writing ") fileout.write("I AM FILE") fileout.close() def addToScope(self, whatever): self._stdout.println("add to scope called") rowCount = self.domainTable.getRowCount() for row in range(0, rowCount): if self.domainTable.getValueAt(row, CHECK_COLUMN) == True: domain = self.domainTable.getValueAt(row, DOMAIN_COLUMN) domain = domain.replace("*.", "") url1 = URL("https://{}/".format(domain)) if not self.callbacks.isInScope(url1): self.callbacks.includeInScoe(url1) def check_address(self, addrblobs): for addrblob in addrblobs: addr_arr = addrblob.split("|") rrow = int(addr_arr[0]) addr = addr_arr[1] try: result = InetAddress.getByName(addr) yield [rrow, "Success", result] except UnknownHostException: yield [rrow, "Fail", None] def resolveDns(self, event): rowCount = self.domainTable.getRowCount() dns_check_list = [] for row in range(0, rowCount): if self.domainTable.getValueAt(row, CHECK_COLUMN) == True: domain = self.domainTable.getValueAt(row, DOMAIN_COLUMN) domain = domain.replace("*.", "") domain_string = str(row) + "|" + domain dns_check_list.append(domain_string) dns_results = self.check_address(dns_check_list) for dns_result in dns_results: saved_row = dns_result[0] if dns_result[1] == "Success": self.domainTable.setValueAt("Resolved", saved_row, DNS_COLUMN) else: self.domainTable.setValueAt("No DNS Record", saved_row, DNS_COLUMN) def getTabCaption(self): return "CT Search " def getUiComponent(self): self.domainTable = JTable(ResourceTableModel()) self.domainTable.setRowHeight(30) #Delete: #jcolumnModel = self.domainTable.getColumnModel() splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT) topPane = JPanel() image_label = HelpLabel(self.callbacks) image_label.setHelpIcon("nothing") image_label.addMouseListener(ScreenMouseListener(self.callbacks)) scope_button = JButton("Add Selected Domains To Scope", actionPerformed=self.addToScope) dns_button = JButton("Resolve DNS", actionPerformed=self.resolveDns) # search_text = JTextField("") saveButton = JButton("Save results", actionPerformed=self.saveResults) topPane.add(image_label) topPane.add(scope_button) topPane.add(dns_button) topPane.add(saveButton) scrollpane = JScrollPane(self.domainTable) splitpane.setTopComponent(topPane) splitpane.setBottomComponent(scrollpane) return splitpane def setDomainList(self, domain_list): self.domain_list = domain_list tableModel = self.domainTable.getModel() n = 0 dns_ans = "Not Checked" for d in domain_list: row = [str(n), d, dns_ans, True] tableModel.addRow(row) n = n + 1
class BurpExtender(IBurpExtender,ITab,IHttpListener): def registerExtenderCallbacks(self,callbacks): self.callbacks = callbacks self.helpers = callbacks.getHelpers() self.callbacks.setExtensionName("KkMultiProxy") self.PROXY_LIST = [] self.jPanel = JPanel() boxVertical = Box.createVerticalBox() boxHorizontal = Box.createHorizontalBox() boxHorizontal.add(JButton("File",actionPerformed=self.getFile)) self.FileText = JTextField("") boxHorizontal.add(self.FileText) boxVertical.add(boxHorizontal) TableHeader = ('IP','PORT') TableModel = DefaultTableModel(self.PROXY_LIST,TableHeader) self.Table = JTable(TableModel) boxVertical.add(self.Table) boxHorizontal = Box.createHorizontalBox() boxHorizontal.add(JButton("Add",actionPerformed=self.addIP)) boxHorizontal.add(JButton("Delete",actionPerformed=self.deleteIP)) boxHorizontal.add(JButton("Save",actionPerformed=self.saveIP)) boxVertical.add(boxHorizontal) self.jPanel.add(boxVertical) self.callbacks.addSuiteTab(self) self.callbacks.registerHttpListener(self) return def getFile(self,button): dlg = JFileChooser() result = dlg.showOpenDialog(None) if result == JFileChooser.APPROVE_OPTION: f = dlg.getSelectedFile() path = f.getPath() self.FileText.setText(path) try: self.getIPList(path) except: exit(0) def addIP(self,button): #chooser = JFileChooser() #chooser.showOpenDialog(None) demo = DialogDemo(self.Table) def deleteIP(self,button): selectRows = len(self.Table.getSelectedRows()) TableModel = self.Table.getModel() if selectRows: selectedRowIndex = self.Table.getSelectedRow() TableModel.removeRow(selectedRowIndex) def saveIP(self,button): TableModel = self.Table.getModel() rowCount = TableModel.getRowCount() result_str = "" for i in range(rowCount): if i == 0: result_str+=TableModel.getValueAt(i,0)+':'+TableModel.getValueAt(i,1) else: result_str+='|'+TableModel.getValueAt(i,0)+':'+TableModel.getValueAt(i,1) print result_str f = open(self.FileText.getText(),'w+') f.write(result_str) f.close() def getTabCaption(self): return "MultiProxy" def getUiComponent(self): return self.jPanel def processHttpMessage(self,toolFlag,messageIsRequest,messageInfo): if messageIsRequest: httpService = messageInfo.getHttpService() print httpService.getHost() # if the host is HOST_FROM, change it to HOST_TO i = randint(0,len(self.TableDatas)-1) messageInfo.setHttpService(self.helpers.buildHttpService(self.PROXY_LIST[i]['ip'], self.PROXY_LIST[i]['port'], httpService.getProtocol())) print messageInfo.getHttpService().getHost() def getIPList(self,path): f = open(path,'r+') content = f.read() f.close() if content: ip_array = content.split('|') for _ip in ip_array: ip = _ip.split(':')[0] port = _ip.split(':')[1] self.PROXY_LIST.append([ip,port]) print self.PROXY_LIST
class BurpExtender(IBurpExtender, ITab, IHttpListener, IMessageEditorController, AbstractTableModel, IContextMenuInvocation): name = "Blind XSS_" _jTabbedPane = JTabbedPane() _jPanel = JPanel() _jAboutPanel = JPanel() _jPanelConstraints = GridBagConstraints() _jLabelParameters = None _jTextFieldParameters = None _jLabelTechniques = None _jTextFieldURL = None _jLabelFuzzFactor = None _jTextFieldFuzzFactor = None _jLabelAdditionalCmdLine = None _jTextFieldAdditionalCmdLine = None _jButtonSetCommandLine = None _jLabelAbout = None # # implement IBurpExtender # def registerExtenderCallbacks(self, callbacks): # keep a reference to our callbacks object self._callbacks = callbacks # obtain an extension helpers object self._helpers = callbacks.getHelpers() # set our extension name self._callbacks.setExtensionName(self.name) # lists of hosts with querys self._dictPayloads = {} self._dictPayloads_headers = {} self._dictPayloads_params = {} self._dictHeaders = {} self._dictParams = {} self.status_flag = False self.table_flag = 0 self.start_button_text = 'Run proxy' self._layout = GridBagLayout() self._jPanel.setLayout(self._layout) self._jPanel.setBounds(0, 0, 1000, 1000) self._jLabelTechniques = JLabel("Your URL (my.burpcollaborator.net):") self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 1 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 10, 0) self._jPanel.add(self._jLabelTechniques, self._jPanelConstraints) self._jTextFieldURL = JTextField("", 30) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 1 self._jPanelConstraints.gridwidth = 4 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 10, 0) self._jPanel.add(self._jTextFieldURL, self._jPanelConstraints) self._jLabelTechniques = JLabel("Press to start:") self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.anchor = GridBagConstraints.WEST self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 0 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 10, 0) self._jPanel.add(self._jLabelTechniques, self._jPanelConstraints) self.submitSearchButton = swing.JButton( self.start_button_text, actionPerformed=self.active_flag) self.submitSearchButton.setBackground(Color.WHITE) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 0 self._jPanelConstraints.gridwidth = 4 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 10, 0) self._jPanel.add(self.submitSearchButton, self._jPanelConstraints) self._tableModelPayloads = DefaultTableModel() self._tableModelPayloads.addColumn("Payload") self._tableModelPayloads.addColumn("Using") self._tableModelHeaders = DefaultTableModel() self._tableModelHeaders.addColumn("Header") self._tableModelHeaders.addColumn("Using") self._tableModelParams = DefaultTableModel() self._tableModelParams.addColumn("Parameter") self._tableModelParams.addColumn("Using") self._table = JTable(self._tableModelPayloads) self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS) self._table.getModel().addTableModelListener( MyTableModelListener(self._table, self, 1)) self._scrolltable = JScrollPane(self._table) self._scrolltable.setMinimumSize(Dimension(300, 200)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 2 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 0, 10) self._jPanel.add(self._scrolltable, self._jPanelConstraints) self._table = JTable(self._tableModelHeaders) self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS) self._table.getModel().addTableModelListener( MyTableModelListener(self._table, self, 2)) self._scrolltable = JScrollPane(self._table) self._scrolltable.setMinimumSize(Dimension(300, 200)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 2 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 0, 10) self._jPanel.add(self._scrolltable, self._jPanelConstraints) self._table = JTable(self._tableModelParams) self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS) self._table.getModel().addTableModelListener( MyTableModelListener(self._table, self, 3)) self._scrolltable = JScrollPane(self._table) self._scrolltable.setMinimumSize(Dimension(300, 200)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 4 self._jPanelConstraints.gridy = 2 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 0, 0) self._jPanel.add(self._scrolltable, self._jPanelConstraints) addPayloadButton = swing.JButton('Add', actionPerformed=self.addToPayload) addPayloadButton.setBackground(Color.WHITE) addPayloadButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL # self._jPanelConstraints.anchor = GridBagConstraints.CENTER self._jPanelConstraints.gridx = 1 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 10) self._jPanel.add(addPayloadButton, self._jPanelConstraints) deletePayloadButton = swing.JButton( 'Delete', actionPerformed=self.deleteToPayload) deletePayloadButton.setBackground(Color.WHITE) deletePayloadButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(deletePayloadButton, self._jPanelConstraints) addHeaderButton = swing.JButton('Add', actionPerformed=self.addToHeader) addHeaderButton.setBackground(Color.WHITE) addHeaderButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL # self._jPanelConstraints.anchor = GridBagConstraints.CENTER self._jPanelConstraints.gridx = 3 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 10) self._jPanel.add(addHeaderButton, self._jPanelConstraints) deleteHeaderButton = swing.JButton('Delete', actionPerformed=self.deleteToHeader) deleteHeaderButton.setBackground(Color.WHITE) deleteHeaderButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(deleteHeaderButton, self._jPanelConstraints) addParamsButton = swing.JButton('Add', actionPerformed=self.addToParams) addParamsButton.setBackground(Color.WHITE) addParamsButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL # self._jPanelConstraints.anchor = GridBagConstraints.CENTER self._jPanelConstraints.gridx = 5 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(addParamsButton, self._jPanelConstraints) deleteParamsButton = swing.JButton('Delete', actionPerformed=self.deleteToParams) deleteParamsButton.setBackground(Color.WHITE) deleteParamsButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 4 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(deleteParamsButton, self._jPanelConstraints) self._resultsTextArea = swing.JTextArea() resultsOutput = swing.JScrollPane(self._resultsTextArea) resultsOutput.setMinimumSize(Dimension(800, 200)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 4 self._jPanelConstraints.gridwidth = 6 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(10, 0, 0, 0) self._jPanel.add(resultsOutput, self._jPanelConstraints) self.clearSearchButton = swing.JButton( 'Clear Search Output', actionPerformed=self.clearOutput) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL # self._jPanelConstraints.anchor = GridBagConstraints.CENTER self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 5 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(self.clearSearchButton, self._jPanelConstraints) self._callbacks.customizeUiComponent(self._jPanel) self._callbacks.addSuiteTab(self) # register ourselves as an HTTP listener self._callbacks.registerHttpListener(self) return # def onCheck(self, event): # if self._checkBoxPayload.isSelected() and self.table_flag != 0: # self.table_flag = 0 # self._checkBoxHeader.setSelected(False) # self._checkBoxParam.setSelected(False) # if self._checkBoxHeader.isSelected() and self.table_flag != 1: # self.table_flag = 1 # self._checkBoxParam.setSelected(False) # self._checkBoxPayload.setSelected(False) # if self._checkBoxParam.isSelected() and self.table_flag != 2: # self.table_flag = 2 # self._checkBoxHeader.setSelected(False) # self._checkBoxPayload.setSelected(False) # run Query for Add to Queue Button def addToPayload(self, button): self._tableModelPayloads.insertRow( self._tableModelPayloads.getRowCount(), ['', '']) # self.appendToResults(str(self._tableModelPayloads.getDataVector())) def addToHeader(self, button): self._tableModelHeaders.insertRow( self._tableModelHeaders.getRowCount(), ['', '']) def addToParams(self, button): self._tableModelParams.insertRow(self._tableModelParams.getRowCount(), ['', '']) def deleteToPayload(self, button): self._tableModelPayloads.removeRow( self._tableModelPayloads.getRowCount() - 1) # self.appendToResults(str(self._tableModelPayloads.getDataVector())) def deleteToHeader(self, button): self._tableModelHeaders.removeRow( self._tableModelHeaders.getRowCount() - 1) # self.appendToResults(str(self._tableModelHeaders.getDataVector())) def deleteToParams(self, button): self._tableModelParams.removeRow(self._tableModelParams.getRowCount() - 1) # self.appendToResults(str(self._tableModelParams.getDataVector())) # Clear Queue Function def clearQueue(self, button): table_number = self.table_flag if table_number == 0: data = self._tableModelPayloads.getDataVector() try: self._dictPayloads.pop(data[-1][0]) except Exception: pass self._tableModelPayloads.removeRow( self._tableModelPayloads.getRowCount() - 1) elif table_number == 1: data = self._tableModelHeaders.getDataVector() try: self._dictHeaders.pop(data[-1][0]) except Exception: pass self._tableModelHeaders.removeRow( self._tableModelHeaders.getRowCount() - 1) elif table_number == 2: data = self._tableModelParams.getDataVector() try: self._dictParams.pop(data[-1][0]) except Exception: pass self._tableModelParams.removeRow( self._tableModelParams.getRowCount() - 1) def updateTables(self, button): self._dictPayloads = { x[0]: x[1] for x in self._tableModelPayloads.getDataVector() } self._dictHeaders = { x[0]: x[1] for x in self._tableModelHeaders.getDataVector() } self._dictParams = { x[0]: x[1] for x in self._tableModelParams.getDataVector() } # Clear GUI Output Function def clearOutput(self, button): self._resultsTextArea.setText("") def active_flag(self, button): if not self.status_flag: for idx, key in enumerate(self._dictHeaders): if self._dictHeaders[key] == '1': self._dictPayloads_headers[key] = self._dictHeaders[key] for idx, key in enumerate(self._dictParams): if self._dictParams[key] == '1': self._dictPayloads_params[key] = self._dictParams[key] self.status_flag = True self.submitSearchButton.setBackground(Color.GRAY) self.appendToResults("Proxy start...") elif self.status_flag: self.status_flag = False self.submitSearchButton.setBackground(Color.WHITE) self.appendToResults("Proxy stop...") def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo): try: if not self.status_flag: return # only process requests if not messageIsRequest: return requestString = messageInfo.getRequest().tostring() listHeader = re.findall('([\w-]+):\s?(.*)', requestString) dictRealHeaders = {x[0].lower(): x[1] for x in listHeader} # self.appendToResults(str(self._dictHeaders)) for index, key in enumerate(self._dictPayloads_headers): if key.lower() in dictRealHeaders.keys(): if len(self._dictPayloads.keys()) == 0: pass else: payload = random.choice(self._dictPayloads.keys()) # payload = payload.replace("$HEADER$", self._jTextFieldURL.text, 1) payload = payload.replace("$URL$", self._jTextFieldURL.text, 1) requestString = requestString.replace( dictRealHeaders.get(key.lower()), payload, 1) else: pass listParam = re.findall('[\?|\&]([^=]+)\=([^& ])+', requestString) dictRealParams = {x[0].lower(): x[1] for x in listParam} url = requestString.split(" HTTP/1.") for index, key in enumerate(self._dictPayloads_params): if key.lower() in dictRealParams.keys(): if len(self._dictPayloads.keys()) == 0: pass else: payload = random.choice(self._dictPayloads.keys()) # payload = payload.replace("$PARAM$", self._jTextFieldURL.text, 1) payload = payload.replace("$URL$", self._jTextFieldURL.text, 1) url[0] = url[0].replace( dictRealParams.get(key.lower()), payload, 1) else: pass requestString = "{} HTTP/1.{}".format(url[0], url[1]) self.appendToResults(requestString.encode()) messageInfo.setRequest(requestString.encode()) except Exception as msg: self.appendToResults(msg) # Fnction to provide output to GUI def appendToResults(self, s): """Appends results to the resultsTextArea in a thread safe mannor. Results will be appended in the order that this function is called. """ def appendToResults_run(s): self._resultsTextArea.append(s) self._resultsTextArea.append('\n') swing.SwingUtilities.invokeLater(PyRunnable(appendToResults_run, s)) def getTabCaption(self): return self.name def getUiComponent(self): return self._jPanel
class BurpExtender(IBurpExtender, ITab): # # implement IBurpExtender # def registerExtenderCallbacks(self, callbacks): # set our extension name callbacks.setExtensionName("War Story") # obtain our output stream self._stdout = PrintWriter(callbacks.getStdout(), True) # write a message to our output stream self._stdout.println("Loading WarStory") # write a message to the Burp alerts tab callbacks.issueAlert("Hello alerts") label = JLabel("INFO PANEL") self.infoPanel = JPanel() footerPanel = JPanel() footerPanel.add(JLabel("by Tim mcgyver5 McGuire")) self._chooseFileButton = JButton("OPEN WAR FILE", actionPerformed=self.fileButtonClick) self.infoPanel.add(JLabel("THIS IS INFORMATION PANE")) self.infoPanel.add(self._chooseFileButton) # iaap.war|web.xml|axServlet|/skuppy/axservlet.do| self._chooseFileButton.setEnabled(True) initial_row = ['a', 'bb', 'ccc', 'ddd', 'eeee'] self.fileTable = JTable(ResourceTableModel(initial_row)) scrollpane = JScrollPane(self.fileTable) ## this is a split inside the top component topPane = JSplitPane(JSplitPane.VERTICAL_SPLIT) topPane.setTopComponent(self.infoPanel) topPane.setBottomComponent(scrollpane) # split the top panel into a Panel and a JScrollPane self._splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT) self._splitpane.setTopComponent(topPane) self._splitpane.setBottomComponent(footerPanel) callbacks.addSuiteTab(self) def populateJTable(self, f): filename = f.getPath() tableModel = self.fileTable.getModel() test_row = ["a", "b", "doo", "dah", "dob"] re = Resource("Servlet", "bingServlet", "bingservlet.do", [], [], "GET") self._stdout.println("populatin table model") tableModel.addRow(test_row) def fileButtonClick(self, e): fileTypeList = ["war", "ear", "zip"] warFilter = FileNameExtensionFilter("war", fileTypeList) fileChooser = JFileChooser() fileChooser.addChoosableFileFilter(warFilter) result = fileChooser.showOpenDialog(self._splitpane) if result == JFileChooser.APPROVE_OPTION: f = fileChooser.getSelectedFile() fileName = f.getPath() self.populateJTable(f) # Implement ITab def getTabCaption(self): return "War Story" def getUiComponent(self): return self._splitpane
class BurpExtender(IBurpExtender, ITab, IHttpListener): def registerExtenderCallbacks(self, callbacks): self.callbacks = callbacks self.helpers = callbacks.getHelpers() self.callbacks.setExtensionName("KkMultiProxy") self.PROXY_LIST = [] self.jPanel = JPanel() boxVertical = Box.createVerticalBox() boxHorizontal = Box.createHorizontalBox() boxHorizontal.add(JButton("File", actionPerformed=self.getFile)) self.FileText = JTextField("") boxHorizontal.add(self.FileText) boxVertical.add(boxHorizontal) TableHeader = ('IP', 'PORT') TableModel = DefaultTableModel(self.PROXY_LIST, TableHeader) self.Table = JTable(TableModel) boxVertical.add(self.Table) boxHorizontal = Box.createHorizontalBox() boxHorizontal.add(JButton("Add", actionPerformed=self.addIP)) boxHorizontal.add(JButton("Delete", actionPerformed=self.deleteIP)) boxHorizontal.add(JButton("Save", actionPerformed=self.saveIP)) boxVertical.add(boxHorizontal) self.jPanel.add(boxVertical) self.callbacks.addSuiteTab(self) self.callbacks.registerHttpListener(self) return def getFile(self, button): dlg = JFileChooser() result = dlg.showOpenDialog(None) if result == JFileChooser.APPROVE_OPTION: f = dlg.getSelectedFile() path = f.getPath() self.FileText.setText(path) try: self.getIPList(path) except: exit(0) def addIP(self, button): #chooser = JFileChooser() #chooser.showOpenDialog(None) demo = DialogDemo(self.Table) def deleteIP(self, button): selectRows = len(self.Table.getSelectedRows()) TableModel = self.Table.getModel() if selectRows: selectedRowIndex = self.Table.getSelectedRow() TableModel.removeRow(selectedRowIndex) def saveIP(self, button): TableModel = self.Table.getModel() rowCount = TableModel.getRowCount() result_str = "" for i in range(rowCount): if i == 0: result_str += TableModel.getValueAt( i, 0) + ':' + TableModel.getValueAt(i, 1) else: result_str += '|' + TableModel.getValueAt( i, 0) + ':' + TableModel.getValueAt(i, 1) print result_str f = open(self.FileText.getText(), 'w+') f.write(result_str) f.close() def getTabCaption(self): return "MultiProxy" def getUiComponent(self): return self.jPanel def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo): if messageIsRequest: httpService = messageInfo.getHttpService() print httpService.getHost() # if the host is HOST_FROM, change it to HOST_TO i = randint(0, len(self.TableDatas) - 1) messageInfo.setHttpService( self.helpers.buildHttpService(self.PROXY_LIST[i]['ip'], self.PROXY_LIST[i]['port'], httpService.getProtocol())) print messageInfo.getHttpService().getHost() def getIPList(self, path): f = open(path, 'r+') content = f.read() f.close() if content: ip_array = content.split('|') for _ip in ip_array: ip = _ip.split(':')[0] port = _ip.split(':')[1] self.PROXY_LIST.append([ip, port]) print self.PROXY_LIST
class LINAC_SetUp_Controller: def __init__(self,linac_wizard_document): #--- linac_wizard_document the parent document for all controllers self.linac_wizard_document = linac_wizard_document self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #------tables with Seq. names and button tables_panel = JPanel(BorderLayout()) tables_panel.setBorder(etched_border) self.first_table = JTable(WS_Records_Table_Model("First ")) self.last_table = JTable(WS_Records_Table_Model("Last ")) self.first_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.last_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.first_table.setFillsViewportHeight(true) self.last_table.setFillsViewportHeight(true) tables01_panel = JPanel(BorderLayout()) scrl_panel0 = JScrollPane(self.first_table) scrl_panel1 = JScrollPane(self.last_table) #tables01_panel.add(JScrollPane(self.first_table),BorderLayout.WEST) #tables01_panel.add(JScrollPane(self.last_table),BorderLayout.EAST) self.first_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER) self.last_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER) self.first_table.setPreferredScrollableViewportSize(Dimension(120,300)) self.last_table.setPreferredScrollableViewportSize(Dimension(120,300)) tables01_panel.add(scrl_panel0,BorderLayout.WEST) tables01_panel.add(scrl_panel1,BorderLayout.EAST) tables_button_panel = JPanel(BorderLayout()) tables_button_panel.add(tables01_panel,BorderLayout.WEST) seq_button_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) seq_set_button = JButton(" Set ComboSequence ") seq_button_panel.add(seq_set_button) tables_button_panel.add(seq_button_panel,BorderLayout.SOUTH) tables_panel.add(tables_button_panel,BorderLayout.NORTH) self.main_panel.add(tables_panel,BorderLayout.WEST) #--------central panel------- cav_amp_phase_button = JButton(" Read Cavities Amp.&Phases from Ext. File ") cav_info_from_scl_tuneup_button = JButton("Get SCL Cav. Amp.&Phases from SCL Long. TuneUp") new_accelerator_button = JButton(" Setup a New Accelerator File ") center_buttons_panel0 = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) center_buttons_panel0.add(cav_amp_phase_button) center_buttons_panel1 = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) center_buttons_panel1.add(cav_info_from_scl_tuneup_button) center_buttons_panel2 = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) center_buttons_panel2.add(new_accelerator_button) center_buttons_panel = JPanel(GridLayout(3,1)) center_buttons_panel.add(center_buttons_panel0) center_buttons_panel.add(center_buttons_panel1) center_buttons_panel.add(center_buttons_panel2) center_panel = JPanel(BorderLayout()) center_panel.add(center_buttons_panel,BorderLayout.NORTH) self.main_panel.add(center_panel,BorderLayout.CENTER) #---------add actions listeners seq_set_button.addActionListener(Make_Sequence_Listener(self)) cav_amp_phase_button.addActionListener(Read_Cav_Amp_Phase_Dict_Listener(self)) cav_info_from_scl_tuneup_button.addActionListener(Get_SCL_Cav_Amp_Phase_Listener(self)) new_accelerator_button.addActionListener(SetUp_New_Accelerator_Listener(self)) def getMainPanel(self): return self.main_panel def setSelectedSequences(self,first_seq_name,last_seq_name): index0 = self.first_table.getModel().accSeqName_arr.index(first_seq_name) index1 = self.last_table.getModel().accSeqName_arr.index(last_seq_name) self.first_table.setRowSelectionInterval(index0,index0) self.last_table.setRowSelectionInterval(index1,index1) def getSelectedSequencesNames(self): first_table = self.first_table index0 = first_table.getSelectedRow() last_table = self.last_table index1 = last_table.getSelectedRow() if(index0 < 0 or index1 < 0): return [] seq_names = [] if(index0 == index1): seq_names.append(first_table.getModel().accSeqName_arr[index0]) else: if(index1 < index0): (index0,index1) = (index1,index0) for i in range(index0,index1+1): seq_names.append(first_table.getModel().accSeqName_arr[i]) return seq_names def setAccSeqNames(self,seq_names): accl = self.linac_wizard_document.getAccl() if(len(seq_names) == 0): accSeq = null self.linac_wizard_document.setAccSeq(accSeq) return lst = ArrayList() for seqName in seq_names: lst.add(accl.getSequence(seqName)) accSeq = AcceleratorSeqCombo("SEQUENCE", lst) self.linac_wizard_document.setAccSeq(accSeq) def getCavNameNodeDict(self,accl): rf_gaps = accl.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType))) cavs = [] for rf_gap in rf_gaps: cav = rf_gap.getParent() if(cav not in cavs): cavs.append(cav) cav_name_node_dict = {} cav_names = [] for cav in cavs: cav_names.append(cav.getId()) cav_name_node_dict[cav.getId()] = cav return cav_name_node_dict
class Plugin(IHttpListener): MUTATE_ID_COLUMN_INDEX = 4 ORIG_ID_COLUMN_INDEX = 5 def __init__(self, callbacks): self.callbacks = callbacks self.helpers = self.callbacks.getHelpers() self.origMessageEditorController = MessageEditorController() self.mutatedMessageEditorController = MessageEditorController() self.origSearchString = replacements.origSearchString self.replacements = replacements.replacements self.requestResponseCache = {} def start(self): self.frame = JDialog() #self.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.frame.setLocation(0, 1500) self.frame.setSize(1000, 200) self.tableDataModel = DefaultTableModel([], [ "URL", "Code", "Content-Length", "Location", "Mutated Id", "Orig Id" ]) self.jtable = JTable(self.tableDataModel) scrollPane = JScrollPane(self.jtable) self.jtable.setFillsViewportHeight(True) messageEditorOrig = self.callbacks.createMessageEditor(None, False) messageEditorModified = self.callbacks.createMessageEditor( None, False) self.editorSplitPane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT, messageEditorOrig.getComponent(), messageEditorModified.getComponent()) self.editorSplitPane.setResizeWeight(0.5) splitPane = JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPane, self.editorSplitPane) splitPane.setResizeWeight(0.5) class TableSelector(ListSelectionListener): def __init__(self, plugin): self.plugin = plugin def valueChanged(self, event): if not event.getValueIsAdjusting(): selectedRowIndex = self.plugin.jtable.getSelectedRows()[0] self.plugin._rowSelected(selectedRowIndex) self.jtable.getSelectionModel().addListSelectionListener( TableSelector(self)) self.frame.add(splitPane) self.frame.setVisible(True) self.callbacks.registerHttpListener(self) self.callbacks.setExtensionName("Custom Plugin") return def stop(self): print("Closing!") self.callbacks.removeHttpListener(self) self.frame.dispose() self.jrame = None return def _rowSelected(self, index): #self.splitPane.setLeftComponent( #self.callbacks.createMessageEditor( origId = self.tableDataModel.getValueAt( index, self.ORIG_ID_COLUMN_INDEX).encode('ascii', 'ignore') mutateId = self.tableDataModel.getValueAt( index, self.MUTATE_ID_COLUMN_INDEX).encode('ascii', 'ignore') self.origMessageEditorController.setRequestResponse( self.requestResponseCache[origId]) messageEditorOrig = self.callbacks.createMessageEditor( self.origMessageEditorController, False) messageEditorOrig.setMessage( self.requestResponseCache[origId].getResponse(), False) self.editorSplitPane.setLeftComponent(messageEditorOrig.getComponent()) self.mutatedMessageEditorController.setRequestResponse( self.requestResponseCache[mutateId]) messageEditorMutated = self.callbacks.createMessageEditor( self.mutatedMessageEditorController, False) messageEditorMutated.setMessage( self.requestResponseCache[mutateId].getResponse(), False) self.editorSplitPane.setRightComponent( messageEditorMutated.getComponent()) print(mutateId) print("Row selected") print(str(index)) def _buildResponseHeadersDictionary(self, headers): """Creates key/value lookup from list of headers. Header names are converted to lowercase. If header is returned multiple time, last header has precedence.""" d = {} #Skip first "header", it's the response code line. for i in range(1, len(headers)): (name, value) = headers[i].split(":", 1) d[name.lower()] = value return d def _getDictValueOrEmptyStr(self, d, key): if key in d: return d[key] else: return "" def handleReceivedResponseForModifiedRequest(self, requestResponse): #Get original HTTP Request requestData = StringUtil.fromBytes(requestResponse.getRequest()) requestId = re.search(b"^X-REQUEST-ID: ([^\r]*)", requestData, flags=re.MULTILINE).group(1).encode('ascii') origRequestId = re.search(b"^X-REQUEST-ORIG-ID: ([^\r]*)", requestData, flags=re.MULTILINE).group(1).encode('ascii') print("Keys") print(requestId) print(origRequestId) print(self.requestResponseCache.keys()) self.requestResponseCache[requestId] = requestResponse origRequestResponse = self.requestResponseCache[origRequestId] analyzedOrigResponse = self.helpers.analyzeResponse( origRequestResponse.getResponse()) analayzeMutatedResponse = self.helpers.analyzeResponse( requestResponse.getResponse()) origResponseHeaders = self._buildResponseHeadersDictionary( analyzedOrigResponse.getHeaders()) mutatedResponseHeaders = self._buildResponseHeadersDictionary( analayzeMutatedResponse.getHeaders()) mutatedRequestInfo = self.helpers.analyzeRequest( requestResponse.getHttpService(), requestResponse.getRequest()) model = self.jtable.getModel() model.addRow([ str(mutatedRequestInfo.getUrl()), str(analayzeMutatedResponse.getStatusCode()), self._getDictValueOrEmptyStr(mutatedResponseHeaders, "content-length"), self._getDictValueOrEmptyStr(mutatedResponseHeaders, "location"), requestId, origRequestId ]) print("Modified Request Found: %s %s" % (requestId, origRequestId)) #Get original request and response object from lookup #Get request from lookup def processHttpMessage(self, toolFlag, messageIsRequest, requestResponse): if not messageIsRequest: requestData = StringUtil.fromBytes(requestResponse.getRequest()) #We generated the request, process it if requestData.find(b"X-REQUEST-ID") != -1: self.handleReceivedResponseForModifiedRequest(requestResponse) #Response received for non-mutated request. #Mutate request and send it. else: origRequestResponseUUID = str(uuid.uuid4()) reload(replacements) print("Looking for replacements") for replacement in self.replacements: newRequestData = re.sub(self.origSearchString, replacement, requestData) #If no replacemnets made, don't send any requests if newRequestData != requestData: newRequestUUID = str(uuid.uuid4()) newRequestData = re.sub( b"Host", b"X-REQUEST-ID: " + newRequestUUID + "\r\nHost", requestData) newRequestData = re.sub( b"Host", b"X-REQUEST-ORIG-ID: " + origRequestResponseUUID + "\r\nHost", newRequestData) print("Sending Mutated Request") print(newRequestData) self.requestResponseCache[ origRequestResponseUUID] = requestResponse httpService = requestResponse.getHttpService() self.callbacks.makeHttpRequest(httpService, newRequestData) print("Got here")
class BurpExtender(IBurpExtender, ITab): # # implement IBurpExtender # def hello(self): return "hello" def process_file(self, file): freshrows = [] # return list of list of file parts for url in file: result = urlparse(url) scheme = result[0] domain = result[0] path = result[0] params = '' query = '' fragment = '' next = [scheme, domain, path, params, query, fragment] freshrows.append(next) return freshrows def registerExtenderCallbacks(self, callbacks): # set our extension name callbacks.setExtensionName("Hello world extension") # obtain our output and error streams stdout = PrintWriter(callbacks.getStdout(), True) stderr = PrintWriter(callbacks.getStderr(), True) # write a message to our output stream stdout.println("Hello output") # write a message to our error stream stderr.println("Hello errors") # write a message to the Burp alerts tab callbacks.issueAlert("Hello alerts") #create and populate a jtable: initial_row = [ 'http', 'www.meetup.com', 'PyMNtos-Twin-Cities-Python-User-Group/events/267977020/', '', '', '' ] self.fileTable = JTable(ResourceTableModel(initial_row)) # set up the Tab: self.infoPanel = JPanel() footerPanel = JPanel() footerPanel.add(JLabel("by mcgyver5 ")) self._chooseFileButton = JButton("OPEN Local FILE", actionPerformed=self.fileButtonClick) self.infoPanel.add(JLabel("INFORMATION PANE")) self.infoPanel.add(self._chooseFileButton) scrollpane = JScrollPane(self.fileTable) ## this is a split inside the top component topPane = JSplitPane(JSplitPane.VERTICAL_SPLIT) topPane.setTopComponent(self.infoPanel) topPane.setBottomComponent(scrollpane) self._chooseFileButton.setEnabled(True) self._splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT) self._splitpane.setTopComponent(topPane) self._splitpane.setBottomComponent(footerPanel) callbacks.addSuiteTab(self) def populateTableModel(self, results): tableModel = self.fileTable.getModel() for row in results: tableModel.addRow(row) def fileButtonClick(self, callbacks): fileTypeList = ["csv", "txt", "json"] txtFilter = FileNameExtensionFilter("txt", fileTypeList) fileChooser = JFileChooser() fileChooser.addChoosableFileFilter(txtFilter) result = fileChooser.showOpenDialog(self._splitpane) if result == JFileChooser.APPROVE_OPTION: f = fileChooser.getSelectedFile() fileName = f.getPath() self.populateTableModel(f) ## Implement ITab: def getTabCaption(self): return "Import URLs" def getUiComponent(self): return self._splitpane
class PreferencesFrame(JFrame, ActionListener, WindowListener, ItemListener, HyperlinkListener): """Dialog with preferences """ def __init__(self, parent, title, app): from javax.swing import JCheckBox, JRadioButton, ButtonGroup self.app = app border = BorderFactory.createEmptyBorder(5, 7, 5, 7) self.getContentPane().setBorder(border) self.getContentPane().setLayout(BorderLayout(0, 5)) self.tabbedPane = JTabbedPane() #1 Tab: general panel1 = JPanel() panel1.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) panel1.setLayout(BoxLayout(panel1, BoxLayout.PAGE_AXIS)) #Checkbutton to enable/disable update check when script starts self.updateCBtn = JCheckBox(self.app.strings.getString("updateCBtn")) self.updateCBtn.setToolTipText( self.app.strings.getString("updateCBtn_tooltip")) #Download tools downloadBtn = JButton(self.app.strings.getString("updatesBtn"), ImageProvider.get("dialogs", "refresh"), actionPerformed=self.on_downloadBtn_clicked) downloadBtn.setToolTipText( self.app.strings.getString("updatesBtn_tooltip")) #Checkbuttons for enabling/disabling tools toolsPanel = JPanel(BorderLayout(0, 5)) title = self.app.strings.getString("enable_disable_tools") toolsPanel.setBorder(BorderFactory.createTitledBorder(title)) infoLbl = JLabel(self.app.strings.getString("JOSM_restart_warning")) infoLbl.setFont(infoLbl.getFont().deriveFont(Font.ITALIC)) toolsPanel.add(infoLbl, BorderLayout.PAGE_START) toolsStatusPane = JPanel(GridLayout(len(self.app.realTools), 0)) self.toolsCBtns = [] for tool in self.app.realTools: toolCBtn = JCheckBox() toolCBtn.addItemListener(self) toolLbl = JLabel(tool.title, tool.bigIcon, JLabel.LEFT) self.toolsCBtns.append(toolCBtn) toolPane = JPanel() toolPane.setLayout(BoxLayout(toolPane, BoxLayout.X_AXIS)) toolPane.add(toolCBtn) toolPane.add(toolLbl) toolsStatusPane.add(toolPane) toolsPanel.add(toolsStatusPane, BorderLayout.CENTER) #Radiobuttons for enabling/disabling layers when a new one #is added layersPanel = JPanel(GridLayout(0, 1)) title = self.app.strings.getString("errors_layers_manager") layersPanel.setBorder(BorderFactory.createTitledBorder(title)) errorLayersLbl = JLabel( self.app.strings.getString("errors_layers_info")) errorLayersLbl.setFont(errorLayersLbl.getFont().deriveFont( Font.ITALIC)) layersPanel.add(errorLayersLbl) self.layersRBtns = {} group = ButtonGroup() for mode in self.app.layersModes: layerRBtn = JRadioButton(self.app.strings.getString("%s" % mode)) group.add(layerRBtn) layersPanel.add(layerRBtn) self.layersRBtns[mode] = layerRBtn #Max number of errors text field self.maxErrorsNumberTextField = JTextField() self.maxErrorsNumberTextField.setToolTipText( self.app.strings.getString("maxErrorsNumberTextField_tooltip")) self.maxErrorsNumberTFieldDefaultBorder = self.maxErrorsNumberTextField.getBorder( ) self.maxErrorsNumberTextField.getDocument().addDocumentListener( ErrNumTextListener(self)) #layout self.updateCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(self.updateCBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) downloadBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(downloadBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) toolsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(toolsPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) layersPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(layersPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) maxErrP = JPanel(BorderLayout(5, 0)) maxErrP.add(JLabel(self.app.strings.getString("max_errors_number")), BorderLayout.LINE_START) maxErrP.add(self.maxErrorsNumberTextField, BorderLayout.CENTER) p = JPanel(BorderLayout()) p.add(maxErrP, BorderLayout.PAGE_START) p.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_1_title"), None, panel1, None) #2 Tab: favourite zones panel2 = JPanel(BorderLayout(5, 15)) panel2.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) #status topPanel = JPanel() topPanel.setLayout(BoxLayout(topPanel, BoxLayout.Y_AXIS)) infoPanel = HtmlPanel(self.app.strings.getString("fav_zones_info")) infoPanel.getEditorPane().addHyperlinkListener(self) infoPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.favZoneStatusCBtn = JCheckBox( self.app.strings.getString("activate_fav_area"), actionListener=self) self.favZoneStatusCBtn.setToolTipText( self.app.strings.getString("activate_fav_area_tooltip")) self.favZoneStatusCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) topPanel.add(infoPanel) topPanel.add(Box.createRigidArea(Dimension(0, 10))) topPanel.add(self.favZoneStatusCBtn) #table self.zonesTable = JTable() tableSelectionModel = self.zonesTable.getSelectionModel() tableSelectionModel.addListSelectionListener(ZonesTableListener(self)) columns = [ "", self.app.strings.getString("Type"), self.app.strings.getString("Name") ] tableModel = ZonesTableModel([], columns) self.zonesTable.setModel(tableModel) self.scrollPane = JScrollPane(self.zonesTable) #map self.zonesMap = JMapViewer() self.zonesMap.setZoomContolsVisible(False) self.zonesMap.setMinimumSize(Dimension(100, 200)) #buttons self.removeBtn = JButton(self.app.strings.getString("Remove"), ImageProvider.get("dialogs", "delete"), actionPerformed=self.on_removeBtn_clicked) self.removeBtn.setToolTipText( self.app.strings.getString("remove_tooltip")) newBtn = JButton(self.app.strings.getString("New"), ImageProvider.get("dialogs", "add"), actionPerformed=self.on_newBtn_clicked) newBtn.setToolTipText(self.app.strings.getString("new_tooltip")) #layout panel2.add(topPanel, BorderLayout.PAGE_START) panel2.add(self.scrollPane, BorderLayout.LINE_START) panel2.add(self.zonesMap, BorderLayout.CENTER) self.buttonsPanel = JPanel() self.buttonsPanel.add(self.removeBtn) self.buttonsPanel.add(newBtn) panel2.add(self.buttonsPanel, BorderLayout.PAGE_END) self.tabbedPane.addTab(self.app.strings.getString("tab_2_title"), None, panel2, None) #3 Tab Tools options panel3 = JPanel() panel3.setLayout(BoxLayout(panel3, BoxLayout.Y_AXIS)) panel3.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) for tool in self.app.realTools: if hasattr(tool, 'prefs'): p = JPanel(FlowLayout(FlowLayout.LEFT)) p.setBorder(BorderFactory.createTitledBorder(tool.title)) p.add(tool.prefsGui) panel3.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_3_title"), None, panel3, None) self.add(self.tabbedPane, BorderLayout.CENTER) exitPanel = JPanel() saveBtn = JButton(self.app.strings.getString("OK"), ImageProvider.get("ok"), actionPerformed=self.on_saveBtn_clicked) cancelBtn = JButton(self.app.strings.getString("cancel"), ImageProvider.get("cancel"), actionPerformed=self.on_cancelBtn_clicked) saveBtn.setToolTipText(self.app.strings.getString("save_preferences")) saveBtn.setAlignmentX(0.5) exitPanel.add(saveBtn) exitPanel.add(cancelBtn) self.add(exitPanel, BorderLayout.PAGE_END) self.addWindowListener(self) self.pack() def windowClosing(self, windowEvent): self.on_cancelBtn_clicked() def hyperlinkUpdate(self, e): if e.getEventType() == HyperlinkEvent.EventType.ACTIVATED: OpenBrowser.displayUrl(e.getURL().toString()) def itemStateChanged(self, e): """A ttol has been activated/deactivated. Check if at least one tool is on. """ if all(not button.isSelected() for button in self.toolsCBtns): JOptionPane.showMessageDialog( Main.parent, self.app.strings.getString("tools_disabled_warning"), self.app.strings.getString("tools_disabled_warning_title"), JOptionPane.WARNING_MESSAGE) source = e.getItemSelectable() source.setSelected(True) def actionPerformed(self, e=None): """Enable/disable favourite zones panel """ for container in (self.scrollPane, self.buttonsPanel): self.enableComponents(container, self.favZoneStatusCBtn.isSelected()) if self.favZoneStatusCBtn.isSelected(): self.check_removeBtn_status() def enableComponents(self, container, enable): components = container.getComponents() for component in components: component.setEnabled(enable) if isinstance(component, Container): self.enableComponents(component, enable) def on_downloadBtn_clicked(self, e): update_checker.Updater(self.app, "manual") def clean_map(self): """Remove all rectangles and polygons from the map """ self.zonesMap.removeAllMapRectangles() self.zonesMap.removeAllMapPolygons() def update_gui_from_preferences(self): """Update gui status of preferences frame from config file """ #print "\n- updating Preferences gui" onOff = {"on": True, "off": False} #1 Tab #check for update self.updateCBtn.setSelected(onOff[self.app.checkUpdate]) #tools status, enabled or not for toolIndex, tool in enumerate(self.app.realTools): if "tool.%s" % tool.name in self.app.properties.keys(): configstatus = self.app.properties.getProperty("tool.%s" % tool.name) else: configstatus = "on" # new tool self.toolsCBtns[toolIndex].setSelected(onOff[configstatus]) #layers preferences for mode, button in self.layersRBtns.iteritems(): button.setSelected(mode == self.app.layersMode) #max errors number self.maxErrorsNumberTextField.setText(str(self.app.maxErrorsNumber)) #stats panel self.app.dlg.update_favourite_zone_indicator() #2 Tab #favourite area self.update_favourite_area_gui_from_preferences() self.app.dlg.update_statsPanel_status() #3 Tab #tools preferences for tool in self.app.allTools: if hasattr(tool, 'prefs') and tool.prefsGui is not None: tool.prefsGui.update_gui(tool.prefs) def update_favourite_area_gui_from_preferences(self): #status self.favZoneStatusCBtn.setSelected(self.app.favouriteZoneStatus) #table #store zones to a temporary list, used to store changes #and save them when preferences dialog is closed self.app.tempZones = list(self.app.zones) self.zonesTable.getModel().setNumRows(0) for zone in self.app.tempZones: self.zonesTable.getModel().addRow( [zone.country, zone.icon, zone.name]) if self.app.favZone is not None: selectedRow = self.app.tempZones.index(self.app.favZone) self.zonesTable.setRowSelectionInterval(selectedRow, selectedRow) self.zonesTable.getColumnModel().getColumn(0).setMaxWidth(30) self.zonesTable.getColumnModel().getColumn(1).setMaxWidth(50) #enable or disable favourite zone buttons self.actionPerformed() ### fav area editing buttons ########################################### def on_removeBtn_clicked(self, e): rowsNum = self.zonesTable.getSelectedRows() rowsNum.reverse() for rowNum in rowsNum: del self.app.tempZones[rowNum] self.zonesTable.getModel().removeRow(rowNum) if len(self.app.tempZones) != 0: if rowNum == 0: self.zonesTable.setRowSelectionInterval(0, 0) else: self.zonesTable.setRowSelectionInterval(rowNum - 1, rowNum - 1) self.check_removeBtn_status() def check_removeBtn_status(self): if self.app.tempZones != [] and len( self.zonesTable.getSelectedRows()) != 0: self.removeBtn.setEnabled(True) else: self.removeBtn.setEnabled(False) self.clean_map() def on_newBtn_clicked(self, e): try: self.newZoneDialog except AttributeError: self.newZoneDialog = NewZoneDialog(self.app) bbox = self.app.get_frame_bounds() self.app.newZone = Zone(self.app, self.app.strings.getString("New_zone"), "rectangle", ",".join(["%0.4f" % x for x in bbox]), "") self.newZoneDialog.update_gui_from_preferences() self.newZoneDialog.show() ### Exit from preferences ############################################## def on_cancelBtn_clicked(self, event=None): if hasattr(self, "newZoneDialog") and self.newZoneDialog.isVisible(): self.newZoneDialog.close_dialog() self.dispose() def on_saveBtn_clicked(self, event): """Read preferences from gui and save them to config.properties file """ #print "\n- saving preferences to config file" onOff = {True: "on", False: "off"} #1 Tab #check for update self.app.properties.setProperty("check_for_update", onOff[self.updateCBtn.isSelected()]) #tools status for toolIndex, tool in enumerate(self.app.realTools): prop = "tool.%s" % tool.name toolCBtn = self.toolsCBtns[toolIndex] self.app.properties.setProperty(prop, onOff[toolCBtn.isSelected()]) #layers preferences for mode, button in self.layersRBtns.iteritems(): if button.isSelected(): self.app.properties.setProperty("layers_mode", mode) break #max errors number try: num = Integer.parseInt(self.maxErrorsNumberTextField.getText()) except NumberFormatException: num = "" self.app.properties.setProperty("max_errors_number", str(num)) #2 Tab #Favourite zones changes = { "new": [z for z in self.app.tempZones if not z in self.app.zones], "deleted": [z for z in self.app.zones if not z in self.app.tempZones] } #delete files of removed favourite zones for zone in changes["deleted"]: f = File( File.separator.join([ self.app.SCRIPTDIR, "configuration", "favourite_zones", "%s.txt" % zone.name ])) f.delete() #create files for new favourite zones for zone in changes["new"]: print "\nsave new zone", zone.name fileName = File.separator.join([ self.app.SCRIPTDIR, "configuration", "favourite_zones", "%s.txt" % zone.name ]) f = open(fileName, "w") zoneData = zone.geomString if zone.country != "": zoneData += "|" + zone.country f.write(zoneData.encode("utf-8")) f.close() self.app.zones = self.app.tempZones if len(self.app.zones) == 0: self.app.favZone = None self.app.properties.setProperty("favourite_area.name", "") self.favZoneStatusCBtn.setSelected(False) else: if len(self.zonesTable.getSelectedRows()) == 0: self.app.favZone = self.app.zones[0] else: self.app.favZone = self.app.zones[ self.zonesTable.getSelectedRows()[0]] self.app.properties.setProperty("favourite_area.name", self.app.favZone.name) favZoneStatus = self.favZoneStatusCBtn.isSelected() self.app.properties.setProperty("favourite_area.status", onOff[favZoneStatus]) self.app.favouriteZoneStatus = favZoneStatus #stats panel self.app.dlg.update_favourite_zone_indicator() self.app.dlg.update_statsPanel_status() #3 Tab #tools preferences for tool in self.app.allTools: if hasattr(tool, 'prefs') and tool.prefsGui is not None: for pref, value in tool.prefsGui.read_gui().iteritems(): prefKey = "tool.%s.%s" % (tool.name, pref) self.app.properties.setProperty(prefKey, value) self.app.save_config() self.dispose()
class PreferencesFrame(JFrame, ActionListener, WindowListener, ItemListener, HyperlinkListener): """Dialog with preferences """ def __init__(self, parent, title, app): from javax.swing import JCheckBox, JRadioButton, ButtonGroup self.app = app border = BorderFactory.createEmptyBorder(5, 7, 5, 7) self.getContentPane().setBorder(border) self.getContentPane().setLayout(BorderLayout(0, 5)) self.tabbedPane = JTabbedPane() #1 Tab: general panel1 = JPanel() panel1.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) panel1.setLayout(BoxLayout(panel1, BoxLayout.PAGE_AXIS)) #Checkbutton to enable/disable update check when script starts self.updateCBtn = JCheckBox(self.app.strings.getString("updateCBtn")) self.updateCBtn.setToolTipText(self.app.strings.getString("updateCBtn_tooltip")) #Download tools downloadBtn = JButton(self.app.strings.getString("updatesBtn"), ImageProvider.get("dialogs", "refresh"), actionPerformed=self.on_downloadBtn_clicked) downloadBtn.setToolTipText(self.app.strings.getString("updatesBtn_tooltip")) #Checkbuttons for enabling/disabling tools toolsPanel = JPanel(BorderLayout(0, 5)) title = self.app.strings.getString("enable_disable_tools") toolsPanel.setBorder(BorderFactory.createTitledBorder(title)) infoLbl = JLabel(self.app.strings.getString("JOSM_restart_warning")) infoLbl.setFont(infoLbl.getFont().deriveFont(Font.ITALIC)) toolsPanel.add(infoLbl, BorderLayout.PAGE_START) toolsStatusPane = JPanel(GridLayout(len(self.app.realTools), 0)) self.toolsCBtns = [] for tool in self.app.realTools: toolCBtn = JCheckBox() toolCBtn.addItemListener(self) toolLbl = JLabel(tool.title, tool.bigIcon, JLabel.LEFT) self.toolsCBtns.append(toolCBtn) toolPane = JPanel() toolPane.setLayout(BoxLayout(toolPane, BoxLayout.X_AXIS)) toolPane.add(toolCBtn) toolPane.add(toolLbl) toolsStatusPane.add(toolPane) toolsPanel.add(toolsStatusPane, BorderLayout.CENTER) #Radiobuttons for enabling/disabling layers when a new one #is added layersPanel = JPanel(GridLayout(0, 1)) title = self.app.strings.getString("errors_layers_manager") layersPanel.setBorder(BorderFactory.createTitledBorder(title)) errorLayersLbl = JLabel(self.app.strings.getString("errors_layers_info")) errorLayersLbl.setFont(errorLayersLbl.getFont().deriveFont(Font.ITALIC)) layersPanel.add(errorLayersLbl) self.layersRBtns = {} group = ButtonGroup() for mode in self.app.layersModes: layerRBtn = JRadioButton(self.app.strings.getString("%s" % mode)) group.add(layerRBtn) layersPanel.add(layerRBtn) self.layersRBtns[mode] = layerRBtn #Max number of errors text field self.maxErrorsNumberTextField = JTextField() self.maxErrorsNumberTextField.setToolTipText(self.app.strings.getString("maxErrorsNumberTextField_tooltip")) self.maxErrorsNumberTFieldDefaultBorder = self.maxErrorsNumberTextField.getBorder() self.maxErrorsNumberTextField.getDocument().addDocumentListener(ErrNumTextListener(self)) #layout self.updateCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(self.updateCBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) downloadBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(downloadBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) toolsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(toolsPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) layersPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(layersPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) maxErrP = JPanel(BorderLayout(5, 0)) maxErrP.add(JLabel(self.app.strings.getString("max_errors_number")), BorderLayout.LINE_START) maxErrP.add(self.maxErrorsNumberTextField, BorderLayout.CENTER) p = JPanel(BorderLayout()) p.add(maxErrP, BorderLayout.PAGE_START) p.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_1_title"), None, panel1, None) #2 Tab: favourite zones panel2 = JPanel(BorderLayout(5, 15)) panel2.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) #status topPanel = JPanel() topPanel.setLayout(BoxLayout(topPanel, BoxLayout.Y_AXIS)) infoPanel = HtmlPanel(self.app.strings.getString("fav_zones_info")) infoPanel.getEditorPane().addHyperlinkListener(self) infoPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.favZoneStatusCBtn = JCheckBox(self.app.strings.getString("activate_fav_area"), actionListener=self) self.favZoneStatusCBtn.setToolTipText(self.app.strings.getString("activate_fav_area_tooltip")) self.favZoneStatusCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) topPanel.add(infoPanel) topPanel.add(Box.createRigidArea(Dimension(0, 10))) topPanel.add(self.favZoneStatusCBtn) #table self.zonesTable = JTable() tableSelectionModel = self.zonesTable.getSelectionModel() tableSelectionModel.addListSelectionListener(ZonesTableListener(self)) columns = ["", self.app.strings.getString("Type"), self.app.strings.getString("Name")] tableModel = ZonesTableModel([], columns) self.zonesTable.setModel(tableModel) self.scrollPane = JScrollPane(self.zonesTable) #map self.zonesMap = JMapViewer() self.zonesMap.setZoomContolsVisible(False) self.zonesMap.setMinimumSize(Dimension(100, 200)) #buttons self.removeBtn = JButton(self.app.strings.getString("Remove"), ImageProvider.get("dialogs", "delete"), actionPerformed=self.on_removeBtn_clicked) self.removeBtn.setToolTipText(self.app.strings.getString("remove_tooltip")) newBtn = JButton(self.app.strings.getString("New"), ImageProvider.get("dialogs", "add"), actionPerformed=self.on_newBtn_clicked) newBtn.setToolTipText(self.app.strings.getString("new_tooltip")) #layout panel2.add(topPanel, BorderLayout.PAGE_START) panel2.add(self.scrollPane, BorderLayout.LINE_START) panel2.add(self.zonesMap, BorderLayout.CENTER) self.buttonsPanel = JPanel() self.buttonsPanel.add(self.removeBtn) self.buttonsPanel.add(newBtn) panel2.add(self.buttonsPanel, BorderLayout.PAGE_END) self.tabbedPane.addTab(self.app.strings.getString("tab_2_title"), None, panel2, None) #3 Tab Tools options panel3 = JPanel() panel3.setLayout(BoxLayout(panel3, BoxLayout.Y_AXIS)) panel3.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) for tool in self.app.realTools: if hasattr(tool, 'prefs'): p = JPanel(FlowLayout(FlowLayout.LEFT)) p.setBorder(BorderFactory.createTitledBorder(tool.title)) p.add(tool.prefsGui) panel3.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_3_title"), None, panel3, None) self.add(self.tabbedPane, BorderLayout.CENTER) exitPanel = JPanel() saveBtn = JButton(self.app.strings.getString("OK"), ImageProvider.get("ok"), actionPerformed=self.on_saveBtn_clicked) cancelBtn = JButton(self.app.strings.getString("cancel"), ImageProvider.get("cancel"), actionPerformed=self.on_cancelBtn_clicked) saveBtn.setToolTipText(self.app.strings.getString("save_preferences")) saveBtn.setAlignmentX(0.5) exitPanel.add(saveBtn) exitPanel.add(cancelBtn) self.add(exitPanel, BorderLayout.PAGE_END) self.addWindowListener(self) self.pack() def windowClosing(self, windowEvent): self.on_cancelBtn_clicked() def hyperlinkUpdate(self, e): if e.getEventType() == HyperlinkEvent.EventType.ACTIVATED: OpenBrowser.displayUrl(e.getURL().toString()) def itemStateChanged(self, e): """A ttol has been activated/deactivated. Check if at least one tool is on. """ if all(not button.isSelected() for button in self.toolsCBtns): JOptionPane.showMessageDialog( Main.parent, self.app.strings.getString("tools_disabled_warning"), self.app.strings.getString("tools_disabled_warning_title"), JOptionPane.WARNING_MESSAGE) source = e.getItemSelectable() source.setSelected(True) def actionPerformed(self, e=None): """Enable/disable favourite zones panel """ for container in (self.scrollPane, self.buttonsPanel): self.enableComponents(container, self.favZoneStatusCBtn.isSelected()) if self.favZoneStatusCBtn.isSelected(): self.check_removeBtn_status() def enableComponents(self, container, enable): components = container.getComponents() for component in components: component.setEnabled(enable) if isinstance(component, Container): self.enableComponents(component, enable) def on_downloadBtn_clicked(self, e): update_checker.Updater(self.app, "manual") def clean_map(self): """Remove all rectangles and polygons from the map """ self.zonesMap.removeAllMapRectangles() self.zonesMap.removeAllMapPolygons() def update_gui_from_preferences(self): """Update gui status of preferences frame from config file """ #print "\n- updating Preferences gui" onOff = {"on": True, "off": False} #1 Tab #check for update self.updateCBtn.setSelected(onOff[self.app.checkUpdate]) #tools status, enabled or not for toolIndex, tool in enumerate(self.app.realTools): if "tool.%s" % tool.name in self.app.properties.keys(): configstatus = self.app.properties.getProperty("tool.%s" % tool.name) else: configstatus = "on" # new tool self.toolsCBtns[toolIndex].setSelected(onOff[configstatus]) #layers preferences for mode, button in self.layersRBtns.iteritems(): button.setSelected(mode == self.app.layersMode) #max errors number self.maxErrorsNumberTextField.setText(str(self.app.maxErrorsNumber)) #stats panel self.app.dlg.update_favourite_zone_indicator() #2 Tab #favourite area self.update_favourite_area_gui_from_preferences() self.app.dlg.update_statsPanel_status() #3 Tab #tools preferences for tool in self.app.allTools: if hasattr(tool, 'prefs') and tool.prefsGui is not None: tool.prefsGui.update_gui(tool.prefs) def update_favourite_area_gui_from_preferences(self): #status self.favZoneStatusCBtn.setSelected(self.app.favouriteZoneStatus) #table #store zones to a temporary list, used to store changes #and save them when preferences dialog is closed self.app.tempZones = list(self.app.zones) self.zonesTable.getModel().setNumRows(0) for zone in self.app.tempZones: self.zonesTable.getModel().addRow([zone.country, zone.icon, zone.name]) if self.app.favZone is not None: selectedRow = self.app.tempZones.index(self.app.favZone) self.zonesTable.setRowSelectionInterval(selectedRow, selectedRow) self.zonesTable.getColumnModel().getColumn(0).setMaxWidth(30) self.zonesTable.getColumnModel().getColumn(1).setMaxWidth(50) #enable or disable favourite zone buttons self.actionPerformed() ### fav area editing buttons ########################################### def on_removeBtn_clicked(self, e): rowsNum = self.zonesTable.getSelectedRows() rowsNum.reverse() for rowNum in rowsNum: del self.app.tempZones[rowNum] self.zonesTable.getModel().removeRow(rowNum) if len(self.app.tempZones) != 0: if rowNum == 0: self.zonesTable.setRowSelectionInterval(0, 0) else: self.zonesTable.setRowSelectionInterval(rowNum - 1, rowNum - 1) self.check_removeBtn_status() def check_removeBtn_status(self): if self.app.tempZones != [] and len(self.zonesTable.getSelectedRows()) != 0: self.removeBtn.setEnabled(True) else: self.removeBtn.setEnabled(False) self.clean_map() def on_newBtn_clicked(self, e): try: self.newZoneDialog except AttributeError: self.newZoneDialog = NewZoneDialog(self.app) bbox = self.app.get_frame_bounds() self.app.newZone = Zone(self.app, self.app.strings.getString("New_zone"), "rectangle", ",".join(["%0.4f" % x for x in bbox]), "") self.newZoneDialog.update_gui_from_preferences() self.newZoneDialog.show() ### Exit from preferences ############################################## def on_cancelBtn_clicked(self, event=None): if hasattr(self, "newZoneDialog") and self.newZoneDialog.isVisible(): self.newZoneDialog.close_dialog() self.dispose() def on_saveBtn_clicked(self, event): """Read preferences from gui and save them to config.properties file """ #print "\n- saving preferences to config file" onOff = {True: "on", False: "off"} #1 Tab #check for update self.app.properties.setProperty("check_for_update", onOff[self.updateCBtn.isSelected()]) #tools status for toolIndex, tool in enumerate(self.app.realTools): prop = "tool.%s" % tool.name toolCBtn = self.toolsCBtns[toolIndex] self.app.properties.setProperty(prop, onOff[toolCBtn.isSelected()]) #layers preferences for mode, button in self.layersRBtns.iteritems(): if button.isSelected(): self.app.properties.setProperty("layers_mode", mode) break #max errors number try: num = Integer.parseInt(self.maxErrorsNumberTextField.getText()) except NumberFormatException: num = "" self.app.properties.setProperty("max_errors_number", str(num)) #2 Tab #Favourite zones changes = {"new": [z for z in self.app.tempZones if not z in self.app.zones], "deleted": [z for z in self.app.zones if not z in self.app.tempZones]} #delete files of removed favourite zones for zone in changes["deleted"]: f = File(File.separator.join([self.app.SCRIPTDIR, "configuration", "favourite_zones", "%s.txt" % zone.name])) f.delete() #create files for new favourite zones for zone in changes["new"]: print "\nsave new zone", zone.name fileName = File.separator.join([self.app.SCRIPTDIR, "configuration", "favourite_zones", "%s.txt" % zone.name]) f = open(fileName, "w") zoneData = zone.geomString if zone.country != "": zoneData += "|" + zone.country f.write(zoneData.encode("utf-8")) f.close() self.app.zones = self.app.tempZones if len(self.app.zones) == 0: self.app.favZone = None self.app.properties.setProperty("favourite_area.name", "") self.favZoneStatusCBtn.setSelected(False) else: if len(self.zonesTable.getSelectedRows()) == 0: self.app.favZone = self.app.zones[0] else: self.app.favZone = self.app.zones[self.zonesTable.getSelectedRows()[0]] self.app.properties.setProperty("favourite_area.name", self.app.favZone.name) favZoneStatus = self.favZoneStatusCBtn.isSelected() self.app.properties.setProperty("favourite_area.status", onOff[favZoneStatus]) self.app.favouriteZoneStatus = favZoneStatus #stats panel self.app.dlg.update_favourite_zone_indicator() self.app.dlg.update_statsPanel_status() #3 Tab #tools preferences for tool in self.app.allTools: if hasattr(tool, 'prefs') and tool.prefsGui is not None: for pref, value in tool.prefsGui.read_gui().iteritems(): prefKey = "tool.%s.%s" % (tool.name, pref) self.app.properties.setProperty(prefKey, value) self.app.save_config() self.dispose()
class SCL_Scan_Data_CleanUp_Controller: def __init__(self, scl_long_tuneup_controller): #--- scl_long_tuneup_controller the parent document for all SCL tune up controllers self.scl_long_tuneup_controller = scl_long_tuneup_controller #----etched border etched_border = BorderFactory.createEtchedBorder() #----main panel self.main_panel = JPanel(BorderLayout()) #------top params panel----------------------- right_info_panel = JPanel(BorderLayout()) right_top_control_panel = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1)) analysis_button = JButton("Find BAD Points") analysis_button.addActionListener(Analyze_Data_Button_Listener(self)) right_top_control_panel.add(analysis_button) #------ maximal bpm phase error after the scan max_phase_err_lbl = JLabel("Max BPM Phase Err = ", JLabel.RIGHT) self.max_phase_err_text = DoubleInputTextField(10.0, DecimalFormat("##.#"), 5) right_top_control_panel.add(max_phase_err_lbl) right_top_control_panel.add(self.max_phase_err_text) #----------------------------------------------- right_bottom_control_panel = JPanel(BorderLayout()) right_bottom_control_panel0 = JPanel(BorderLayout()) right_bottom_control_panel1 = JPanel(FlowLayout(FlowLayout.LEFT, 1, 1)) right_bottom_control_panel.add(right_bottom_control_panel0, BorderLayout.NORTH) right_bottom_control_panel.add(right_bottom_control_panel1, BorderLayout.SOUTH) statistics_of_errors_lbl = JLabel("Statistics:", JLabel.RIGHT) self.statistics_of_errors_txt = JTextField() right_bottom_control_panel0.add(statistics_of_errors_lbl, BorderLayout.WEST) right_bottom_control_panel0.add(self.statistics_of_errors_txt, BorderLayout.CENTER) remove_worst_points_button = JButton("Remove Worst Points") remove_worst_points_button.addActionListener( CleanUp_Worst_Phase_Points_Data_Button_Listener(self)) remove_all_bad_bpms_button = JButton("Remove All Bad BPMs") remove_all_bad_bpms_button.addActionListener( CleanUp_All_Bad_BPMs_Button_Listener(self)) right_bottom_control_panel1.add(remove_worst_points_button) right_bottom_control_panel1.add(remove_all_bad_bpms_button) #----------------------------------------------- right_tables_panel = JPanel(GridLayout(1, 3)) right_info_panel.add(right_top_control_panel, BorderLayout.NORTH) right_info_panel.add(right_tables_panel, BorderLayout.CENTER) right_info_panel.add(right_bottom_control_panel, BorderLayout.SOUTH) self.main_panel.add(right_info_panel, BorderLayout.EAST) #------cavities scan table panel -------- self.bad_bpms_amp_phase_graphs_panel = Bad_BPMs_Amp_Phase_Graphs_Panel( self) self.main_panel.add(self.bad_bpms_amp_phase_graphs_panel, BorderLayout.CENTER) #------ let's make tables for a list of cavities, bpms, and bad points indexes self.cavs_with_bad_data_table_model = Cavs_with_Bad_PhaseScan_Table_Model( self) self.cavs_table = JTable(self.cavs_with_bad_data_table_model) self.cavs_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.cavs_table.setFillsViewportHeight(true) self.cavs_table.setPreferredScrollableViewportSize(Dimension(180, 300)) self.cavs_table.getSelectionModel().addListSelectionListener( Cavs_Table_Selection_Listener(self)) self.bpms_table_model = Bad_PhaseScan_BPMs_Table_Model(self) self.bpms_table = JTable(self.bpms_table_model) self.bpms_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.bpms_table.setFillsViewportHeight(true) self.bpms_table.getSelectionModel().addListSelectionListener( BPMs_Table_Selection_Listener(self)) self.bpms_table.setPreferredScrollableViewportSize(Dimension(180, 300)) self.points_table_model = Bad_Points_Table_Model(self) self.points_table = JTable(self.points_table_model) self.points_table.setFillsViewportHeight(true) self.points_table.setPreferredScrollableViewportSize( Dimension(180, 300)) #----- set scroll panes scrl_panel0 = JScrollPane(self.cavs_table) scrl_panel1 = JScrollPane(self.bpms_table) scrl_panel2 = JScrollPane(self.points_table) scrl_panel0.setBorder( BorderFactory.createTitledBorder(etched_border, "Cavs")) scrl_panel1.setBorder( BorderFactory.createTitledBorder(etched_border, "BPMs")) scrl_panel2.setBorder( BorderFactory.createTitledBorder(etched_border, "Bad Points")) right_tables_panel.setBorder(etched_border) right_tables_panel.add(scrl_panel0) right_tables_panel.add(scrl_panel1) right_tables_panel.add(scrl_panel2) #----- dictionary with the bad data self.cavs_to_bpm_dict[cav_wrapper] = [bpm_wrappers,bpms_to_points_dict] self.cavs_to_bpm_dict = {} #----- arrays with bad data for the tables self.cavs_with_bad_data_arr = [] self.bpms_arr = [] self.points_arr = [] def cleanUp_All_Bad_BPMs_Method(self): scl_long_tuneup_controller = self.scl_long_tuneup_controller cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:] #----- dictionary with the bad data cavs_to_bpm_dict = self.cavs_to_bpm_dict #----- let's go through all cavities to find the bad bpms for cav_wrapper in cav_wrappers: if (cav_wrapper.isGood and cav_wrapper.isMeasured): if (cavs_to_bpm_dict.has_key(cav_wrapper)): [bpm_wrappers, bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper] for bpm_wrapper_bad in bpm_wrappers: for bpm_ind in range(len(cav_wrapper.bpm_wrappers)): bpm_wrapper = cav_wrapper.bpm_wrappers[bpm_ind] if (bpm_wrapper_bad == bpm_wrapper): cav_wrapper.bpm_wrappers_useInAmpBPMs[ bpm_ind] = false cav_wrapper.bpm_wrappers_useInPhaseAnalysis[ bpm_ind] = false def cleanUp_Worst_Phase_Points_Data_Method(self): scl_long_tuneup_controller = self.scl_long_tuneup_controller cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:] #----- dictionary with the bad data cavs_to_bpm_dict = self.cavs_to_bpm_dict #----- let's go through all cavities to find the worst phase scan points #----- worst points means maximal number of bad bpms with it n_total_removed_points = 0 for cav_wrapper in cav_wrappers: if (cav_wrapper.isGood and cav_wrapper.isMeasured): if (cavs_to_bpm_dict.has_key(cav_wrapper)): [bpm_wrappers, bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper] #----- numb_of_points_dict[point_scan_ind] = [bpm1,...] numb_of_points_dict = {} for bpm_wrapper in bpm_wrappers: bad_points_arr = bpms_to_points_dict[bpm_wrapper] for [ind, x, y] in bad_points_arr: if (numb_of_points_dict.has_key(ind)): numb_of_points_dict[ind].append(bpm_wrapper) else: numb_of_points_dict[ind] = [ bpm_wrapper, ] max_bpms_ind = -1 max_numb_of_bpms = 0 for ind in numb_of_points_dict.keys(): n_bpms = len(numb_of_points_dict[ind]) if (n_bpms > max_numb_of_bpms): max_bpms_ind = ind if (max_bpms_ind >= 0): #---- the phase scan data with this index should be removed n_bpms = len(numb_of_points_dict[max_bpms_ind]) if (n_bpms > 1): n_total_removed_points += n_bpms gd = cav_wrapper.phaseDiffPlot gd.removePoint(max_bpms_ind) for bpm_wrapper in cav_wrapper.bpm_wrappers: (graphDataAmp, graphDataPhase ) = cav_wrapper.getAmpPhaseGraphs(bpm_wrapper) if (graphDataAmp != null): graphDataAmp.removePoint(max_bpms_ind) if (graphDataPhase != null): graphDataPhase.removePoint(max_bpms_ind) #print "debug cav=",cav_wrapper.alias," n bpms=",n_bpms #print "debug n_total_removed_points=",n_total_removed_points def analyze_Data_Method(self): scl_long_tuneup_controller = self.scl_long_tuneup_controller max_phase_diff0 = self.max_phase_err_text.getValue() cav_wrappers = scl_long_tuneup_controller.cav_wrappers[1:] #----- dictionary with the bad data self.cavs_to_bpm_dict = {} cavs_to_bpm_dict = self.cavs_to_bpm_dict #----- arrays with bad data for the tables self.cavs_with_bad_data_arr = [] self.bpms_arr = [] self.points_arr = [] #---- data analysis for bad points total_nPoints = 0 for cav_wrapper in cav_wrappers: if (cav_wrapper.isGood and cav_wrapper.isMeasured): bpm_wrapper0 = cav_wrapper.bpm_wrapper0 bpm_wrapper1 = cav_wrapper.bpm_wrapper1 pos0 = bpm_wrapper0.pos pos1 = bpm_wrapper1.pos phaseDiffPlot = cav_wrapper.phaseDiffPlot (graphDataAmp0, graphDataPhase0 ) = cav_wrapper.bpm_amp_phase_dict[bpm_wrapper0] if (phaseDiffPlot.getNumbOfPoints() == 0): continue for bpm_wrapper_ind in range(len(cav_wrapper.bpm_wrappers)): bpm_wrapper = cav_wrapper.bpm_wrappers[bpm_wrapper_ind] pos = bpm_wrapper.pos if (pos < pos0): continue pos_coeff = (pos - pos0) / (pos1 - pos0) max_phase_diff = max_phase_diff0 if (pos_coeff >= 1.0): max_phase_diff = pos_coeff * max_phase_diff0 if (cav_wrapper. bpm_wrappers_useInPhaseAnalysis[bpm_wrapper_ind]): (graphDataAmp, graphDataPhase ) = cav_wrapper.bpm_amp_phase_dict[bpm_wrapper] nPoints = phaseDiffPlot.getNumbOfPoints() bpm_phase_delta = graphDataPhase.getY( nPoints - 1) - graphDataPhase0.getY( nPoints - 1 ) - pos_coeff * phaseDiffPlot.getY(nPoints - 1) bad_points_arr = [] for ind in range(phaseDiffPlot.getNumbOfPoints()): total_nPoints += 1 y = graphDataPhase.getY( ind) - graphDataPhase0.getY( ind) - pos_coeff * phaseDiffPlot.getY( ind) - bpm_phase_delta y = makePhaseNear(y, 0.) if (abs(y) > max_phase_diff): bad_points_arr.append( [ind, graphDataPhase.getX(ind), y]) if (len(bad_points_arr) > 0): if (not cavs_to_bpm_dict.has_key(cav_wrapper)): cavs_to_bpm_dict[cav_wrapper] = [[], {}] [bpm_wrappers, bpms_to_points_dict ] = cavs_to_bpm_dict[cav_wrapper] bpm_wrappers.append(bpm_wrapper) bpms_to_points_dict[bpm_wrapper] = bad_points_arr for cav_wrapper in cav_wrappers: if (cavs_to_bpm_dict.has_key(cav_wrapper)): self.cavs_with_bad_data_arr.append(cav_wrapper) #-------------------------------------------------------------------- nCavs = 0 nBPMs = 0 nPoints = 0 for cav_wrapper in self.cavs_with_bad_data_arr: [bpm_wrappers, bpms_to_points_dict] = cavs_to_bpm_dict[cav_wrapper] nCavs += 1 nBPMs += len(bpm_wrappers) for bpm_wrapper in bpm_wrappers: points_arr = bpms_to_points_dict[bpm_wrapper] nPoints += len(points_arr) st = "N Bad: Cavs= " + str(nCavs) + " BPMs= " + str( nBPMs) + " Phase Points=" + str(nPoints) + "/" + str( total_nPoints) self.statistics_of_errors_txt.setText(st) self.cavs_table.getModel().fireTableDataChanged() self.bpms_table.getModel().fireTableDataChanged() self.points_table.getModel().fireTableDataChanged() nCavs = len(self.cavs_with_bad_data_arr)
class BurpExtender(IBurpExtender, IContextMenuFactory, ITab, ComponentListener, ActionListener, MouseAdapter): # contains the messages to show in the messages table _table_data = [] # contains the messages to translate _messages = [] # used to keep track when to refresh the table _reload_table = False _sql_file = None def registerExtenderCallbacks(self, callbacks): self._panel = JPanel() self._panel.setLayout(BorderLayout()) #self._panel.setSize(400,400) # sourrounding try\except because Burp is not giving enough info try: # creating all the UI elements # create the split pane self._split_pane_horizontal = JSplitPane( JSplitPane.HORIZONTAL_SPLIT) self._split_panel_vertical = JSplitPane(JSplitPane.VERTICAL_SPLIT) # create panels self._panel_top = JPanel() self._panel_top.setLayout(BorderLayout()) self._panel_bottom = JPanel() self._panel_bottom.setLayout(BorderLayout()) self._panel_right = JPanel() self._panel_right.setLayout(BorderLayout()) self._panel_request = JPanel() self._panel_request.setLayout(BorderLayout()) self._panel_response = JPanel() self._panel_response.setLayout(BorderLayout()) # create the tabbed pane used to show request\response self._tabbed_pane = JTabbedPane(JTabbedPane.TOP) # create the tabbed pane used to show aslan++\concretization file self._tabbed_pane_editor = JTabbedPane(JTabbedPane.TOP) # create the bottom command for selecting the SQL file and # generating the model self._button_generate = JButton( 'Generate!', actionPerformed=self._generate_model) self._button_save = JButton('Save', actionPerformed=self._save_model) self._button_select_sql = JButton( 'Select SQL', actionPerformed=self._select_sql_file) self._text_field_sql_file = JTextField(20) self._panel_bottom_commands = JPanel() layout = GroupLayout(self._panel_bottom_commands) layout.setAutoCreateGaps(True) layout.setAutoCreateContainerGaps(True) seq_layout = layout.createSequentialGroup() seq_layout.addComponent(self._text_field_sql_file) seq_layout.addComponent(self._button_select_sql) seq_layout.addComponent(self._button_generate) seq_layout.addComponent(self._button_save) layout.setHorizontalGroup(seq_layout) # create the message editors that will be used to show request and response self._message_editor_request = callbacks.createMessageEditor( None, True) self._message_editor_response = callbacks.createMessageEditor( None, True) # create the table that will be used to show the messages selected for # the translation self._columns_names = ('Host', 'Method', 'URL') dataModel = NonEditableModel(self._table_data, self._columns_names) self._table = JTable(dataModel) self._scrollPane = JScrollPane() self._scrollPane.getViewport().setView((self._table)) popmenu = JPopupMenu() delete_item = JMenuItem("Delete") delete_item.addActionListener(self) popmenu.add(delete_item) self._table.setComponentPopupMenu(popmenu) self._table.addMouseListener(self) # add all the elements self._panel_request.add( self._message_editor_request.getComponent()) self._panel_response.add( self._message_editor_response.getComponent()) self._tabbed_pane.addTab("Request", self._panel_request) self._tabbed_pane.addTab("Response", self._panel_response) self._panel_top.add(self._scrollPane, BorderLayout.CENTER) self._panel_bottom.add(self._tabbed_pane, BorderLayout.CENTER) scroll = JScrollPane(self._panel_bottom) self._panel_right.add(self._tabbed_pane_editor, BorderLayout.CENTER) self._panel_right.add(self._panel_bottom_commands, BorderLayout.PAGE_END) self._split_panel_vertical.setTopComponent(self._panel_top) self._split_panel_vertical.setBottomComponent(scroll) self._split_pane_horizontal.setLeftComponent( self._split_panel_vertical) self._split_pane_horizontal.setRightComponent(self._panel_right) self._panel.addComponentListener(self) self._panel.add(self._split_pane_horizontal) self._callbacks = callbacks callbacks.setExtensionName("WAFEx") callbacks.addSuiteTab(self) callbacks.registerContextMenuFactory(self) except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] print(exc_type, fname, exc_tb.tb_lineno) def getTabCaption(self): return "WAFEx" def getUiComponent(self): try: Platform.runLater(EditorTabUI(self)) return self._panel except Exception as e: exc_type, exc_obj, exc_tb = sys.exc_info() fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] print(exc_type, fname, exc_tb.tb_lineno) def componentShown(self, e): self._split_pane_horizontal.setDividerLocation(0.25) # populate the table with the selected requests\response try: if self._reload_table: print("reload") self._table_data = [ ] # empty _table_data (not too cool but quick) for c in self._messages: msg = c[0] http_request = converter._byte_array_to_string( msg.getRequest()) request_parser = HttpParser() request_parser.execute(http_request, len(http_request)) host = msg.getHttpService().getHost() page = request_parser.get_url() method = request_parser.get_method() tmp = [host, method, page] self._table_data += [tmp] self._table.getModel().setDataVector(self._table_data, self._columns_names) self._reload_table = False except Exception as e: print(e) def componentHidden(self, e): return def componentMoved(self, e): return def componentResized(self, e): self._split_pane_horizontal.setDividerLocation(0.25) def createMenuItems(self, invocation): ret = [] try: if (invocation.getInvocationContext() == invocation.CONTEXT_TARGET_SITE_MAP_TABLE): menu = JMenuItem("Send to WAFEx") messages = invocation.getSelectedMessages() def listener(e): """ Generates a new WAFEx model. """ #self._generateWAFExModel(messages) self._addToGeneration(messages) menu.addActionListener(listener) ret.append(menu) except Exception as e: print(e) return ret def mouseClicked(self, e): """ Positions the Aslan++ editor to the selected request position. """ try: index = self._table.getSelectedRow() c = self._messages[index] print(len(c)) message = c[0] tag = c[1] self._message_editor_request.setMessage(message.getRequest(), True) self._message_editor_response.setMessage(message.getResponse(), False) if tag != None: document = self._jfxp_aslanpp._editor.getText() start, end = self._search_tag_position(tag, document) self._jfxp_aslanpp._editor.moveTo(start) self._jfxp_aslanpp._editor.selectRange(start, end) self._jfxp_aslanpp._editor.requestFollowCaret() self._jfxp_aslanpp._editor.requestFocus() except Exception as e: print(e) def actionPerformed(self, e): """ Performs the delete action. """ try: index = self._table.getSelectedRow() del self._table_data[index] del self._messages[index] self._table.getModel().setDataVector(self._table_data, self._columns_names) except Exception as e: print(e) def _search_tag_position(self, tag, text): """ Searches for a particular tag in a given text and return its position. """ pattern = self._search_pattern.format(tag) for m in re.finditer(pattern, text): return m.start(), m.end() def _save_model(self, e): """ Saves the current Aslan++ model and concretization file. """ try: chooseFile = JFileChooser() filter_ = FileNameExtensionFilter("txt files", ["txt"]) chooseFile.addChoosableFileFilter(filter_) ret = chooseFile.showDialog(self._panel, "Choose file") if ret == JFileChooser.APPROVE_OPTION: self._model_name = chooseFile.getSelectedFile().getPath() with open("{}.aslan++".format(self._model_name), "w") as f: skeleton = self._jfxp_aslanpp._editor.getText() skeleton = skeleton.replace("@filename", basename(self._model_name)) f.write(skeleton) print("model created") with open("{}.txt".format(self._model_name), "w") as f: f.write(self._jfxp_concretization._editor.getText()) except Exception as e: print(e) def _select_sql_file(self, e): """ Shows a JFileChooser dialog to select the SQL file to use for creating the model. """ try: chooseFile = JFileChooser() filter_ = FileNameExtensionFilter("txt files", ["txt"]) chooseFile.addChoosableFileFilter(filter_) ret = chooseFile.showDialog(self._panel, "Choose file") if ret == JFileChooser.APPROVE_OPTION: self._sql_file = chooseFile.getSelectedFile().getPath() else: self._sql_file = None self._text_field_sql_file.setText("" + self._sql_file) except Exception as e: print(e) def _addToGeneration(self, messages): for msg in messages: self._messages += [[msg, None]] self._reload_table = True def _generate_model(self, e): if len(self._messages) <= 0: frame = JFrame("Error") JOptionPane.showMessageDialog(frame, "No messages!", "Error", JOptionPane.ERROR_MESSAGE) return if self._sql_file == None: frame = JFrame("Error") replay = JOptionPane.showConfirmDialog( frame, "No SQL file selected!\nDo you want to continue?", "Info", JOptionPane.YES_NO_OPTION) if replay == JOptionPane.NO_OPTION: return # create a new AslanppModel model = AslanppModel() # save _sql_file model._sql_file = self._sql_file for c in self._messages: # from byte to char Request and Response # for some reason b can be a negative value causing a crash # so I put a check to ensure b is in the right range msg = c[0] if msg.getRequest() == None or msg.getResponse() == None: # do not convert empty messages continue http_request = "".join( chr(b) for b in msg.getRequest() if b >= 0 and b <= 256) http_response = "".join( chr(b) for b in msg.getResponse() if b >= 0 and b <= 256) protocol = msg.getHttpService().getProtocol() # save the tag number generate by _parseHttpRequestResponse in the _messages array c[1] = converter._parseHttpRequestResponse(model, http_request, http_response, protocol) # generate the ASLan++ code self._model, self._concrete = converter._generateWAFExModel(model) Platform.runLater( UpdateEditor(self._jfxp_aslanpp._editor, self._jfxp_concretization._editor, self._model, self._concrete))
class LINAC_SetUp_Controller: def __init__(self,linac_wizard_document): #--- linac_wizard_document the parent document for all controllers self.linac_wizard_document = linac_wizard_document self.main_panel = JPanel(BorderLayout()) #----etched border etched_border = BorderFactory.createEtchedBorder() #------tables with Seq. names and button tables_panel = JPanel(BorderLayout()) tables_panel.setBorder(etched_border) self.first_table = JTable(WS_Records_Table_Model("First ")) self.last_table = JTable(WS_Records_Table_Model("Last ")) self.first_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.last_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.first_table.setFillsViewportHeight(true) self.last_table.setFillsViewportHeight(true) tables01_panel = JPanel(BorderLayout()) scrl_panel0 = JScrollPane(self.first_table) scrl_panel1 = JScrollPane(self.last_table) #tables01_panel.add(JScrollPane(self.first_table),BorderLayout.WEST) #tables01_panel.add(JScrollPane(self.last_table),BorderLayout.EAST) self.first_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER) self.last_table.getCellRenderer(0,0).setHorizontalAlignment(JLabel.CENTER) self.first_table.setPreferredScrollableViewportSize(Dimension(120,300)) self.last_table.setPreferredScrollableViewportSize(Dimension(120,300)) tables01_panel.add(scrl_panel0,BorderLayout.WEST) tables01_panel.add(scrl_panel1,BorderLayout.EAST) tables_button_panel = JPanel(BorderLayout()) tables_button_panel.add(tables01_panel,BorderLayout.WEST) seq_button_panel = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) seq_set_button = JButton(" Set ComboSequence ") seq_button_panel.add(seq_set_button) tables_button_panel.add(seq_button_panel,BorderLayout.SOUTH) tables_panel.add(tables_button_panel,BorderLayout.NORTH) self.main_panel.add(tables_panel,BorderLayout.WEST) #--------central panel------- cav_amp_phase_button = JButton(" Read Cavities Amp.&Phases from Ext. File ") cav_info_from_scl_tuneup_button = JButton("Get SCL Cav. Amp.&Phases from SCL Long. TuneUp") new_accelerator_button = JButton(" Setup a New Accelerator File ") center_buttons_panel0 = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) center_buttons_panel0.add(cav_amp_phase_button) center_buttons_panel1 = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) center_buttons_panel1.add(cav_info_from_scl_tuneup_button) center_buttons_panel2 = JPanel(FlowLayout(FlowLayout.CENTER,5,5)) center_buttons_panel2.add(new_accelerator_button) center_buttons_panel = JPanel(GridLayout(3,1)) center_buttons_panel.add(center_buttons_panel0) center_buttons_panel.add(center_buttons_panel1) center_buttons_panel.add(center_buttons_panel2) center_panel = JPanel(BorderLayout()) center_panel.add(center_buttons_panel,BorderLayout.NORTH) self.main_panel.add(center_panel,BorderLayout.CENTER) #---------add actions listeners seq_set_button.addActionListener(Make_Sequence_Listener(self)) cav_amp_phase_button.addActionListener(Read_Cav_Amp_Phase_Dict_Listener(self)) cav_info_from_scl_tuneup_button.addActionListener(Get_SCL_Cav_Amp_Phase_Listener(self)) new_accelerator_button.addActionListener(SetUp_New_Accelerator_Listener(self)) def getMainPanel(self): return self.main_panel def setSelectedSequences(self,first_seq_name,last_seq_name): index0 = self.first_table.getModel().accSeqName_arr.index(first_seq_name) index1 = self.last_table.getModel().accSeqName_arr.index(last_seq_name) self.first_table.setRowSelectionInterval(index0,index0) self.last_table.setRowSelectionInterval(index1,index1) def getSelectedSequencesNames(self): first_table = self.first_table index0 = first_table.getSelectedRow() last_table = self.last_table index1 = last_table.getSelectedRow() if(index0 < 0 or index1 < 0): return [] seq_names = [] if(index0 == index1): seq_names.append(first_table.getModel().accSeqName_arr[index0]) else: if(index1 < index0): (index0,index1) = (index1,index0) for i in range(index0,index1+1): seq_names.append(first_table.getModel().accSeqName_arr[i]) return seq_names def setAccSeqNames(self,seq_names): accl = self.linac_wizard_document.getAccl() if(len(seq_names) == 0): accSeq = null self.linac_wizard_document.setAccSeq(accSeq) return lst = ArrayList() for seqName in seq_names: lst.add(accl.getSequence(seqName)) accSeq = AcceleratorSeqCombo("SEQUENCE", lst) self.linac_wizard_document.setAccSeq(accSeq) def getCavNameNodeDict(self,accl): rf_gaps = accl.getAllNodesWithQualifier(AndTypeQualifier().and((OrTypeQualifier()).or(RfGap.s_strType))) cavs = [] for rf_gap in rf_gaps: cav = rf_gap.getParent() if(cav not in cavs): cavs.append(cav) cav_name_node_dict = {} cav_names = [] for cav in cavs: cav_names.append(cav.getId()) cav_name_node_dict[cav.getId()] = cav return cav_name_node_dict