Exemplo n.º 1
0
 /**
  * Will forward to the regular swf player according to the widget_id 
  */
 public function execute()
 {
     requestUtils::handleConditionalGet();
     $file_sync_id = $this->getRequestParameter("id");
     $hash = $this->getRequestParameter("hash");
     $file_name = $this->getRequestParameter("fileName");
     if ($file_name) {
         $file_name = base64_decode($file_name);
     }
     $file_sync = FileSyncPeer::retrieveByPk($file_sync_id);
     if (!$file_sync) {
         $current_dc_id = kDataCenterMgr::getCurrentDcId();
         $error = "DC[{$current_dc_id}]: Cannot find FileSync with id [{$file_sync_id}]";
         KalturaLog::err($error);
         KExternalErrors::dieError(KExternalErrors::FILE_NOT_FOUND);
     }
     KalturaMonitorClient::initApiMonitor(false, 'extwidget.serveFile', $file_sync->getPartnerId());
     kDataCenterMgr::serveFileToRemoteDataCenter($file_sync, $hash, $file_name);
     die;
 }
 public static function serveFileToRemoteDataCenter($file_sync_id, $file_hash, $file_name)
 {
     KalturaLog::log("File sync id [{$file_sync_id}], file_hash [{$file_hash}], file_name [{$file_name}]");
     // TODO - verify security
     $current_dc = self::getCurrentDc();
     $current_dc_id = $current_dc["id"];
     // retrieve the object
     $file_sync = FileSyncPeer::retrieveByPk($file_sync_id);
     if (!$file_sync) {
         $error = "DC[{$current_dc_id}]: Cannot find FileSync with id [{$file_sync_id}]";
         KalturaLog::err($error);
         throw new Exception($error);
     }
     if ($file_sync->getDc() != $current_dc_id) {
         $error = "DC[{$current_dc_id}]: FileSync with id [{$file_sync_id}] does not belong to this DC";
         KalturaLog::err($error);
         throw new Exception($error);
     }
     // resolve if file_sync is link
     $file_sync_resolved = $file_sync;
     if ($file_sync->getFileType() == FileSync::FILE_SYNC_FILE_TYPE_LINK) {
         $file_sync_resolved = kFileSyncUtils::resolve($file_sync);
     }
     // check if file sync path leads to a file or a directory
     $resolvedPath = $file_sync_resolved->getFullPath();
     $fileSyncIsDir = is_dir($resolvedPath);
     if ($fileSyncIsDir && $file_name) {
         $resolvedPath .= '/' . $file_name;
     }
     if (!file_exists($resolvedPath)) {
         $file_name_msg = $file_name ? "file name [{$file_name}] " : '';
         $error = "DC[{$current_dc_id}]: Path for fileSync id [{$file_sync_id}] " . $file_name_msg . "does not exist";
         KalturaLog::err($error);
         throw new Exception($error);
     }
     // validate the hash
     $expected_file_hash = md5($current_dc["secret"] . $file_sync_id);
     // will be verified on the other side to make sure not some attack or external invalid request
     if ($file_hash != $expected_file_hash) {
         $error = "DC[{$current_dc_id}]: FileSync with id [{$file_sync_id}] - invalid hash";
         KalturaLog::err($error);
         throw new Exception($error);
     }
     if ($fileSyncIsDir && is_dir($resolvedPath)) {
         KalturaLog::log("Serving directory content from [" . $resolvedPath . "]");
         $contents = kFile::listDir($resolvedPath);
         sort($contents, SORT_STRING);
         $contents = serialize($contents);
         header("file-sync-type: dir");
         echo $contents;
         die;
     } else {
         KalturaLog::log("Serving file from [" . $resolvedPath . "]");
         kFile::dumpFile($resolvedPath);
     }
 }