def draw(self): """ init Save/Restore """ exportLabel = JLabel("Export:") exportLabel.setBounds(10, 10, 100, 30) labelFont = exportLabel.getFont() boldFont = Font(labelFont.getFontName(), Font.BOLD, labelFont.getSize()) exportLabel.setFont(boldFont) exportLType = JLabel("File Type:") exportLType.setBounds(10, 50, 100, 30) exportFileTypes = ["HTML", "CSV"] self.exportType = JComboBox(exportFileTypes) self.exportType.setBounds(100, 50, 200, 30) exportES = ["All Statuses", "As table filter", self._extender.BYPASSSED_STR, self._extender.IS_ENFORCED_STR, self._extender.ENFORCED_STR] self.exportES = JComboBox(exportES) self.exportES.setBounds(100, 90, 200, 30) exportLES = JLabel("Statuses:") exportLES.setBounds(10, 90, 100, 30) self.exportButton = JButton("Export", actionPerformed=self.export) self.exportButton.setBounds(390, 50, 100, 30) saveRestoreLabel = JLabel("Save / Restore:") saveRestoreLabel.setBounds(10, 250, 100, 30) saveRestoreLabel.setFont(boldFont) self.saveStateButton = JButton("Save state", actionPerformed=self.saveStateAction) self.saveStateButton.setBounds(10, 200, 100, 30) self.restoreStateButton = JButton("Restore state", actionPerformed=self.restoreStateAction) self.restoreStateButton.setBounds(390, 200, 100, 30) self._extender.exportPnl = JPanel() exportPnl = self._extender.exportPnl exportPnl.setLayout(None) exportPnl.setBounds(0, 0, 1000, 1000) exportPnl.add(exportLabel) exportPnl.add(exportLType) exportPnl.add(self.exportType) exportPnl.add(exportLES) exportPnl.add(self.exportES) exportPnl.add(self.exportButton) exportPnl.add(saveRestoreLabel) exportPnl.add(self.saveStateButton) exportPnl.add(self.restoreStateButton)
def __init__(self): TrafficMod.__init__(self) self.setLayout(FlowLayout(FlowLayout.LEADING)) settings_panel = JPanel() layout = GroupLayout(settings_panel) layout.setAutoCreateGaps(True) layout.setAutoCreateContainerGaps(True) settings_panel.setLayout(layout) self.add(settings_panel) # Horizontal group horizontal = layout.createParallelGroup() layout.setHorizontalGroup( layout.createSequentialGroup().addGroup(horizontal)) # Vertical group vertical = layout.createSequentialGroup() layout.setVerticalGroup(vertical) # Main title, label only main_title = JLabel(self.title) main_title.setFont(Font(main_title.getFont().getName(), Font.BOLD, 14)) horizontal.addGroup( layout.createSequentialGroup().addComponent(main_title)) vertical.addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent(main_title)) # Duplicate percentage percent_lbl = JLabel("Duplicate %") horizontal.addGroup(layout.createSequentialGroup().addComponent( percent_lbl).addComponent(self.duplicate_percent)) vertical.addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( percent_lbl).addComponent(self.duplicate_percent)) # Duplicate percentage correlation corr_lbl = JLabel("Correlation %") horizontal.addGroup( layout.createSequentialGroup().addComponent(corr_lbl).addComponent( self.duplicate_percent_correlation)) vertical.addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( corr_lbl).addComponent(self.duplicate_percent_correlation)) layout.linkSize(SwingConstants.HORIZONTAL, corr_lbl, percent_lbl)
class ProjectIngestSettingsPanel(IngestModuleIngestJobSettingsPanel): def __init__(self, settings): self.local_settings = settings self.initComponents() self.customizeComponents() def initComponents(self): self.apps_checkboxes_list = [] self.setLayout(BoxLayout(self, BoxLayout.PAGE_AXIS)) self.setPreferredSize(Dimension(300, 0)) # title self.p_title = SettingsUtils.createPanel() self.lb_title = JLabel("Forensic Analysis for Mobile Apps") self.lb_title.setFont(self.lb_title.getFont().deriveFont( Font.BOLD, 15)) self.p_title.add(self.lb_title) self.add(self.p_title) # end of title # info menu self.p_info = SettingsUtils.createPanel() self.p_info.setPreferredSize(Dimension(300, 20)) self.lb_info = SettingsUtils.createInfoLabel("") self.lb_info2 = SettingsUtils.createInfoLabel("") self.sp2 = SettingsUtils.createSeparators(1) self.p_method = SettingsUtils.createPanel() self.bg_method = ButtonGroup() autopsy_version = PsyUtils.get_autopsy_version() if ((autopsy_version["major"] == 4 and autopsy_version["minor"] <= 17) or autopsy_version["major"] < 4): self.p_info.add(self.lb_info) self.p_info.add(self.lb_info2, BorderLayout.SOUTH) self.rb_selectedDatasource = SettingsUtils.createRadioButton( "Analyze selected datasource", "method_datasource", self.onMethodChange) self.bg_method.add(self.rb_selectedDatasource) # self.rb_importReportFile = SettingsUtils.createRadioButton("Import previous generated report file","method_importfile" ,self.onMethodChange) self.rb_liveExtraction = SettingsUtils.createRadioButton( "Live extraction with ADB", "method_adb", self.onMethodChange) self.rb_selectedDatasource.setSelected(True) #self.bg_method.add(self.rb_importReportFile) self.bg_method.add(self.rb_liveExtraction) self.p_method.add(JLabel("Analysis method")) self.p_method.add(self.rb_selectedDatasource) self.p_method.add(self.rb_liveExtraction) else: self.p_info.add( SettingsUtils.createInfoLabel( "It will analyze the data source with previously selected method and index the forensic artifacts." )) self.add(self.p_method) self.p_apps = SettingsUtils.createPanel(True) sorted_items = OrderedDict(sorted(Utils.get_all_packages().items())) for app, app_id in sorted_items.iteritems(): #(app, app_id) checkbox = SettingsUtils.addApplicationCheckbox( app, app_id, self.getSelectedApps) self.add(checkbox) self.apps_checkboxes_list.append(checkbox) self.p_apps.add(checkbox) self.add(self.p_apps) self.add(self.p_info) # end of checkboxes menu def customizeComponents(self): self.onMethodChange("") #initialize method option self.getSelectedApps("") #initialize selected apps def onMethodChange(self, event): self.method = self.getMethod() self.local_settings.setSetting("method", self.method) if self.method == "method_adb": self.lb_info.setText( "This method is used when there is no data source but you have the device." ) self.lb_info2.setText( "It will extract the content of the selected applications from the device, analyze and index the forensic artifacts." ) self.toggleCheckboxes(True) else: self.lb_info.setText( "This method is used when the application data has already been collected." ) self.lb_info2.setText( "It will analyze the data source previously added to the data source and index the forensic artifacts." ) self.toggleCheckboxes(False) def getSettings(self): return self.local_settings def getMethod(self): selection = self.bg_method.getSelection() if not selection: return None return selection.getActionCommand() def getSelectedApps(self, event): selected_apps = [] for cb_app in self.apps_checkboxes_list: if cb_app.isSelected(): selected_apps.append(cb_app.getActionCommand()) self.local_settings.setSetting("apps", json.dumps(selected_apps)) def toggleCheckboxes(self, visible): for cb_app in self.apps_checkboxes_list: cb_app.setVisible(visible)
class SourceCellRenderer(TreeCellRenderer): def __init__(self,tree,mapContext): self.tree = tree self.mapContext = mapContext ## Group self.lblFolder = JLabel() self.lblFolder.setBackground(Color(222,227,233)) #.BLUE.brighter()) self.lblFolder.setOpaque(True) self.lblFolder.setText("plddddddddddddddddddddddddddddddddddddddddddddddddddddddd") ### Folder self.pnlFolder = JPanel() self.pnlFolder.setOpaque(False) self.pnlFolder.setLayout(FlowLayout(FlowLayout.LEFT)) self.lblGroup = JLabel() #self.lblGroup.setBackground(Color(222,227,233)) #.BLUE.brighter()) #self.lblGroup.setOpaque(True) self.lblGroup.setText("plddddddddddddddddddddddddddddddddddddddddddddddddddddddd") self.lblGroupPreferredSize = self.lblGroup.getPreferredSize() self.lblGroupIcon = JLabel() self.pnlFolder.add(self.lblGroupIcon) self.pnlFolder.add(self.lblGroup) #self.lblGroup.setBorder( # BorderFactory.createLineBorder(Color(222,227,233).darker(),1) #) #self.lblGroupPreferredSize.setSize(30,200)#self.lblGroupPreferredSize.getHeight()+4, self.lblGroupPreferredSize.getWidth()) ### LAYER self.pnlLayer = JPanel() self.pnlLayer.setOpaque(False) #self.pnlLayer.setBorder(EmptyBorder(2,2,2,2)) self.pnlLayer.setLayout(FlowLayout(FlowLayout.LEFT)) self.chkLayerVisibility = JCheckBox() self.chkLayerVisibility.setOpaque(False) self.pnlLayer.add(self.chkLayerVisibility) self.lblLayerIcon = JLabel() self.lblLayerName = JLabel() self.pnlLayer.add(self.lblLayerIcon) self.pnlLayer.add(self.lblLayerName) #self.tree.setRowHeight(int(self.pnlLayer.getPreferredSize().getHeight())) #+2 self.tree.setRowHeight(int(self.pnlFolder.getPreferredSize().getHeight())) self.lblUnknown = JLabel() def getTreeCellRendererComponent(self, tree, value, selected, expanded, leaf, row, hasFocus): uo = value.getUserObject() if isinstance(uo, DataFolder): #self.lblFolder.setText(uo.getName()) text = "[" + str(value.getChildCount()) +"] " + uo.getName() self.lblFolder.setText(text) self.lblFolder.setPreferredSize(self.lblGroupPreferredSize) if uo.getIcon()!=None: self.lblGroupIcon.setIcon(uo.getIcon()) else: self.lblGroupIcon.setIcon(getIconByName("librarybrowser-folder")) #icon-folder-open")) return self.lblFolder if isinstance(uo, DataGroup): self.lblGroup.setText(uo.getName()) self.lblGroup.setPreferredSize(self.lblGroupPreferredSize) if uo.getIcon()!=None: self.lblGroupIcon.setIcon(uo.getIcon()) else: #import pdb #pdb.set_trace() self.lblGroupIcon.setIcon(getIconByName("librarybrowser-folder")) #icon-folder-open")) return self.pnlFolder if isinstance(uo, DataLayer): layer = uo.getLayer() self.lblLayerName.setText(layer.getName()) self.lblLayerIcon.setIcon(getIconFromLayer(layer)) self.chkLayerVisibility.setSelected(layer.isVisible()) if layer.isWithinScale(self.mapContext.getScaleView()): # and layer.isVisible(): self.chkLayerVisibility.setEnabled(True) else: self.chkLayerVisibility.setEnabled(False) self.lblLayerName.setForeground(Color.BLACK) font = self.lblLayerName.getFont() self.lblLayerName.setForeground(Color.BLACK) if layer.isEditing(): self.lblLayerName.setForeground(Color.RED) if layer.isActive() and font.isBold(): pass elif layer.isActive() and not font.isBold(): newfont = font.deriveFont(Font.BOLD) self.lblLayerName.setFont(newfont) else: newfont = font.deriveFont(Font.PLAIN) self.lblLayerName.setFont(newfont) #self.pnlLayer.repaint() return self.pnlLayer self.lblUnknown.setText("") self.lblUnknown.setPreferredSize(Dimension(0,0)) return self.lblUnknown
def __init__(self, parent, title, modal, app): from java.awt import CardLayout self.app = app border = BorderFactory.createEmptyBorder(5, 7, 7, 7) self.getContentPane().setBorder(border) self.setLayout(BoxLayout(self.getContentPane(), BoxLayout.Y_AXIS)) self.FAVAREALAYERNAME = "Favourite zone editing" info = JLabel(self.app.strings.getString("Create_a_new_favourite_zone")) info.setAlignmentX(Component.LEFT_ALIGNMENT) #Name nameLbl = JLabel(self.app.strings.getString("fav_zone_name")) self.nameTextField = JTextField(20) self.nameTextField.setMaximumSize(self.nameTextField.getPreferredSize()) self.nameTextField.setToolTipText(self.app.strings.getString("fav_zone_name_tooltip")) namePanel = JPanel() namePanel.setLayout(BoxLayout(namePanel, BoxLayout.X_AXIS)) namePanel.add(nameLbl) namePanel.add(Box.createHorizontalGlue()) namePanel.add(self.nameTextField) #Country countryLbl = JLabel(self.app.strings.getString("fav_zone_country")) self.countryTextField = JTextField(20) self.countryTextField.setMaximumSize(self.countryTextField.getPreferredSize()) self.countryTextField.setToolTipText(self.app.strings.getString("fav_zone_country_tooltip")) countryPanel = JPanel() countryPanel.setLayout(BoxLayout(countryPanel, BoxLayout.X_AXIS)) countryPanel.add(countryLbl) countryPanel.add(Box.createHorizontalGlue()) countryPanel.add(self.countryTextField) #Type modeLbl = JLabel(self.app.strings.getString("fav_zone_type")) RECTPANEL = "rectangle" POLYGONPANEL = "polygon" BOUNDARYPANEL = "boundary" self.modesStrings = [RECTPANEL, POLYGONPANEL, BOUNDARYPANEL] modesComboModel = DefaultComboBoxModel() for i in (self.app.strings.getString("rectangle"), self.app.strings.getString("delimited_by_a_closed_way"), self.app.strings.getString("delimited_by_an_administrative_boundary")): modesComboModel.addElement(i) self.modesComboBox = JComboBox(modesComboModel, actionListener=self, editable=False) #- Rectangle self.rectPanel = JPanel() self.rectPanel.setLayout(BoxLayout(self.rectPanel, BoxLayout.Y_AXIS)) capturePane = JPanel() capturePane.setLayout(BoxLayout(capturePane, BoxLayout.X_AXIS)) capturePane.setAlignmentX(Component.LEFT_ALIGNMENT) josmP = JPanel() self.captureRBtn = JRadioButton(self.app.strings.getString("capture_area")) self.captureRBtn.addActionListener(self) self.captureRBtn.setSelected(True) self.bboxFromJosmBtn = JButton(self.app.strings.getString("get_current_area"), actionPerformed=self.on_bboxFromJosmBtn_clicked) self.bboxFromJosmBtn.setToolTipText(self.app.strings.getString("get_capture_area_tooltip")) josmP.add(self.bboxFromJosmBtn) capturePane.add(self.captureRBtn) capturePane.add(Box.createHorizontalGlue()) capturePane.add(self.bboxFromJosmBtn) manualPane = JPanel() manualPane.setLayout(BoxLayout(manualPane, BoxLayout.X_AXIS)) manualPane.setAlignmentX(Component.LEFT_ALIGNMENT) self.manualRBtn = JRadioButton(self.app.strings.getString("use_this_bbox")) self.manualRBtn.addActionListener(self) self.bboxTextField = JTextField(20) self.bboxTextField.setMaximumSize(self.bboxTextField.getPreferredSize()) self.bboxTextField.setToolTipText(self.app.strings.getString("fav_bbox_tooltip")) self.bboxTextFieldDefaultBorder = self.bboxTextField.getBorder() self.bboxTextField.getDocument().addDocumentListener(TextListener(self)) manualPane.add(self.manualRBtn) manualPane.add(Box.createHorizontalGlue()) manualPane.add(self.bboxTextField) group = ButtonGroup() group.add(self.captureRBtn) group.add(self.manualRBtn) previewPane = JPanel() previewPane.setLayout(BoxLayout(previewPane, BoxLayout.X_AXIS)) previewPane.setAlignmentX(Component.LEFT_ALIGNMENT) bboxPreviewInfo = JTextField(self.app.strings.getString("coordinates"), editable=0, border=None) bboxPreviewInfo.setMaximumSize(bboxPreviewInfo.getPreferredSize()) self.bboxPreviewTextField = JTextField(20, editable=0, border=None) self.bboxPreviewTextField.setMaximumSize(self.bboxPreviewTextField.getPreferredSize()) previewPane.add(bboxPreviewInfo) previewPane.add(Box.createHorizontalGlue()) previewPane.add(self.bboxPreviewTextField) self.rectPanel.add(capturePane) self.rectPanel.add(Box.createRigidArea(Dimension(0, 10))) self.rectPanel.add(manualPane) self.rectPanel.add(Box.createRigidArea(Dimension(0, 20))) self.rectPanel.add(previewPane) #- Polygon (closed way) drawn by hand self.polygonPanel = JPanel(BorderLayout()) self.polygonPanel.setLayout(BoxLayout(self.polygonPanel, BoxLayout.Y_AXIS)) polyInfo = JLabel("<html>%s</html>" % self.app.strings.getString("polygon_info")) polyInfo.setFont(polyInfo.getFont().deriveFont(Font.ITALIC)) polyInfo.setAlignmentX(Component.LEFT_ALIGNMENT) editPolyPane = JPanel() editPolyPane.setAlignmentX(Component.LEFT_ALIGNMENT) editPolyBtn = JButton(self.app.strings.getString("create_fav_layer"), actionPerformed=self.create_new_zone_editing_layer) editPolyBtn.setToolTipText(self.app.strings.getString("create_fav_layer_tooltip")) editPolyPane.add(editPolyBtn) self.polygonPanel.add(polyInfo) self.polygonPanel.add(Box.createRigidArea(Dimension(0, 15))) self.polygonPanel.add(editPolyPane) self.polygonPanel.add(Box.createRigidArea(Dimension(0, 15))) #- Administrative Boundary self.boundaryPanel = JPanel() self.boundaryPanel.setLayout(BoxLayout(self.boundaryPanel, BoxLayout.Y_AXIS)) boundaryInfo = JLabel("<html>%s</html>" % app.strings.getString("boundary_info")) boundaryInfo.setFont(boundaryInfo.getFont().deriveFont(Font.ITALIC)) boundaryInfo.setAlignmentX(Component.LEFT_ALIGNMENT) boundaryTagsPanel = JPanel(GridLayout(3, 3, 5, 5)) boundaryTagsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) boundaryTagsPanel.add(JLabel("name =")) self.nameTagTextField = JTextField(20) boundaryTagsPanel.add(self.nameTagTextField) boundaryTagsPanel.add(JLabel("admin_level =")) self.adminLevelTagTextField = JTextField(20) self.adminLevelTagTextField.setToolTipText(self.app.strings.getString("adminLevel_tooltip")) boundaryTagsPanel.add(self.adminLevelTagTextField) boundaryTagsPanel.add(JLabel(self.app.strings.getString("other_tag"))) self.optionalTagTextField = JTextField(20) self.optionalTagTextField.setToolTipText("key=value") boundaryTagsPanel.add(self.optionalTagTextField) downloadBoundariesPane = JPanel() downloadBoundariesPane.setAlignmentX(Component.LEFT_ALIGNMENT) downloadBoundariesBtn = JButton(self.app.strings.getString("download_boundary"), actionPerformed=self.on_downloadBoundariesBtn_clicked) downloadBoundariesBtn.setToolTipText(self.app.strings.getString("download_boundary_tooltip")) downloadBoundariesPane.add(downloadBoundariesBtn) self.boundaryPanel.add(boundaryInfo) self.boundaryPanel.add(Box.createRigidArea(Dimension(0, 15))) self.boundaryPanel.add(boundaryTagsPanel) self.boundaryPanel.add(Box.createRigidArea(Dimension(0, 10))) self.boundaryPanel.add(downloadBoundariesPane) self.editingPanels = {"rectangle": self.rectPanel, "polygon": self.polygonPanel, "boundary": self.boundaryPanel} #Main buttons self.okBtn = JButton(self.app.strings.getString("OK"), ImageProvider.get("ok"), actionPerformed=self.on_okBtn_clicked) self.cancelBtn = JButton(self.app.strings.getString("cancel"), ImageProvider.get("cancel"), actionPerformed=self.close_dialog) self.previewBtn = JButton(self.app.strings.getString("Preview_zone"), actionPerformed=self.on_previewBtn_clicked) self.previewBtn.setToolTipText(self.app.strings.getString("preview_zone_tooltip")) okBtnSize = self.okBtn.getPreferredSize() viewBtnSize = self.previewBtn.getPreferredSize() viewBtnSize.height = okBtnSize.height self.previewBtn.setPreferredSize(viewBtnSize) #layout self.add(info) self.add(Box.createRigidArea(Dimension(0, 15))) namePanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(namePanel) self.add(Box.createRigidArea(Dimension(0, 15))) countryPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(countryPanel) self.add(Box.createRigidArea(Dimension(0, 15))) modeLbl.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(modeLbl) self.add(Box.createRigidArea(Dimension(0, 5))) self.add(self.modesComboBox) self.modesComboBox.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(Box.createRigidArea(Dimension(0, 15))) self.configPanel = JPanel(CardLayout()) self.configPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)) self.configPanel.add(self.rectPanel, RECTPANEL) self.configPanel.add(self.polygonPanel, POLYGONPANEL) self.configPanel.add(self.boundaryPanel, BOUNDARYPANEL) self.configPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(self.configPanel) buttonsPanel = JPanel() buttonsPanel.add(self.okBtn) buttonsPanel.add(self.cancelBtn) buttonsPanel.add(self.previewBtn) buttonsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(buttonsPanel) self.addWindowListener(self) self.pack()
class DataSourcesPanelSettings(JPanel): serialVersionUID = 1L def __init__(self): self.pcs = PropertyChangeSupport(self) self.initComponents() self.customizeComponents() def getVersionNumber(self): return serialVersionUID #PROCESSOR LOGIC def run(self, progressMonitor, callback): threading.Thread(target=self.running, args=[progressMonitor, callback]).start() def running(self, progressMonitor, callback): progressMonitor.setIndeterminate(True) newDataSources = [] errors = [] result = DataSourceProcessorCallback.DataSourceProcessorResult.NO_ERRORS try: extractor = Extractor(self.selected_apps, self.selected_devices, progressMonitor) folders = extractor.dump_apps() for serial, folder in folders.items(): try: data_source = PsyUtils.add_to_fileset("ADB_{}_{}".format( serial, int(time.time())), folder, notify=False) newDataSources.append(data_source) except Exception as e: message = "Extractor Failed for {} for {}!".format( serial, e) logging.error(message) errors.append(message) result = DataSourceProcessorCallback.DataSourceProcessorResult.NONCRITICAL_ERRORS except Exception as e: message = "Global Extractor Failed. Aborting: {}".format(e) logging.error(message) errors.append(message) result = DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS if len(newDataSources) == 0: result = DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS callback.done(result, errors, newDataSources) #PROCESSOR JPANEL LOGIC def addPropertyChangeListener(self, pcl): super(DataSourcesPanelSettings, self).addPropertyChangeListener(pcl) self.pcs.addPropertyChangeListener(pcl) def fireUIUpdate(self): #Fire UI change, this is necessary to know if it's allowed to click next self.pcs.firePropertyChange( DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), False, True) def validatePanel(self): return (len(self.selected_apps) != 0 and len(self.selected_devices) != 0) def initComponents(self): self.apps_checkboxes_list = [] self.devices_checkboxes_list = [] self.selected_apps = [] self.selected_devices = [] self.setLayout(BoxLayout(self, BoxLayout.PAGE_AXIS)) self.setPreferredSize( Dimension(543, 172) ) #Max 544x173 https://www.sleuthkit.org/autopsy/docs/api-docs/3.1/interfaceorg_1_1sleuthkit_1_1autopsy_1_1corecomponentinterfaces_1_1_data_source_processor.html#a068919818c017ee953180cc79cc68c80 # info menu self.p_info = SettingsUtils.createPanel() self.p_info.setPreferredSize(Dimension(543, 172)) self.d_method = SettingsUtils.createPanel(pbottom=15) self.label = JLabel( 'Press "Find Devices" to search for devices to extract information.' ) self.label.setBorder(EmptyBorder(0, 0, 5, 0)) self.d_method.add(self.label) self.label = JLabel('It will generate a file set per device.') self.label.setBorder(EmptyBorder(0, 0, 10, 0)) self.d_method.add(self.label) self.label = JLabel( 'This extract method requires ADB enabled on the device and may require root privilege for some paths.' ) self.label.setFont(self.label.getFont().deriveFont(Font.BOLD, 11)) self.label.setBorder(EmptyBorder(0, 0, 10, 0)) self.d_method.add(self.label) self.search_devices = JButton('Find Devices', actionPerformed=self.findDevices) self.d_method.add(self.search_devices) self.p_method = SettingsUtils.createPanel(ptop=15) self.sp2 = SettingsUtils.createSeparators(0) self.p_info.add(self.sp2, BorderLayout.SOUTH) self.p_method.add(JLabel("Extract user data from:")) self.p_apps = SettingsUtils.createPanel(True, pbottom=10) self.p_devices = SettingsUtils.createPanel(True) self.choose_device = JLabel("Choose device:") self.choose_device.setVisible(False) self.appsBlock() self.add(self.d_method) self.add(JSeparator()) self.add(self.p_method) self.add(self.p_apps) self.add(self.choose_device) self.add(self.p_devices) self.add(self.p_info) self.findDevices("") def customizeComponents(self): self.updateCheckboxes("") def updateCheckboxes(self, event): self.getSelectedApps(event) #initialize selected apps self.getSelectedDevices(event) #initialize selected devices self.fireUIUpdate() def findDevices(self, event): self.p_devices.removeAll() self.devices_checkboxes_list = [] devices = DeviceCommunication.list_devices() for device in devices: checkbox = SettingsUtils.addDeviceCheckbox(device, self.updateCheckboxes, visible=True) self.devices_checkboxes_list.append(checkbox) self.p_devices.add(checkbox) self.choose_device.setVisible(len(self.devices_checkboxes_list) > 0) #refresh list self.p_devices.setVisible(False) self.p_devices.setVisible(True) self.updateCheckboxes(event) def appsBlock(self): sorted_items = OrderedDict(sorted(Utils.get_all_packages().items())) for app, app_id in sorted_items.iteritems(): #(app, app_id) checkbox = SettingsUtils.addApplicationCheckbox( app, app_id, self.updateCheckboxes, visible=True) #self.add(checkbox) self.apps_checkboxes_list.append(checkbox) self.p_apps.add(checkbox) def getSelectedDevices(self, event): self.selected_apps = [] for cb_app in self.apps_checkboxes_list: if cb_app.isSelected(): self.selected_apps.append(cb_app.getActionCommand()) def getSelectedApps(self, event): self.selected_devices = [] for cb_app in self.devices_checkboxes_list: if cb_app.isSelected(): self.selected_devices.append(cb_app.getActionCommand())
class CustomTab(ITab): URL_NON_ENCODE_IDX = 0 URL_ENCODE_IDX = 1 def remove_element(self, evt): for item in self.cbList.getSelectedIndices()[::-1]: self.listModel.remove(item) def add_element(self, evt): self.listModel.addElement(self.cbText.getText()) self.cbText.setText("") def add_file(self, evt): fc = JFileChooser() ret = fc.showOpenDialog(self.tab) if ret == JFileChooser.APPROVE_OPTION: with open(fc.getSelectedFile().getCanonicalPath()) as fd: for line in fd: self.listModel.addElement(line) def clear_elements(self, evt): self.listModel.removeAllElements() def paste_elements(self, evt): data = getDefaultToolkit().getSystemClipboard().getData( DataFlavor.stringFlavor) for payload in StringIO.StringIO(data): if payload and not payload.isspace(): self.listModel.addElement(payload) def getOOBList(self): return self.listModel.toArray() def getURLEncoding(self): idx = self.cbDropDown.getSelectedIndex() if idx == self.URL_NON_ENCODE_IDX: return URLEncoding.NoEncoding elif idx == self.URL_ENCODE_IDX: return URLEncoding.Encoding else: return URLEncoding.Both def getTabCaption(self): return ("OOB") def getUiComponent(self): return self.tab def __init__(self): self.listModel = DefaultListModel() self.cbTitle = JLabel("Out-of-band Payloads") self.cbTitle.setFont(self.cbTitle.getFont().deriveFont(14.0)) self.cbTitle.setFont(self.cbTitle.getFont().deriveFont(Font.BOLD)) self.cbSubTitle = JLabel( "Add payloads to active scanner that interact " "with out-of-band services (e.g., XSSHunter)") self.cbSubTitle.setFont(self.cbSubTitle.getFont().deriveFont(12.0)) self.cbList = JList(self.listModel) self.cbList.setCellRenderer(ListRenderer()) self.cbList.setVisibleRowCount(10) self.listScrollPane = JScrollPane(self.cbList) self.cbText = JTextField(actionPerformed=self.add_element) self.cbRemoveButton = JButton("Remove", actionPerformed=self.remove_element) self.cbLoadButton = JButton("Load...", actionPerformed=self.add_file) self.cbPasteButton = JButton("Paste", actionPerformed=self.paste_elements) self.cbClearButton = JButton("Clear", actionPerformed=self.clear_elements) self.cbAddButton = JButton("Add", actionPerformed=self.add_element) self.cbDropDownLabel = JLabel("Payload Encoding: ") self.cbDropDown = JComboBox() self.cbDropDown.addItem("Non URL Encoded") self.cbDropDown.addItem("URL Encoded") self.cbDropDown.addItem("Both (two requests per payload)") self.grpOOB = JPanel() grpLayout = GroupLayout(self.grpOOB) self.grpOOB.setLayout(grpLayout) grpLayout.linkSize(SwingConstants.HORIZONTAL, self.cbRemoveButton, self.cbLoadButton, self.cbPasteButton, self.cbClearButton, self.cbAddButton) grpLayout.setAutoCreateGaps(True) grpLayout.setAutoCreateContainerGaps(True) grpLayout.setHorizontalGroup( grpLayout.createSequentialGroup().addGroup( grpLayout.createParallelGroup().addComponent( self.cbTitle).addGroup( grpLayout.createParallelGroup().addComponent( self.cbRemoveButton).addComponent( self.cbLoadButton).addComponent( self.cbPasteButton).addComponent( self.cbClearButton)).addComponent( self.cbAddButton). addComponent(self.cbDropDownLabel)).addGroup( grpLayout.createParallelGroup().addComponent( self.cbSubTitle).addComponent( self.listScrollPane).addComponent( self.cbText).addComponent(self.cbDropDown))) grpLayout.setVerticalGroup(grpLayout.createSequentialGroup().addGroup( grpLayout.createParallelGroup().addComponent(self.cbTitle) ).addGroup(grpLayout.createParallelGroup().addComponent( self.cbSubTitle)).addGroup( grpLayout.createParallelGroup().addGroup( grpLayout.createSequentialGroup().addComponent( self.cbPasteButton).addComponent( self.cbLoadButton).addComponent( self.cbRemoveButton).addComponent( self.cbClearButton)).addComponent( self.listScrollPane) ).addGroup(grpLayout.createParallelGroup().addComponent( self.cbAddButton).addComponent(self.cbText)).addGroup( grpLayout.createParallelGroup().addComponent( self.cbDropDownLabel).addComponent(self.cbDropDown))) # Tab Layout self.tab = JPanel() tabLayout = GroupLayout(self.tab) self.tab.setLayout(tabLayout) tabLayout.setAutoCreateGaps(True) tabLayout.setAutoCreateContainerGaps(True) tabLayout.setHorizontalGroup( tabLayout.createSequentialGroup().addGroup( tabLayout.createParallelGroup().addComponent( self.grpOOB, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))) tabLayout.setVerticalGroup(tabLayout.createSequentialGroup().addGroup( tabLayout.createParallelGroup().addComponent( self.grpOOB, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)))
class ConfigurationController(IMessageEditorController): def __init__(self, parent): self._parent = parent def getMainComponent(self): self._mainPanel = JPanel() #self._mainPanel.setLayout(BoxLayout(self._mainPanel, BoxLayout.Y_AXIS)) self._mainPanel.setLayout(BorderLayout()) self._titlePanel = JPanel(GridLayout(0, 1)) self._titlePanel.setBorder(EmptyBorder(10, 20, 10, 10)) self._titleText = JLabel("Mode configuration") self._titleText.setForeground(COLOR_BURP_TITLE_ORANGE) self._titleText.setFont(self._titleText.getFont().deriveFont(16.0)) self._titleSubtitleText = JTextArea("Select a mode that works best for the type of exploit you are dealing with.") self._titleSubtitleText.setEditable(False) self._titleSubtitleText.setLineWrap(True) self._titleSubtitleText.setWrapStyleWord(True) self._titleSubtitleText.setHighlighter(None) self._titleSubtitleText.setBorder(None) #Local File Inclusion (LFI): Explore files #Command injection (visual): Shell #Command injection (blind): Shell modes = ['Select mode...', 'Local File Inclusion (LFI) - Discover files', 'OS Command injection (visual) - Shell'] self._cboModes = JComboBox(modes) self._cboModes.addActionListener(self.cboModesChanged()) self._titlePanel.add(self._titleText) self._titlePanel.add(self._titleSubtitleText) self._titlePanel.add(self._cboModes) self._mainPanel.add(self._titlePanel, BorderLayout.NORTH) self._switchPanel = JPanel() self._switchPanel.setLayout(BoxLayout(self._switchPanel, BoxLayout.Y_AXIS)) self._switchPanel.setBorder(EmptyBorder(5, 30, 10, 10)) self._outputCompleteResponseSwitch = JCheckBox("Use full response (not only the response body)") self._outputCompleteResponseSwitch.setSelected(True) self._outputCompleteResponseSwitch.addItemListener(self.OutputCompleteResponseSwitchListener()) self._switchPanel.add(self._outputCompleteResponseSwitch) self._urlEncodeSwitch = JCheckBox("Use url encode") self._urlEncodeSwitch.setSelected(True) self._urlEncodeSwitch.addItemListener(self.UrlEncodeSwitchListener()) self._switchPanel.add(self._urlEncodeSwitch) self._outputIsolatorSwitch = JCheckBox("Use output isolator") self._outputIsolatorSwitch.setSelected(False) self._outputIsolatorSwitch.addItemListener(self.OutputIsolatorSwitchListener()) self._switchPanel.add(self._outputIsolatorSwitch) self._removeSpacesSwitch = JCheckBox("Remove leading and trailing spaces") self._removeSpacesSwitch.setSelected(False) self._removeSpacesSwitch.addItemListener(self.SpacesSwitch()) self._switchPanel.add(self._removeSpacesSwitch) self._removeHtmlTagsSwitch = JCheckBox("Remove html-tags (regex '<.*?>')") self._removeHtmlTagsSwitch.setSelected(False) self._removeHtmlTagsSwitch.addItemListener(self.HtmlTagsSwitch()) self._switchPanel.add(self._removeHtmlTagsSwitch) self._tabCompletionSwitch = JCheckBox("Use tab-completion") self._tabCompletionSwitch.setSelected(False) self._tabCompletionSwitch.addItemListener(self.TabCompletionSwitchListener()) self._switchPanel.add(self._tabCompletionSwitch) self._virtualPersistenceSwitch = JCheckBox("Use virtual persistence") self._virtualPersistenceSwitch.setSelected(False) self._virtualPersistenceSwitch.addItemListener(self.VirtualPersistenceSwitchListener()) self._switchPanel.add(self._virtualPersistenceSwitch) self._wafSwitch = JCheckBox("WAF: Prepend each non-whitespace character (regex '\\w') with '\\'") self._wafSwitch.setSelected(False) self._wafSwitch.addItemListener(self.WafSwitch()) self._switchPanel.add(self._wafSwitch) self._mainPanel.add(self._switchPanel, BorderLayout.CENTER) return self._mainPanel class cboModesChanged(ActionListener): def actionPerformed(self, e): cboModes = e.getSource() mode = cboModes.getSelectedItem() if mode == 'Local File Inclusion (LFI) - Discover files': #Disable output isolator Utils.shellController._outputIsolator = None Utils.outputIsolator = None Utils._outputIsolator = None Utils.configurationController._outputIsolatorSwitch.setSelected(False) Utils.configurationController._outputIsolatorSwitch.setEnabled(False) #Disable remove leading and trailing spaces Utils.shellController._removeSpaces = False Utils.configurationController._removeSpacesSwitch.setSelected(False) Utils.configurationController._removeSpacesSwitch.setEnabled(False) #Disable remove html tags Utils.shellController._removeHtmlTags = False Utils.configurationController._removeHtmlTagsSwitch.setSelected(False) Utils.configurationController._removeHtmlTagsSwitch.setEnabled(False) #Disable tab-completion Utils.shellController._tabCompletion = False Utils.configurationController._tabCompletionSwitch.setSelected(False) Utils.configurationController._tabCompletionSwitch.setEnabled(False) #Disable virtual peristence Utils.shellController._virtualPersistence = False Utils.configurationController._virtualPersistenceSwitch.setSelected(False) Utils.configurationController._virtualPersistenceSwitch.setEnabled(False) #Disable WAF Utils.shellController._waf = False Utils.configurationController._wafSwitch.setSelected(False) Utils.configurationController._wafSwitch.setEnabled(False) if mode == 'OS Command injection (visual) - Shell' or mode == 'Select mode...': Utils.configurationController._outputIsolatorSwitch.setEnabled(True) Utils.configurationController._removeSpacesSwitch.setEnabled(True) Utils.configurationController._removeHtmlTagsSwitch.setEnabled(True) Utils.configurationController._tabCompletionSwitch.setEnabled(True) Utils.configurationController._virtualPersistenceSwitch.setEnabled(True) Utils.configurationController._wafSwitch.setEnabled(True) class OutputIsolatorSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.out("selected") isolator = ["3535start3535", "3535end3535"] Utils.shellController._outputIsolator = isolator Utils.outputIsolator = isolator Utils._outputIsolator = isolator elif e.getStateChange() == ItemEvent.DESELECTED: #TODO If deselected, Virtual persistence should be disabled: unless the body only returns # the command and nothing else, it's near impossible to warrant virtual persistence. # One possibility I have, is to also allow to define positions in the response tab and filter # out the command response like that (without using the outputisolators) Utils.out("deselected") Utils.shellController._outputIsolator = None Utils.outputIsolator = None Utils._outputIsolator = None class SpacesSwitch(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._removeSpaces = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._removeSpaces = False class HtmlTagsSwitch(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._removeHtmlTags = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._removeHtmlTags = False class TabCompletionSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._tabCompletion = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._tabCompletion = False class VirtualPersistenceSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._virtualPersistence = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.consoleController.setPwd(None) Utils.shellController._virtualPersistence = False class UrlEncodeSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._urlEncode = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._urlEncode = False class OutputCompleteResponseSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._outputCompleteResponse = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._outputCompleteResponse = False class WafSwitch(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._waf = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._waf = False
class PositionsController(IMessageEditorController): def __init__(self, parent): self._parent = parent def getMainComponent(self): self._mainPanel = JPanel(BorderLayout()) #Left panel self._leftPanel = JPanel(BorderLayout()) self._leftPanel.setBorder(EmptyBorder(10, 10, 10, 10)) #Left subpanel - Positions editor self._positionsEditor = Utils.callbacks.createTextEditor() #TODO Remove a normal editor? self._positionsEditor = Utils.callbacks.createMessageEditor(self, True) self._positionsEditor.getComponent().setBorder(BorderFactory.createLineBorder(Color.BLACK)) #Left subpanel - Title pane self._leftTitlePanel = JPanel(GridLayout(0, 1)) self._leftTitlePanel.setBorder(EmptyBorder(0, 10, 10, 10)) self._titleText = JLabel("Commands Position") self._titleText.setForeground(COLOR_BURP_TITLE_ORANGE) self._titleText.setFont(self._titleText.getFont().deriveFont(16.0)) self._titleSubtitleText = JTextArea("Configure the position where commands will be inserted into the base request. Select the requests that were send Shell in the dropdown, then select the part of the request where commands need to be inserted and click the 'Add $' button.") self._titleSubtitleText.setEditable(False) self._titleSubtitleText.setLineWrap(True) self._titleSubtitleText.setWrapStyleWord(True) self._titleSubtitleText.setHighlighter(None) self._titleSubtitleText.setBorder(None) self._leftTitlePanel.add(self._titleText) self._leftTitlePanel.add(self._titleSubtitleText) #Left subpanel - Add positions editor and title self._leftPanel.add(self._leftTitlePanel, BorderLayout.NORTH) self._leftPanel.add(self._positionsEditor.getComponent(), BorderLayout.CENTER) #Right panel #self._rightPanel = JPanel(GridLayout(20, 1)) self._rightPanel = JPanel() self._rightPanel.setLayout(BoxLayout(self._rightPanel, BoxLayout.Y_AXIS)) #self._rightPanel.setPreferredSize(Dimension(150, 30)) self._rightPanel.setBorder(EmptyBorder(10, 10, 10, 10)) #Right panel - buttons self._buttonAdd = JButton(" Add $ ", actionPerformed=self.buttonAddClick) self._buttonClear = JButton(" Clear $ ", actionPerformed=self.buttonClearClick) #, actionPerformed=None # Right panel - add components self._rightPanel.add(self._buttonAdd) self._rightPanel.add(self._buttonClear) self._mainPanel.add(self._rightPanel, BorderLayout.EAST) self._mainPanel.add(self._leftPanel, BorderLayout.CENTER) return self._mainPanel def buttonAddClick(self, e): Utils.out("Button Add click") if self._positionsEditor.getSelectedText(): #TODO: For if it's a messageeditor in stead of texteditor Utils.out(self._positionsEditor.getSelectedData()) self.addPosition(self._positionsEditor.getSelectionBounds()) self._parent._consoleController.startSession() self._buttonAdd.setEnabled(False) def buttonClearClick(self, e): Utils.out("Button Clear click") self.setEditor(self._parent.currentRequestRaw()) self._buttonAdd.setEnabled(True) def setEditor(self, request_in_bytes): self._positionsEditor.setText(request_in_bytes) #TODO: for if I make the positions a messageExitor: self._positionsEditor.setMessage(iHttpRequestResponse.getRequest(), True) def addPosition(self, boundsArray): if len(boundsArray) == 2: self._parent.setCurrentRequestBounds(boundsArray[0], boundsArray[1]) modified_request = Utils.wrapRawData(self._parent.currentRequestRaw(), boundsArray[0], boundsArray[1], "$", "$") self.setEditor(modified_request)
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 __init__(self, app): from java.awt import Dialog from java.awt import CardLayout JDialog.__init__(self, app.preferencesFrame, app.strings.getString("Create_a_new_favourite_zone"), Dialog.ModalityType.DOCUMENT_MODAL) self.app = app border = BorderFactory.createEmptyBorder(5, 7, 7, 7) self.getContentPane().setBorder(border) self.setLayout(BoxLayout(self.getContentPane(), BoxLayout.Y_AXIS)) self.FAVAREALAYERNAME = "Favourite zone editing" info = JLabel(self.app.strings.getString("Create_a_new_favourite_zone")) info.setAlignmentX(Component.LEFT_ALIGNMENT) #Name nameLbl = JLabel(self.app.strings.getString("fav_zone_name")) self.nameTextField = JTextField(20) self.nameTextField.setMaximumSize(self.nameTextField.getPreferredSize()) self.nameTextField.setToolTipText(self.app.strings.getString("fav_zone_name_tooltip")) namePanel = JPanel() namePanel.setLayout(BoxLayout(namePanel, BoxLayout.X_AXIS)) namePanel.add(nameLbl) namePanel.add(Box.createHorizontalGlue()) namePanel.add(self.nameTextField) #Country countryLbl = JLabel(self.app.strings.getString("fav_zone_country")) self.countryTextField = JTextField(20) self.countryTextField.setMaximumSize(self.countryTextField.getPreferredSize()) self.countryTextField.setToolTipText(self.app.strings.getString("fav_zone_country_tooltip")) countryPanel = JPanel() countryPanel.setLayout(BoxLayout(countryPanel, BoxLayout.X_AXIS)) countryPanel.add(countryLbl) countryPanel.add(Box.createHorizontalGlue()) countryPanel.add(self.countryTextField) #Type modeLbl = JLabel(self.app.strings.getString("fav_zone_type")) RECTPANEL = "rectangle" POLYGONPANEL = "polygon" BOUNDARYPANEL = "boundary" self.modesStrings = [RECTPANEL, POLYGONPANEL, BOUNDARYPANEL] modesComboModel = DefaultComboBoxModel() for i in (self.app.strings.getString("rectangle"), self.app.strings.getString("delimited_by_a_closed_way"), self.app.strings.getString("delimited_by_an_administrative_boundary")): modesComboModel.addElement(i) self.modesComboBox = JComboBox(modesComboModel, actionListener=self, editable=False) #- Rectangle self.rectPanel = JPanel() self.rectPanel.setLayout(BoxLayout(self.rectPanel, BoxLayout.Y_AXIS)) capturePane = JPanel() capturePane.setLayout(BoxLayout(capturePane, BoxLayout.X_AXIS)) capturePane.setAlignmentX(Component.LEFT_ALIGNMENT) josmP = JPanel() self.captureRBtn = JRadioButton(self.app.strings.getString("capture_area")) self.captureRBtn.addActionListener(self) self.captureRBtn.setSelected(True) self.bboxFromJosmBtn = JButton(self.app.strings.getString("get_current_area"), actionPerformed=self.on_bboxFromJosmBtn_clicked) self.bboxFromJosmBtn.setToolTipText(self.app.strings.getString("get_capture_area_tooltip")) josmP.add(self.bboxFromJosmBtn) capturePane.add(self.captureRBtn) capturePane.add(Box.createHorizontalGlue()) capturePane.add(self.bboxFromJosmBtn) manualPane = JPanel() manualPane.setLayout(BoxLayout(manualPane, BoxLayout.X_AXIS)) manualPane.setAlignmentX(Component.LEFT_ALIGNMENT) self.manualRBtn = JRadioButton(self.app.strings.getString("use_this_bbox")) self.manualRBtn.addActionListener(self) self.bboxTextField = JTextField(20) self.bboxTextField.setMaximumSize(self.bboxTextField.getPreferredSize()) self.bboxTextField.setToolTipText(self.app.strings.getString("fav_bbox_tooltip")) self.bboxTextFieldDefaultBorder = self.bboxTextField.getBorder() self.bboxTextField.getDocument().addDocumentListener(TextListener(self)) manualPane.add(self.manualRBtn) manualPane.add(Box.createHorizontalGlue()) manualPane.add(self.bboxTextField) group = ButtonGroup() group.add(self.captureRBtn) group.add(self.manualRBtn) previewPane = JPanel() previewPane.setLayout(BoxLayout(previewPane, BoxLayout.X_AXIS)) previewPane.setAlignmentX(Component.LEFT_ALIGNMENT) bboxPreviewInfo = JTextField(self.app.strings.getString("coordinates"), editable=0, border=None) bboxPreviewInfo.setMaximumSize(bboxPreviewInfo.getPreferredSize()) self.bboxPreviewTextField = JTextField(20, editable=0, border=None) self.bboxPreviewTextField.setMaximumSize(self.bboxPreviewTextField.getPreferredSize()) previewPane.add(bboxPreviewInfo) previewPane.add(Box.createHorizontalGlue()) previewPane.add(self.bboxPreviewTextField) self.rectPanel.add(capturePane) self.rectPanel.add(Box.createRigidArea(Dimension(0, 10))) self.rectPanel.add(manualPane) self.rectPanel.add(Box.createRigidArea(Dimension(0, 20))) self.rectPanel.add(previewPane) #- Polygon (closed way) drawn by hand self.polygonPanel = JPanel(BorderLayout()) self.polygonPanel.setLayout(BoxLayout(self.polygonPanel, BoxLayout.Y_AXIS)) polyInfo = JLabel("<html>%s</html>" % self.app.strings.getString("polygon_info")) polyInfo.setFont(polyInfo.getFont().deriveFont(Font.ITALIC)) polyInfo.setAlignmentX(Component.LEFT_ALIGNMENT) editPolyPane = JPanel() editPolyPane.setAlignmentX(Component.LEFT_ALIGNMENT) editPolyBtn = JButton(self.app.strings.getString("create_fav_layer"), actionPerformed=self.create_new_zone_editing_layer) editPolyBtn.setToolTipText(self.app.strings.getString("create_fav_layer_tooltip")) editPolyPane.add(editPolyBtn) self.polygonPanel.add(polyInfo) self.polygonPanel.add(Box.createRigidArea(Dimension(0, 15))) self.polygonPanel.add(editPolyPane) self.polygonPanel.add(Box.createRigidArea(Dimension(0, 15))) #- Administrative Boundary self.boundaryPanel = JPanel() self.boundaryPanel.setLayout(BoxLayout(self.boundaryPanel, BoxLayout.Y_AXIS)) boundaryInfo = JLabel("<html>%s</html>" % app.strings.getString("boundary_info")) boundaryInfo.setFont(boundaryInfo.getFont().deriveFont(Font.ITALIC)) boundaryInfo.setAlignmentX(Component.LEFT_ALIGNMENT) boundaryTagsPanel = JPanel(GridLayout(3, 3, 5, 5)) boundaryTagsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) boundaryTagsPanel.add(JLabel("name =")) self.nameTagTextField = JTextField(20) boundaryTagsPanel.add(self.nameTagTextField) boundaryTagsPanel.add(UrlLabel("http://wiki.openstreetmap.org/wiki/Key:admin_level#admin_level", "admin_level =")) self.adminLevelTagTextField = JTextField(20) self.adminLevelTagTextField.setToolTipText(self.app.strings.getString("adminLevel_tooltip")) boundaryTagsPanel.add(self.adminLevelTagTextField) boundaryTagsPanel.add(JLabel(self.app.strings.getString("other_tag"))) self.optionalTagTextField = JTextField(20) self.optionalTagTextField.setToolTipText("key=value") boundaryTagsPanel.add(self.optionalTagTextField) downloadBoundariesPane = JPanel() downloadBoundariesPane.setAlignmentX(Component.LEFT_ALIGNMENT) downloadBoundariesBtn = JButton(self.app.strings.getString("download_boundary"), actionPerformed=self.on_downloadBoundariesBtn_clicked) downloadBoundariesBtn.setToolTipText(self.app.strings.getString("download_boundary_tooltip")) downloadBoundariesPane.add(downloadBoundariesBtn) self.boundaryPanel.add(boundaryInfo) self.boundaryPanel.add(Box.createRigidArea(Dimension(0, 15))) self.boundaryPanel.add(boundaryTagsPanel) self.boundaryPanel.add(Box.createRigidArea(Dimension(0, 10))) self.boundaryPanel.add(downloadBoundariesPane) self.editingPanels = {"rectangle": self.rectPanel, "polygon": self.polygonPanel, "boundary": self.boundaryPanel} #Main buttons self.okBtn = JButton(self.app.strings.getString("OK"), ImageProvider.get("ok"), actionPerformed=self.on_okBtn_clicked) self.cancelBtn = JButton(self.app.strings.getString("cancel"), ImageProvider.get("cancel"), actionPerformed=self.close_dialog) self.previewBtn = JButton(self.app.strings.getString("Preview_zone"), actionPerformed=self.on_previewBtn_clicked) self.previewBtn.setToolTipText(self.app.strings.getString("preview_zone_tooltip")) okBtnSize = self.okBtn.getPreferredSize() viewBtnSize = self.previewBtn.getPreferredSize() viewBtnSize.height = okBtnSize.height self.previewBtn.setPreferredSize(viewBtnSize) #layout self.add(info) self.add(Box.createRigidArea(Dimension(0, 15))) namePanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(namePanel) self.add(Box.createRigidArea(Dimension(0, 15))) countryPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(countryPanel) self.add(Box.createRigidArea(Dimension(0, 15))) modeLbl.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(modeLbl) self.add(Box.createRigidArea(Dimension(0, 5))) self.add(self.modesComboBox) self.modesComboBox.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(Box.createRigidArea(Dimension(0, 15))) self.configPanel = JPanel(CardLayout()) self.configPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)) self.configPanel.add(self.rectPanel, RECTPANEL) self.configPanel.add(self.polygonPanel, POLYGONPANEL) self.configPanel.add(self.boundaryPanel, BOUNDARYPANEL) self.configPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(self.configPanel) buttonsPanel = JPanel() buttonsPanel.add(self.okBtn) buttonsPanel.add(self.cancelBtn) buttonsPanel.add(self.previewBtn) buttonsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(buttonsPanel) self.addWindowListener(self) self.pack()
def initComponents(self): TabbedPane1 = JTabbedPane() GeneratorScrollPane = JScrollPane() GeneratorPanel = JPanel() jlbl1 = JLabel() jlbl2 = JLabel() spanePayloadList = JScrollPane() self.listPayloads = JList() pastePayloadButton = JButton( actionPerformed=self.pastePayloadButtonAction) loadPayloadButton = JButton( actionPerformed=self.loadPayloadButtonAction) removePayloadButton = JButton( actionPerformed=self.removePayloadButtonAction) clearPayloadButton = JButton( actionPerformed=self.clearPayloadButtonAction) self.textNewPayload = JTextField() addPayloadButton = JButton(actionPerformed=self.addPayloadButtonAction) jSeparator1 = JSeparator() jlbl3 = JLabel() jlbl4 = JLabel() self.chkGeneral = JCheckBox(actionPerformed=self.OnCheck) self.chkMAXDB = JCheckBox(actionPerformed=self.OnCheck) self.chkMSSQL = JCheckBox(actionPerformed=self.OnCheck) self.chkMSAccess = JCheckBox(actionPerformed=self.OnCheck) self.chkPostgres = JCheckBox(actionPerformed=self.OnCheck) self.chkOracle = JCheckBox(actionPerformed=self.OnCheck) self.chkSqlite = JCheckBox(actionPerformed=self.OnCheck) self.chkMysql = JCheckBox(actionPerformed=self.OnCheck) jlbl5 = JLabel() toClipboardButton = JButton( actionPerformed=self.toClipboardButtonAction) toFileButton = JButton(actionPerformed=self.toFileButtonAction) ProcessorScrollPane = JScrollPane() ProcessorPanel = JPanel() jLabel1 = JLabel() self.comboProcessorTech = JComboBox( itemStateChanged=self.comboProcessorTechAction) jSeparator2 = JSeparator() jLabel2 = JLabel() jLabel3 = JLabel() jScrollPane1 = JScrollPane() self.textPlainPayload = JTextArea() jLabel4 = JLabel() jScrollPane2 = JScrollPane() self.textTamperedPayload = JTextArea() tamperPayloadButton = JButton( actionPerformed=self.tamperPayloadButtonAction) jlbl1.setForeground(Color(255, 102, 51)) jlbl1.setFont(Font(jlbl1.getFont().toString(), 1, 14)) jlbl1.setText("User-Defiend Payloads") jlbl2.setText( "This payload type lets you configure a simple list of strings that are used as payloads." ) spanePayloadList.setViewportView(self.listPayloads) self.extender.PayloadList = self.readPayloadsListFile() self.listPayloads.setListData(self.extender.PayloadList) pastePayloadButton.setText("Paste") loadPayloadButton.setText("Load") removePayloadButton.setText("Remove") clearPayloadButton.setText("Clear") self.textNewPayload.setToolTipText("") addPayloadButton.setText("Add") jlbl3.setForeground(Color(255, 102, 51)) jlbl3.setFont(Font(jlbl3.getFont().toString(), 1, 14)) jlbl3.setText("Tamper Techniques") jlbl4.setText( "You can select the techniques that you want to perform processing tasks on each user-defined payload" ) self.chkGeneral.setText("General") varName = 'SQLiQueryTampering_{}'.format(self.chkGeneral.text) state = self.extender.callbacks.loadExtensionSetting(varName) if state: self.chkGeneral.setSelected(int(state)) self.chkMAXDB.setText("SAP MAX DB") varName = 'SQLiQueryTampering_{}'.format(self.chkMAXDB.text) state = self.extender.callbacks.loadExtensionSetting(varName) if state: self.chkMAXDB.setSelected(int(state)) self.chkMSSQL.setText("MS SQL Server") varName = 'SQLiQueryTampering_{}'.format(self.chkMSSQL.text) state = self.extender.callbacks.loadExtensionSetting(varName) if state: self.chkMSSQL.setSelected(int(state)) self.chkMSAccess.setText("MS Access") varName = 'SQLiQueryTampering_{}'.format(self.chkMSAccess.text) state = self.extender.callbacks.loadExtensionSetting(varName) if state: self.chkMSAccess.setSelected(int(state)) self.chkPostgres.setText("Postgres SQL") varName = 'SQLiQueryTampering_{}'.format(self.chkPostgres.text) state = self.extender.callbacks.loadExtensionSetting(varName) if state: self.chkPostgres.setSelected(int(state)) self.chkOracle.setText("Oracle") varName = 'SQLiQueryTampering_{}'.format(self.chkOracle.text) state = self.extender.callbacks.loadExtensionSetting(varName) if state: self.chkOracle.setSelected(int(state)) self.chkSqlite.setText("Sqlite") varName = 'SQLiQueryTampering_{}'.format(self.chkSqlite.text) state = self.extender.callbacks.loadExtensionSetting(varName) if state: self.chkSqlite.setSelected(int(state)) self.chkMysql.setText("MySql") varName = 'SQLiQueryTampering_{}'.format(self.chkMysql.text) state = self.extender.callbacks.loadExtensionSetting(varName) if state: self.chkMysql.setSelected(int(state)) jlbl5.setText("[?] Save the Generated/Tampered Payloads to :") toClipboardButton.setText("Clipboard") toFileButton.setText("File") GeneratorPanelLayout = GroupLayout(GeneratorPanel) GeneratorPanel.setLayout(GeneratorPanelLayout) GeneratorPanelLayout.setHorizontalGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING). addGroup(GeneratorPanelLayout.createSequentialGroup( ).addContainerGap().addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.TRAILING).addComponent( jlbl2, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent( jlbl4, GroupLayout.Alignment.LEADING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent( jSeparator1, GroupLayout.Alignment.LEADING). addGroup(GeneratorPanelLayout.createSequentialGroup().addGap( 6, 6, 6).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addGroup( GeneratorPanelLayout.createSequentialGroup( ).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING, False).addComponent( removePayloadButton, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent( clearPayloadButton, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent( loadPayloadButton, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE). addComponent(pastePayloadButton, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent( addPayloadButton, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)). addGap(21, 21, 21).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING). addComponent( self.textNewPayload).addComponent( spanePayloadList))).addComponent( jlbl1).addComponent(jlbl3). addGroup(GeneratorPanelLayout.createSequentialGroup( ).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.chkGeneral).addComponent( self.chkMSSQL) ).addGap(18, 18, 18).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.chkPostgres).addComponent( self.chkMAXDB) ).addGap(18, 18, 18).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.chkMSAccess).addComponent( self.chkOracle) ).addGap(18, 18, 18).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.chkSqlite).addComponent(self.chkMysql) )).addGroup(GeneratorPanelLayout.createSequentialGroup( ).addComponent(jlbl5).addPreferredGap( LayoutStyle.ComponentPlacement. UNRELATED).addComponent(toClipboardButton).addGap( 18, 18, 18).addComponent(toFileButton, GroupLayout.PREFERRED_SIZE, 97, GroupLayout.PREFERRED_SIZE ))))).addContainerGap())) GeneratorPanelLayout.setVerticalGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING). addGroup(GeneratorPanelLayout.createSequentialGroup( ).addContainerGap().addComponent(jlbl1).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED).addComponent( jlbl2, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( spanePayloadList, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE). addGroup(GeneratorPanelLayout.createSequentialGroup( ).addComponent(pastePayloadButton).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED ).addComponent(loadPayloadButton).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED ).addComponent(removePayloadButton).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED). addComponent(clearPayloadButton))). addPreferredGap( LayoutStyle.ComponentPlacement.RELATED).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.textNewPayload, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE). addComponent(addPayloadButton)).addPreferredGap( LayoutStyle.ComponentPlacement.UNRELATED). addComponent(jSeparator1, GroupLayout.PREFERRED_SIZE, 10, GroupLayout.PREFERRED_SIZE).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED). addComponent(jlbl3).addPreferredGap( LayoutStyle.ComponentPlacement.UNRELATED ).addComponent(jlbl4).addPreferredGap( LayoutStyle.ComponentPlacement.UNRELATED).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.chkGeneral).addComponent( self.chkMAXDB).addComponent( self.chkOracle).addComponent( self.chkSqlite)). addPreferredGap( LayoutStyle.ComponentPlacement.UNRELATED).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.chkMSSQL).addComponent( self.chkPostgres).addComponent( self.chkMSAccess).addComponent( self.chkMysql) ).addGap(18, 18, 18).addGroup( GeneratorPanelLayout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( jlbl5).addComponent(toClipboardButton). addComponent(toFileButton)).addGap(20, 20, 20))) GeneratorScrollPane.setViewportView(GeneratorPanel) TabbedPane1.addTab("Generator", GeneratorScrollPane) varName = 'SQLiQueryTampering_comboProcessorTech' state = self.extender.callbacks.loadExtensionSetting(varName) for item in self.extender.getTamperFuncsName(): self.comboProcessorTech.addItem(item) if state: self.comboProcessorTech.setSelectedIndex(int(state)) jLabel1.setText("Processor Technique :") jLabel2.setText( "Modify Plain Payloads based on the selected Processor Technique. Write one payload per line." ) jLabel3.setText("Plain Payloads:") self.textPlainPayload.setColumns(20) self.textPlainPayload.setRows(5) jScrollPane1.setViewportView(self.textPlainPayload) jLabel4.setText("Tampered Payloads:") self.textTamperedPayload.setColumns(20) self.textTamperedPayload.setRows(5) jScrollPane2.setViewportView(self.textTamperedPayload) tamperPayloadButton.setText("Tamper Payloads") ProcessorPanelLayout = GroupLayout(ProcessorPanel) ProcessorPanel.setLayout(ProcessorPanelLayout) ProcessorPanelLayout.setHorizontalGroup( ProcessorPanelLayout. createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( GroupLayout.Alignment.TRAILING, ProcessorPanelLayout.createSequentialGroup().addContainerGap( GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent( tamperPayloadButton).addContainerGap( GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ).addGroup(ProcessorPanelLayout.createSequentialGroup( ).addContainerGap().addGroup( ProcessorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent(jSeparator2). addComponent(jScrollPane1).addComponent(jScrollPane2).addGroup( ProcessorPanelLayout.createSequentialGroup().addGroup( ProcessorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( jLabel3).addComponent(jLabel4).addGroup( ProcessorPanelLayout.createSequentialGroup( ).addComponent(jLabel1).addPreferredGap( LayoutStyle.ComponentPlacement. UNRELATED).addComponent( self.comboProcessorTech, GroupLayout.PREFERRED_SIZE, 286, GroupLayout.PREFERRED_SIZE)). addComponent(jLabel2)).addGap( 0, 78, Short.MAX_VALUE))).addContainerGap())) ProcessorPanelLayout.setVerticalGroup( ProcessorPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addGroup( ProcessorPanelLayout.createSequentialGroup().addGap( 33, 33, 33).addGroup( ProcessorPanelLayout.createParallelGroup( GroupLayout.Alignment.BASELINE). addComponent(jLabel1).addComponent( self.comboProcessorTech, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)).addGap( 18, 18, 18).addComponent( jSeparator2, GroupLayout.PREFERRED_SIZE, 10, GroupLayout.PREFERRED_SIZE).addGap( 12, 12, 12).addComponent(jLabel2).addGap( 18, 18, 18). addComponent(jLabel3).addPreferredGap( LayoutStyle.ComponentPlacement.UNRELATED).addComponent( jScrollPane1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap( LayoutStyle.ComponentPlacement.UNRELATED). addComponent(jLabel4).addPreferredGap( LayoutStyle.ComponentPlacement.UNRELATED).addComponent( jScrollPane2, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap( LayoutStyle.ComponentPlacement.UNRELATED). addComponent(tamperPayloadButton).addGap(36, 36, 36))) ProcessorScrollPane.setViewportView(ProcessorPanel) TabbedPane1.addTab("Processor", ProcessorScrollPane) self.mainPanel = JPanel() layout = GroupLayout(self.mainPanel) self.mainPanel.setLayout(layout) layout.setHorizontalGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( TabbedPane1, GroupLayout.DEFAULT_SIZE, 701, Short.MAX_VALUE)) layout.setVerticalGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent(TabbedPane1)) TabbedPane1.getAccessibleContext().setAccessibleName("Generator")
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()
class SelectionCellRenderer(TreeCellRenderer): def __init__(self, tree, mapContext): self.tree = tree self.mapContext = mapContext self.lblGroup = JLabel() self.lblGroup.setBackground(Color(222, 227, 233)) #.BLUE.brighter()) self.lblGroup.setOpaque(True) self.lblGroup.setText( "plddddddddddddddddddddddddddddddddddddddddddddddddddddddd") self.lblGroupPreferredSize = self.lblGroup.getPreferredSize() #h = self.lblGroupPreferredSize.getHeight() #w = self.lblGroupPreferredSize.getWidth() #self.lblGroupPreferredSize.setSize(h, w) self.pnlLayer = JPanel() self.pnlLayer.setOpaque(False) self.pnlLayer.setLayout(FlowLayout(FlowLayout.LEFT)) self.lblClean = JLabel() self.chkLayerVisibility = JCheckBox() self.chkLayerVisibility.setOpaque(False) self.lblLayerName = JLabel() self.lblLayerIcon = JLabel() self.lblFeatureSelecteds = JLabel() self.pnlLayer.add(self.chkLayerVisibility) self.pnlLayer.add(self.lblClean) self.pnlLayer.add(self.lblFeatureSelecteds) self.pnlLayer.add(self.lblLayerIcon) self.pnlLayer.add(self.lblLayerName) self.tree.setRowHeight( int(self.pnlLayer.getPreferredSize().getHeight()) - 3) self.lblUnknown = JLabel() ## Feature self.lblFeatureIcon = JLabel() self.lblFeatureName = JLabel() i18n = ToolsLocator.getI18nManager() self.lblFeatureName.setText(i18n.getTranslation("_Feature")) self.pnlFeature = JPanel() self.pnlFeature.setOpaque(False) self.pnlFeature.setLayout(FlowLayout(FlowLayout.LEFT)) self.pnlFeature.add(self.lblFeatureIcon) self.pnlFeature.add(self.lblFeatureName) def getTreeCellRendererComponent(self, tree, value, selected, expanded, leaf, row, hasFocus): uo = value.getUserObject() if isinstance(uo, DataGroup): text = "[" + str(value.getChildCount()) + "] " + uo.getName() self.lblGroup.setText(text) self.lblGroup.setPreferredSize(self.lblGroupPreferredSize) return self.lblGroup if isinstance(uo, DataLayer): layer = uo.getLayer() self.lblLayerName.setText(uo.getName()) self.lblLayerIcon.setIcon(getIconFromLayer(layer)) if layer.isVisible(): self.lblLayerName.setEnabled(True) else: self.lblLayerName.setEnabled(False) self.lblClean.setIcon(getIconByName("edit-clear")) self.chkLayerVisibility.setSelected(layer.isVisible()) if layer.isWithinScale( self.mapContext.getScaleView()): # and layer.isVisible(): self.chkLayerVisibility.setEnabled(True) else: self.chkLayerVisibility.setEnabled(False) if layer.getDataStore() != None and layer.getDataStore( ).getSelection() != None and layer.getDataStore().getSelection( ).getSize() != 0: # and layer.isVisible(): self.lblClean.setEnabled(True) self.lblFeatureSelecteds.setText( str(layer.getDataStore().getSelection().getSize())) self.lblFeatureSelecteds.setEnabled(True) else: self.lblClean.setEnabled(False) self.lblFeatureSelecteds.setText("0") self.lblFeatureSelecteds.setEnabled(False) font = self.lblLayerName.getFont() self.lblLayerName.setForeground(Color.BLACK) if layer.isEditing(): self.lblLayerName.setForeground(Color.RED) #if layer.isActive(): if layer.isActive(): # and not font.isBold(): newfont = font.deriveFont(Font.BOLD) self.lblLayerName.setFont(newfont) else: newfont = font.deriveFont(Font.PLAIN) self.lblLayerName.setFont(newfont) return self.pnlLayer if isinstance(uo, FeatureDataLayerNode): self.lblFeatureName.setText(uo.getFeature().toString()) self.lblFeatureIcon.setIcon(getIconByName("edit-clear")) return self.pnlFeature self.lblUnknown.setText("") self.lblUnknown.setPreferredSize(Dimension(0, 0)) return self.lblUnknown
class ProjectIngestSettingsPanel(IngestModuleIngestJobSettingsPanel): def __init__(self, settings): self.local_settings = settings self.initComponents() self.customizeComponents() # def event(self, event): # self.local_settings.setSetting('adb', 'true' if self.adb.isSelected() else 'false') # #self.local_settings.setSetting('clean_temp', 'true' if self.clean_temp.isSelected() else 'false') # self.local_settings.setSetting('old_report', 'true' if self.json_reports.isSelected() else 'false') # # self.local_settings.setSetting('app', self.app.getSelectedItem().split(' (')[0].lower()) def initComponents(self): self.apps_checkboxes_list = [] self.setLayout(BoxLayout(self, BoxLayout.PAGE_AXIS)) # title self.p_title = SettingsUtils.createPanel() self.lb_title = JLabel("Android Forensics") self.lb_title.setFont(self.lb_title.getFont().deriveFont(Font.BOLD, 11)) self.p_title.add(self.lb_title) self.add(self.p_title) # end of title # info menu self.p_info = SettingsUtils.createPanel() self.lb_info = JLabel("") self.lb_info2 = JLabel("") self.p_info.add(self.lb_info) self.p_info.add(self.lb_info2) self.add(self.p_info) # end of info menu # method menu self.p_method = SettingsUtils.createPanel() self.bg_method = ButtonGroup() self.rb_selectedDatasource = SettingsUtils.createRadioButton("Analyse selected datasource", "method_datasource", self.onMethodChange) self.rb_importReportFile = SettingsUtils.createRadioButton("Import previous generated report file","method_importfile" ,self.onMethodChange) self.rb_liveExtraction = SettingsUtils.createRadioButton("Live extraction with ADB","method_adb", self.onMethodChange) self.rb_selectedDatasource.setSelected(True) self.bg_method.add(self.rb_selectedDatasource) self.bg_method.add(self.rb_importReportFile) self.bg_method.add(self.rb_liveExtraction) self.p_method.add(JLabel("Analysis method")) self.p_method.add(self.rb_selectedDatasource) self.p_method.add(self.rb_importReportFile) self.p_method.add(self.rb_liveExtraction) self.add(self.p_method) # end of method menu #app checkboxes menu self.p_apps = SettingsUtils.createPanel() sorted_items = OrderedDict(sorted(Utils.get_all_packages().items())) for app, app_id in sorted_items.iteritems(): #(app, app_id) checkbox = SettingsUtils.addApplicationCheckbox(app, app_id, self.getSelectedApps) self.add(checkbox) self.apps_checkboxes_list.append(checkbox) self.p_apps.add(checkbox) self.add(self.p_apps) # end of checkboxes menu def customizeComponents(self): self.onMethodChange("") #initialize method option self.getSelectedApps("") #initialize selected apps def onMethodChange(self, event): self.method = self.bg_method.getSelection().getActionCommand() self.local_settings.setSetting("method", self.method) if self.method == "method_datasource": self.lb_info.setText("This method is used when there is no data source but you have the device.") self.lb_info2.setText("It will extract the content of the selected applications from the device, analyze and index the forensic artifacts.") self.toggleCheckboxes(False) elif self.method == "method_importfile": self.lb_info.setText("This method is used when you already have a report in json format previously generated by the application.") self.lb_info2.setText("It will analyze the report previously added to the data source and index the forensic artifacts.") self.toggleCheckboxes(False) elif self.method == "method_adb": self.lb_info.setText("This method is used when the application data has already been collected.") self.lb_info2.setText("It will analyze the data source previously added to the data source and index the forensic artifacts.") self.toggleCheckboxes(True) # self.local_settings.setSetting("apps", self.getSelectedApps()) def getSettings(self): return self.local_settings def getMethod(self): return self.bg_method.getSelection().getActionCommand() def getSelectedApps(self, event): selected_apps = [] for cb_app in self.apps_checkboxes_list: if cb_app.isSelected(): selected_apps.append(cb_app.getActionCommand()) self.local_settings.setSetting("apps", json.dumps(selected_apps)) def toggleCheckboxes(self, visible): for cb_app in self.apps_checkboxes_list: cb_app.setVisible(visible)