From 17f1d0e96deadc1e417bfd5e81e0102136ff8097 Mon Sep 17 00:00:00 2001 From: Albert Santoni <albert.santoni@sourcefabric.org> Date: Wed, 18 Feb 2015 16:29:08 -0500 Subject: [PATCH] Simplify the metadata sanitization and bugfix it * SAAS-376 and CC-5868 --- .../application/common/FileDataHelper.php | 18 +++++++++------- .../controllers/LibraryController.php | 21 ++++--------------- .../rest/controllers/MediaController.php | 10 +++------ 3 files changed, 17 insertions(+), 32 deletions(-) diff --git a/airtime_mvc/application/common/FileDataHelper.php b/airtime_mvc/application/common/FileDataHelper.php index 4f8738b05..fc93c64fe 100644 --- a/airtime_mvc/application/common/FileDataHelper.php +++ b/airtime_mvc/application/common/FileDataHelper.php @@ -1,9 +1,4 @@ <?php -/** - * Created by PhpStorm. - * User: sourcefabric - * Date: 17/02/15 - */ class FileDataHelper { @@ -12,9 +7,16 @@ class FileDataHelper { * at all costs, so check the data and sanitize it if necessary * @param array $data array containing new file metadata */ - public static function sanitizeData(&$data) { - // If the track number isn't numeric, this will return 0 - $data["track_number"] = intval($data["track_number"]); + public static function sanitizeData(&$data) + { + if (array_key_exists("track_number", $data)) { + // If the track number isn't numeric, this will return 0 + $data["track_number"] = intval($data["track_number"]); + } + if (array_key_exists("year", $data)) { + // If the track number isn't numeric, this will return 0 + $data["year"] = intval($data["year"]); + } } } \ No newline at end of file diff --git a/airtime_mvc/application/controllers/LibraryController.php b/airtime_mvc/application/controllers/LibraryController.php index 01c29dde8..52103175b 100644 --- a/airtime_mvc/application/controllers/LibraryController.php +++ b/airtime_mvc/application/controllers/LibraryController.php @@ -443,24 +443,11 @@ class LibraryController extends Zend_Controller_Action $serialized[$j["name"]] = $j["value"]; } + // Sanitize any wildly incorrect metadata before it goes to be validated. + FileDataHelper::sanitizeData($serialized); + if ($form->isValid($serialized)) { - // Sanitize any incorrect metadata that slipped past validation - FileDataHelper::sanitizeData($serialized["track_number"]); - - $formValues = $this->_getParam('data', null); - $formdata = array(); - foreach ($formValues as $val) { - $formdata[$val["name"]] = $val["value"]; - } - $file->setDbColMetadata($formdata); - - $data = $file->getMetadata(); - - // set MDATA_KEY_FILEPATH - $data['MDATA_KEY_FILEPATH'] = $file->getFilePath(); - Logging::info($data['MDATA_KEY_FILEPATH']); - Application_Model_RabbitMq::SendMessageToMediaMonitor("md_update", $data); - + $file->setDbColMetadata($serialized); $this->_redirect('Library'); } } diff --git a/airtime_mvc/application/modules/rest/controllers/MediaController.php b/airtime_mvc/application/modules/rest/controllers/MediaController.php index 74fc4c346..90587d480 100644 --- a/airtime_mvc/application/modules/rest/controllers/MediaController.php +++ b/airtime_mvc/application/modules/rest/controllers/MediaController.php @@ -113,9 +113,6 @@ class Rest_MediaController extends Zend_Rest_Controller $file->save(); return; } else { - // Sanitize any incorrect metadata that slipped past validation - FileDataHelper::sanitizeData($whiteList["track_number"]); - /* If full_path is set, the post request came from ftp. * Users are allowed to upload folders via ftp. If this is the case * we need to include the folder name with the file name, otherwise @@ -168,8 +165,6 @@ class Rest_MediaController extends Zend_Rest_Controller $file->save(); return; } else if ($file && isset($requestData["resource_id"])) { - // Sanitize any incorrect metadata that slipped past validation - FileDataHelper::sanitizeData($whiteList["track_number"]); $file->fromArray($whiteList, BasePeer::TYPE_FIELDNAME); @@ -199,8 +194,6 @@ class Rest_MediaController extends Zend_Rest_Controller ->setHttpResponseCode(200) ->appendBody(json_encode(CcFiles::sanitizeResponse($file))); } else if ($file) { - // Sanitize any incorrect metadata that slipped past validation - $this->sanitizeData($file, $whiteList); $file->fromArray($whiteList, BasePeer::TYPE_FIELDNAME); @@ -294,6 +287,9 @@ class Rest_MediaController extends Zend_Rest_Controller private function validateRequestData($file, &$whiteList) { + // Sanitize any wildly incorrect metadata before it goes to be validated + FileDataHelper::sanitizeData($whiteList); + try { // EditAudioMD form is used here for validation $fileForm = new Application_Form_EditAudioMD();