From 004673eff60299ec04b5b06e5b2f024eec6bd41b Mon Sep 17 00:00:00 2001 From: lukmzig <30526586+lukmzig@users.noreply.github.com> Date: Tue, 23 Apr 2024 11:47:41 +0200 Subject: [PATCH] Replace Request::get with explicit input sources (#405) * Replace Request::get with explicit input sources * Apply php-cs-fixer changes * fix: PHP STAN * fix: PHP STAN * fix: remove debug --------- Co-authored-by: lukmzig --- src/Controller/ConfigDataObjectController.php | 172 +++++++++--------- src/Controller/PushImportController.php | 17 +- 2 files changed, 101 insertions(+), 88 deletions(-) diff --git a/src/Controller/ConfigDataObjectController.php b/src/Controller/ConfigDataObjectController.php index 3e2540ee..90134186 100644 --- a/src/Controller/ConfigDataObjectController.php +++ b/src/Controller/ConfigDataObjectController.php @@ -16,6 +16,7 @@ namespace Pimcore\Bundle\DataImporterBundle\Controller; use Cron\CronExpression; +use Exception; use League\Flysystem\FilesystemOperator; use Pimcore\Bundle\AdminBundle\Helper\QueryParams; use Pimcore\Bundle\DataHubBundle\Configuration\Dao; @@ -67,18 +68,18 @@ public function __construct(PreviewService $previewService) /** * @Route("/save") * - * @throws \Exception + * @throws Exception */ public function saveAction(Request $request): ?JsonResponse { $this->checkPermission(self::CONFIG_NAME); try { - $data = $request->get('data'); - $modificationDate = $request->get('modificationDate', 0); + $data = $request->request->get('data'); + $modificationDate = $request->request->getInt('modificationDate'); if ($modificationDate < Dao::getConfigModificationDate()) { - throw new \Exception('The configuration was modified during editing, please reload the configuration and make your changes again'); + throw new Exception('The configuration was modified during editing, please reload the configuration and make your changes again'); } $dataDecoded = json_decode($data, true); @@ -99,7 +100,7 @@ public function saveAction(Request $request): ?JsonResponse } else { return $this->json(['success' => false, 'permissionError' => true]); } - } catch (\Exception $e) { + } catch (Exception $e) { return $this->json(['success' => false, 'message' => $e->getMessage()]); } } @@ -123,7 +124,7 @@ protected function loadAvailableColumnHeaders( $dataPreview = $interpreter->previewData($previewFilePath); return $dataPreview->getDataColumnHeaders(); - } catch (\Exception $e) { + } catch (Exception $e) { Logger::warning($e); } } @@ -140,15 +141,16 @@ protected function loadAvailableColumnHeaders( * * @return JsonResponse * - * @throws \Exception + * @throws Exception */ - public function getAction(Request $request, + public function getAction( + Request $request, ConfigurationPreparationService $configurationPreparationService, InterpreterFactory $interpreterFactory ): JsonResponse { $this->checkPermission(self::CONFIG_NAME); - $name = $request->get('name'); + $name = $request->query->get('name'); $config = $configurationPreparationService->prepareConfiguration($name); return new JsonResponse( @@ -169,7 +171,7 @@ public function getAction(Request $request, * * @return JsonResponse * - * @throws \Exception + * @throws Exception */ public function uploadPreviewDataAction(Request $request) { @@ -178,24 +180,24 @@ public function uploadPreviewDataAction(Request $request) $filename = $_FILES['Filedata']['name']; $sourcePath = $_FILES['Filedata']['tmp_name']; } else { - throw new \Exception('The filename of the preview data is empty'); + throw new Exception('The filename of the preview data is empty'); } if (is_file($sourcePath) && filesize($sourcePath) < 1) { - throw new \Exception('File is empty!'); + throw new Exception('File is empty!'); } elseif (!is_file($sourcePath)) { - throw new \Exception('Something went wrong, please check upload_max_filesize and post_max_size in your php.ini and write permissions of your temporary directories.'); + throw new Exception('Something went wrong, please check upload_max_filesize and post_max_size in your php.ini and write permissions of your temporary directories.'); } if (filesize($sourcePath) > 10485760) { //10 MB - throw new \Exception('File it too big for preview file, please create a smaller one'); + throw new Exception('File it too big for preview file, please create a smaller one'); } - $this->previewService->writePreviewFile($request->get('config_name'), $sourcePath, $this->getPimcoreUser()); + $this->previewService->writePreviewFile($request->query->get('config_name'), $sourcePath, $this->getPimcoreUser()); @unlink($sourcePath); return new JsonResponse(['success' => true]); - } catch (\Exception $e) { + } catch (Exception $e) { Logger::error($e); return $this->jsonResponse([ @@ -214,7 +216,7 @@ public function uploadPreviewDataAction(Request $request) * * @return JsonResponse * - * @throws \Exception + * @throws Exception */ public function copyPreviewDataAction( Request $request, @@ -222,34 +224,34 @@ public function copyPreviewDataAction( DataLoaderFactory $dataLoaderFactory ) { try { - $configName = $request->get('config_name'); - $currentConfig = $request->get('current_config'); + $configName = $request->request->get('config_name'); + $currentConfig = $request->request->get('current_config'); $config = $configurationPreparationService->prepareConfiguration($configName, $currentConfig); $loader = $dataLoaderFactory->loadDataLoader($config['loaderConfig']); if ($loader instanceof PushLoader) { - throw new \Exception('Cannot copy data from push loader for preview.'); + throw new Exception('Cannot copy data from push loader for preview.'); } $sourcePath = $loader->loadData(); if (is_file($sourcePath) && filesize($sourcePath) < 1) { - throw new \Exception('File is empty!'); + throw new Exception('File is empty!'); } elseif (!is_file($sourcePath)) { - throw new \Exception('Something went wrong, please check upload_max_filesize and post_max_size in your php.ini and write permissions of your temporary directories.'); + throw new Exception('Something went wrong, please check upload_max_filesize and post_max_size in your php.ini and write permissions of your temporary directories.'); } if (filesize($sourcePath) > 10485760) { //10 MB - throw new \Exception('File it too big for preview file, please create a smaller one'); + throw new Exception('File it too big for preview file, please create a smaller one'); } - $this->previewService->writePreviewFile($request->get('config_name'), $sourcePath, $this->getPimcoreUser()); + $this->previewService->writePreviewFile($configName, $sourcePath, $this->getPimcoreUser()); $loader->cleanup(); return new JsonResponse(['success' => true]); - } catch (\Exception $e) { + } catch (Exception $e) { Logger::error($e); return $this->jsonResponse([ @@ -269,7 +271,7 @@ public function copyPreviewDataAction( * * @return JsonResponse * - * @throws \Exception + * @throws Exception */ public function loadDataPreviewAction( Request $request, @@ -277,9 +279,9 @@ public function loadDataPreviewAction( InterpreterFactory $interpreterFactory, Translator $translator ) { - $configName = $request->get('config_name'); - $currentConfig = $request->get('current_config'); - $recordNumber = intval($request->get('record_number')); + $configName = $request->request->get('config_name'); + $currentConfig = $request->request->get('current_config'); + $recordNumber = $request->request->getInt('record_number'); $dataPreview = null; $hasData = false; @@ -305,7 +307,7 @@ public function loadDataPreviewAction( } else { $errorMessage = $translator->trans('plugin_pimcore_datahub_data_importer_configpanel_preview_error_invalid_file', [], 'admin'); } - } catch (\Exception $e) { + } catch (Exception $e) { Logger::error($e); $errorMessage = $translator->trans('plugin_pimcore_datahub_data_importer_configpanel_preview_error_prefix', [], 'admin') . ': ' . $e->getMessage(); } @@ -328,15 +330,15 @@ public function loadDataPreviewAction( * * @return JsonResponse * - * @throws \Pimcore\Bundle\DataImporterBundle\Exception\InvalidConfigurationException|\Exception + * @throws Exception */ public function loadAvailableColumnHeadersAction( Request $request, ConfigurationPreparationService $configurationPreparationService, InterpreterFactory $interpreterFactory ) { - $configName = $request->get('config_name'); - $currentConfig = $request->get('current_config'); + $configName = $request->request->get('config_name'); + $currentConfig = $request->request->get('current_config'); $config = $configurationPreparationService->prepareConfiguration($configName, $currentConfig); return new JsonResponse([ @@ -355,7 +357,7 @@ public function loadAvailableColumnHeadersAction( * * @return JsonResponse * - * @throws InvalidConfigurationException|\Exception + * @throws InvalidConfigurationException|Exception */ public function loadTransformationResultPreviewsAction( Request $request, @@ -364,9 +366,9 @@ public function loadTransformationResultPreviewsAction( InterpreterFactory $interpreterFactory, ImportProcessingService $importProcessingService ) { - $configName = $request->get('config_name'); - $currentConfig = $request->get('current_config'); - $recordNumber = intval($request->get('current_preview_record')); + $configName = $request->request->get('config_name'); + $currentConfig = $request->request->get('current_config'); + $recordNumber = $request->request->getInt('current_preview_record'); $config = $configurationPreparationService->prepareConfiguration($configName, $currentConfig); @@ -388,7 +390,7 @@ public function loadTransformationResultPreviewsAction( foreach ($mapping as $index => $mappingConfiguration) { $transformationResults[] = $importProcessingService->generateTransformationResultPreview($importDataRow, $mappingConfiguration); } - } catch (\Exception $e) { + } catch (Exception $e) { Logger::error($e); $errorMessage = $e->getMessage(); } @@ -414,12 +416,17 @@ public function calculateTransformationResultTypeAction( ImportProcessingService $importProcessingService ) { try { - $currentConfig = json_decode($request->get('current_config'), true); - $configName = $request->get('config_name'); + $currentConfig = json_decode( + $request->request->get('current_config'), + true, + 512, + JSON_THROW_ON_ERROR + ); + $configName = $request->request->get('config_name'); $mappingConfiguration = $factory->loadMappingConfigurationItem($configName, $currentConfig, true); return new JsonResponse($importProcessingService->evaluateTransformationResultDataType($mappingConfiguration)); - } catch (InvalidConfigurationException $e) { + } catch (Exception | InvalidConfigurationException $e) { return new JsonResponse('ERROR: ' . $e->getMessage()); } } @@ -432,20 +439,21 @@ public function calculateTransformationResultTypeAction( * * @return JsonResponse * - * @throws \Exception + * @throws Exception */ public function loadDataObjectAttributesAction(Request $request, TransformationDataTypeService $transformationDataTypeService) { - $classId = $request->get('class_id'); + $classId = $request->query->get('class_id'); if (empty($classId)) { return new JsonResponse([]); } - $loadAdvancedRelations = boolval($request->get('load_advanced_relations', false)); - - $includeSystemRead = boolval($request->get('system_read', false)); - $includeSystemWrite = boolval($request->get('system_write', false)); - - $transformationTargetType = $request->get('transformation_result_type', [TransformationDataTypeService::DEFAULT_TYPE, TransformationDataTypeService::NUMERIC]); + $loadAdvancedRelations = $request->query->getBoolean('load_advanced_relations'); + $includeSystemRead = $request->query->getBoolean('system_read'); + $includeSystemWrite = $request->query->getBoolean('system_write'); + $transformationTargetType = $request->query->get('transformation_result_type'); + if (!$transformationTargetType) { + $transformationTargetType = [TransformationDataTypeService::DEFAULT_TYPE, TransformationDataTypeService::NUMERIC]; + } return new JsonResponse([ 'attributes' => $transformationDataTypeService->getPimcoreDataTypes($classId, $transformationTargetType, $includeSystemRead, $includeSystemWrite, $loadAdvancedRelations) @@ -462,7 +470,7 @@ public function loadDataObjectAttributesAction(Request $request, TransformationD */ public function loadDataObjectClassificationStoreAttributesAction(Request $request, TransformationDataTypeService $transformationDataTypeService) { - $classId = $request->get('class_id'); + $classId = $request->query->get('class_id'); if (empty($classId)) { return new JsonResponse([]); } @@ -480,22 +488,22 @@ public function loadDataObjectClassificationStoreAttributesAction(Request $reque * * @return JsonResponse * - * @throws \Exception + * @throws Exception */ public function loadDataObjectClassificationStoreKeysAction(Request $request, ClassificationStoreDataTypeService $classificationStoreDataTypeService) { - $sortParams = QueryParams::extractSortingSettings(['sort' => $request->get('sort')]); + $sortParams = QueryParams::extractSortingSettings(['sort' => $request->query->get('sort')]); $list = $classificationStoreDataTypeService->listClassificationStoreKeyList( - strip_tags($request->get('class_id')), - strip_tags($request->get('field_name')), - strip_tags($request->get('transformation_result_type')), + strip_tags($request->query->get('class_id')), + strip_tags($request->query->get('field_name')), + strip_tags($request->query->get('transformation_result_type')), $sortParams['orderKey'] ?? 'name', $sortParams['order'] ?? 'ASC', - intval($request->get('start')), - intval($request->get('limit')), - strip_tags($request->get('searchfilter')), - strip_tags($request->get('filter')) + $request->query->getInt('start'), + $request->query->getInt('limit'), + strip_tags($request->query->get('searchfilter')), + strip_tags($request->query->get('filter')) ); $data = []; @@ -531,21 +539,23 @@ public function loadDataObjectClassificationStoreKeysAction(Request $request, Cl * * @return JsonResponse * - * @throws \Exception + * @throws Exception */ public function loadDataObjectClassificationStoreKeyNameAction(Request $request) { - $keyId = $request->get('key_id'); + $keyId = $request->query->get('key_id'); $keyParts = explode('-', $keyId); - if (count($keyParts) == 2) { + if (count($keyParts) === 2) { $keyGroupRelation = DataObject\Classificationstore\KeyGroupRelation::getByGroupAndKeyId((int)$keyParts[0], (int)$keyParts[1]); - $group = DataObject\Classificationstore\GroupConfig::getById($keyGroupRelation->getGroupId()); - - if ($keyGroupRelation && $group) { - return new JsonResponse([ - 'groupName' => $group->getName(), - 'keyName' => $keyGroupRelation->getName() - ]); + if ($keyGroupRelation) { + $group = DataObject\Classificationstore\GroupConfig::getById($keyGroupRelation->getGroupId()); + + if ($group) { + return new JsonResponse([ + 'groupName' => $group->getName(), + 'keyName' => $keyGroupRelation->getName() + ]); + } } } @@ -564,7 +574,7 @@ public function loadDataObjectClassificationStoreKeyNameAction(Request $request) */ public function startBatchImportAction(Request $request, ImportPreparationService $importPreparationService) { - $configName = $request->get('config_name'); + $configName = $request->request->get('config_name'); $success = $importPreparationService->prepareImport($configName, true); return new JsonResponse([ @@ -582,7 +592,7 @@ public function startBatchImportAction(Request $request, ImportPreparationServic */ public function checkImportProgressAction(Request $request, ImportProcessingService $importProcessingService) { - $configName = $request->get('config_name'); + $configName = $request->query->get('config_name'); return new JsonResponse($importProcessingService->getImportStatus($configName)); } @@ -598,11 +608,11 @@ public function isCronExpressionValidAction(Request $request) { $message = ''; $success = true; - $cronExpression = $request->get('cron_expression'); + $cronExpression = $request->query->get('cron_expression'); if (!empty($cronExpression)) { try { new CronExpression($cronExpression); - } catch (\Exception $e) { + } catch (Exception $e) { $success = false; $message = $e->getMessage(); } @@ -624,7 +634,7 @@ public function isCronExpressionValidAction(Request $request) */ public function cancelExecutionAction(Request $request, ImportProcessingService $importProcessingService) { - $configName = $request->get('config_name'); + $configName = $request->request->get('config_name'); $importProcessingService->cancelImportAndCleanupQueue($configName); return new JsonResponse([ @@ -649,16 +659,16 @@ public function uploadImportFileAction(Request $request, FilesystemOperator $pim $filename = $_FILES['Filedata']['name']; $sourcePath = $_FILES['Filedata']['tmp_name']; } else { - throw new \Exception('The filename of the upload data is empty'); + throw new Exception('The filename of the upload data is empty'); } - $target = $this->getImportFilePath($request->get('config_name')); + $target = $this->getImportFilePath($request->query->get('config_name')); $pimcoreDataImporterUploadStorage->write($target, file_get_contents($sourcePath)); @unlink($sourcePath); return new JsonResponse(['success' => true]); - } catch (\Exception $e) { + } catch (Exception $e) { Logger::error($e); return $this->jsonResponse([ @@ -673,13 +683,13 @@ public function uploadImportFileAction(Request $request, FilesystemOperator $pim * * @return string * - * @throws \Exception + * @throws Exception */ protected function getImportFilePath(string $configName): string { $configuration = Dao::getByName($configName); if (!$configuration) { - throw new \Exception('Configuration ' . $configName . ' does not exist.'); + throw new Exception('Configuration ' . $configName . ' does not exist.'); } $filePath = $configuration->getName() . '/upload.import'; @@ -699,14 +709,14 @@ protected function getImportFilePath(string $configName): string public function hasImportFileUploadedAction(Request $request, Translator $translator, FilesystemOperator $pimcoreDataImporterUploadStorage) { try { - $importFile = $this->getImportFilePath($request->get('config_name')); + $importFile = $this->getImportFilePath($request->query->get('config_name')); if ($pimcoreDataImporterUploadStorage->fileExists($importFile)) { return new JsonResponse(['success' => true, 'filePath' => $importFile, 'message' => $translator->trans('plugin_pimcore_datahub_data_importer_configpanel_type_upload_exists', [], 'admin')]); } return new JsonResponse(['success' => false, 'message' => $translator->trans('plugin_pimcore_datahub_data_importer_configpanel_type_upload_not_exists', [], 'admin')]); - } catch (\Exception $e) { + } catch (Exception $e) { Logger::error($e); return $this->jsonResponse([ diff --git a/src/Controller/PushImportController.php b/src/Controller/PushImportController.php index 163373a1..7a3e5124 100644 --- a/src/Controller/PushImportController.php +++ b/src/Controller/PushImportController.php @@ -52,20 +52,23 @@ protected function validateAuthorization(Request $request, PushLoader $loader) * * @return JsonResponse */ - public function pushAction(Request $request, ConfigurationPreparationService $configurationLoaderService, DataLoaderFactory $dataLoaderFactory, ImportPreparationService $importPreparationService) - { + public function pushAction( + string $config, + Request $request, + ConfigurationPreparationService $configurationLoaderService, + DataLoaderFactory $dataLoaderFactory, + ImportPreparationService $importPreparationService + ) { try { - $configName = $request->get('config'); - $config = $configurationLoaderService->prepareConfiguration($configName, null, true); - - $loader = $dataLoaderFactory->loadDataLoader($config['loaderConfig']); + $configuration = $configurationLoaderService->prepareConfiguration($config, null, true); + $loader = $dataLoaderFactory->loadDataLoader($configuration['loaderConfig']); if (!$loader instanceof PushLoader) { return new JsonResponse(['success' => false, 'message' => 'Endpoint not has no Push data source configured.'], 405); } $this->validateAuthorization($request, $loader); - $success = $importPreparationService->prepareImport($configName, false, $loader->isIgnoreNotEmptyQueue()); + $success = $importPreparationService->prepareImport($config, false, $loader->isIgnoreNotEmptyQueue()); if ($success) { return new JsonResponse(['success' => $success]);