def load_project_content(self): self.r2Static = Static(self.tab.binary_path, self.plugin_pois) if DS.getProject(self.project_run_id) is None: return for poi in DS.getAllPois(self.project_run_id): if poi.type.lower() == "function": _poi = Function(poi.name) for _projectpoi in poi.data: _var = Var(_projectpoi.name, _projectpoi.type) _var.content['value'] = _projectpoi.data _poi.content['parameters'].append(_var) _poi.content['calls'] = poi.calls _return = Var() _return.importFromDatabase(poi.returnV) _poi.content['return'] = _return self.r2Static.content['Function'].append(_poi) elif poi.type.lower() == "string": _poi = String(poi.name) _poi.importFromDatabase(poi) self.r2Static.content['String'].append(_poi) else: continue self.poiList.addItems(self.r2Static.getPOINames()) for i in range(len(self.r2Static.getPOINames())): list_item = self.poiList.item(i) item = self.r2Static.getPOI(list_item.text()) if type(item) == Function: if item.check: list_item.setCheckState(Qt.Checked) else: list_item.setCheckState(Qt.Unchecked)
def new_project_run(self): try: self.runsMenu.currentIndexChanged.disconnect(self.load_project_run) except TypeError: #when not cennected pass self.pois = [] self.first = 0 if self.tab.binary_path == None: return self.poiList.clear() self.detPOIList.clear() self.terminal.clear() self.run += 1 self.project_run_id = PRM.name_to_database( self.project_name, self.pluginMenu.currentText(), self.run) self.runsMenu.addItem(str(self.run)) self.daRunButton.setDisabled(True) self.daStopButton.setDisabled(True) self.saRunButton.setDisabled(False) DS.createProject(self.project_run_id, None, self.tab.binary_path, None) self.r2Static = Static(self.tab.binary_path, self.plugin_pois) self.runsMenu.currentIndexChanged.connect(self.load_project_run)
def save_project(self): # Check if saving existing project if self.project_list.currentItem() and self.project_list.currentItem( ).isSelected(): name = self.project_name_edit.text() desc = self.project_desc_edit.toPlainText() project = self.project_list.currentItem().text() updatedProject = dbHandler.updateProject(project, name, desc) self.project_list.currentItem().setText(updatedProject) self.project_save_button.setEnabled(False) else: # Else create new project name = self.project_name_edit.text() desc = self.project_desc_edit.toPlainText() path = self.project_path_edit.text() # Check that path is exists if not path: self.error_msg.showMessage("Please provide a binary file.") self.project_path_label.setStyleSheet("color : red") return properties = [] for i in range(12): properties.append(self.project_prop_table.item(i, 1).text()) self.project_path_label.setStyleSheet("color : Black") # Check that name is not empty if not name: self.error_msg.showMessage("Please provide a name.") self.project_name_label.setStyleSheet("color : red") return # Check that another project with the same name doesn't already exist for project in self.projects: if project.__eq__(name): self.error_msg.showMessage( "A project with the same name already exists.") self.project_name_label.setStyleSheet("color : red") return self.project_name_label.setStyleSheet("color : Black") dbHandler.createProject(name, desc, path, properties) # create the project item = QtWidgets.QListWidgetItem(name) self.project_list.addItem(item) self.project_list.setCurrentItem(item) # Add to local list as well self.project_save_button.setEnabled(False) self.project_path_button.hide()
def delete_project(self): item = self.project_list.currentItem() name = self.project_name_edit.text() if item and name: reply = QMessageBox.question( self, "Delete project", "Are you sure you want to delete this project?", QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: dbHandler.deleteProject(name) self.project_list.takeItem(self.project_list.currentRow()) self.hide_detailed_view() else: self.hide_detailed_view()
def save_poi(self, ppoi): self.pois.append(ppoi.name) item = QtWidgets.QListWidgetItem(ppoi.name) self.poiList.addItem(item) project = DS.getProject(self.project_run_id) project.projectPOI.append(ppoi) project.save()
def static_finished(self): self.setDisabled(False) self.r2Static.message.disconnect(self.write) self.r2Static.finished.disconnect(self.static_finished) self.r2Static.add_poi.disconnect(self.save_poi) self.r2Static.add_function.disconnect(self.save_function) self.runsMenu.currentIndexChanged.connect(self.load_project_run) self.pluginMenu.currentIndexChanged.connect(self.load_plugin_data) self.pluginMenu.currentIndexChanged.connect(self.load_project_run) self.daRunButton.setDisabled(False) for poi in self.r2Static.content['Function']: _poi_data = poi.toProjectPoi() poi_data = DS.getPOI(poi.content['name']) if poi_data != None: ProjectPOI.transferPOI(poi_data, _poi_data) DS.getProject(self.project_run_id).save()
def save_function(self, fpoi): self.pois.append(fpoi.name) item = QtWidgets.QListWidgetItem(fpoi.name) item.setCheckState(Qt.Checked) self.poiList.addItem(item) project = DS.getProject(self.project_run_id) project.projectFunctions.append(fpoi) project.save()
def select_project(self, item): self.project_name_edit.setReadOnly(True) title = 'BEAT - ' + item.text() self.window_name.emit(title) self.parent().setWindowTitle(title) self.show_detailed_view() self.project_path_button.hide() self.project_name_edit.setText(item.text()) self.project_name_edit.setDisabled(True) project = dbHandler.getProject(item.text()) self.project_desc_edit.setPlainText(project.description) self.project_path_edit.setText(project.path) properties = project.properties for index in range(len(properties)): item = QtWidgets.QTableWidgetItem() item.setFlags(QtCore.Qt.ItemIsEnabled) item.setText(properties[index]) self.project_prop_table.setItem(index, 1, item) self.project_save_button.setDisabled(True)
def load_plugin_data(self): try: self.runsMenu.currentIndexChanged.disconnect(self.load_project_run) except TypeError: #when not cennected pass self.plugin_name = self.pluginMenu.currentText() self.plugin_pois = dict() self.plugin_pois['Function'] = [] self.plugin_pois['String'] = [] for poi in dbHandler.getPluginPOI(self.plugin_name): for poi_type in self.poi_types: if poi.type == poi_type: self.plugin_pois[poi_type].append(poi.to_dict()) self.runsMenu.clear() self.run = DS.get_runs(self.project_name, self.pluginMenu.currentText()) - 1 runs = [str(run) for run in range(self.run + 1)[1:]] self.runsMenu.addItems(runs) self.runsMenu.currentIndexChanged.connect(self.load_project_run)
def load_projects(self): names = dbHandler.getAllProjects() for name in names: self.projects.append(name) self.project_list.addItem(name)