def _schedule_re_analysis_task(self, uid, analysis_task, re_do): fw = convert_analysis_task_to_fw_obj(analysis_task) if re_do: with ConnectTo(AdminDbInterface, self._config) as sc: sc.delete_firmware(uid, delete_root_file=False) with ConnectTo(InterComFrontEndBinding, self._config) as sc: sc.add_re_analyze_task(fw)
def _app_upload(self): error = {} if request.method == 'POST': analysis_task = create_analysis_task(request) error = check_for_errors(analysis_task) if not error: fw = convert_analysis_task_to_fw_obj(analysis_task) with ConnectTo(InterComFrontEndBinding, self._config) as sc: sc.add_analysis_task(fw) return render_template('upload/upload_successful.html', uid=analysis_task['uid']) with ConnectTo(FrontEndDbInterface, self._config) as sc: device_class_list = sc.get_device_class_list() vendor_list = sc.get_vendor_list() device_name_dict = sc.get_device_name_dict() with ConnectTo(InterComFrontEndBinding, self._config) as sc: analysis_plugins = sc.get_available_analysis_plugins() analysis_presets = [key for key in self._config['default_plugins']] return render_template('upload/upload.html', device_classes=device_class_list, vendors=vendor_list, error=error, analysis_presets=analysis_presets, device_names=json.dumps(device_name_dict, sort_keys=True), analysis_plugin_dict=analysis_plugins)
def post_upload(self): analysis_task = create_analysis_task(request, self._config) error = check_for_errors(analysis_task) if error: return self.get_upload(error=error) fw = convert_analysis_task_to_fw_obj(analysis_task) with ConnectTo(InterComFrontEndBinding, self._config) as sc: sc.add_analysis_task(fw) return render_template('upload/upload_successful.html', uid=analysis_task['uid'])
def _process_data(self, data): try: data['binary'] = standard_b64decode(data['binary']) except binascii.Error: return dict( error_message='Could not parse binary (must be valid base64!)') firmware_object = convert_analysis_task_to_fw_obj(data) with ConnectTo(InterComFrontEndBinding, self.config) as intercom: intercom.add_analysis_task(firmware_object) data.pop('binary') return dict(uid=firmware_object.uid)
def _schedule_re_analysis_task(self, uid, analysis_task, re_do, force_reanalysis=False): if re_do: base_fw = None with ConnectTo(AdminDbInterface, self._config) as sc: sc.delete_firmware(uid, delete_root_file=False) else: with ConnectTo(FrontEndDbInterface, self._config) as db: base_fw = db.get_firmware(uid) base_fw.force_update = force_reanalysis fw = convert_analysis_task_to_fw_obj(analysis_task, base_fw=base_fw) with ConnectTo(InterComFrontEndBinding, self._config) as sc: sc.add_re_analyze_task(fw, unpack=re_do)
def _process_data(self, data): for field in ['device_name', 'device_class', 'device_part', 'file_name', 'version', 'vendor', 'release_date', 'requested_analysis_systems', 'binary']: if field not in data.keys(): return dict(error_message='{} not found'.format(field)) data['binary'] = standard_b64decode(data['binary']) firmware_object = convert_analysis_task_to_fw_obj(data) with ConnectTo(InterComFrontEndBinding, self.config) as intercom: intercom.add_analysis_task(firmware_object) data.pop('binary') return dict(uid=firmware_object.get_uid())
def test_convert_analysis_task_to_firmware_object(self): fw_obj = convert_analysis_task_to_fw_obj(TEST_TASK) self.assertIsInstance(fw_obj, Firmware, 'return type not correct') self.assertEqual(fw_obj.uid, '2e99758548972a8e8822ad47fa1017ff72f06f3ff6a016851f45c398732bc50c_14', 'uid not correct -> binary not correct') self.assertEqual(fw_obj.file_name, 'test_file_name') self.assertEqual(fw_obj.device_name, 'test device') self.assertEqual(fw_obj.part, 'kernel') self.assertEqual(fw_obj.device_class, 'test class') self.assertEqual(fw_obj.version, '1.0') self.assertEqual(fw_obj.vendor, 'test vendor') self.assertEqual(fw_obj.release_date, '01.01.1970') self.assertEqual(len(fw_obj.scheduled_analysis), 2) self.assertIn('dummy', fw_obj.scheduled_analysis) self.assertIsInstance(fw_obj.tags, dict, 'tag type not correct')
def test_convert_fw_analysis_task_both_directions(self): fw = convert_analysis_task_to_fw_obj(TEST_TASK) result = convert_fw_obj_to_analysis_task(fw) self.assertEqual(result, TEST_TASK)