From 2c02533f20f8dc903b6809f3f1be0160b40c7db8 Mon Sep 17 00:00:00 2001 From: Laurent Giovannoni <laurent.giovannoni@maarch.org> Date: Tue, 23 Oct 2018 19:08:32 +0200 Subject: [PATCH] FEAT # 8375 --- .../class_content_manager_tools_Abstract.php | 13 +++++-- rest/index.php | 35 +++++++++++-------- .../controllers/JnlpController.php | 9 ++--- 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/modules/content_management/class/class_content_manager_tools_Abstract.php b/modules/content_management/class/class_content_manager_tools_Abstract.php index 0c9a44c111e..f7ad3ab383a 100755 --- a/modules/content_management/class/class_content_manager_tools_Abstract.php +++ b/modules/content_management/class/class_content_manager_tools_Abstract.php @@ -443,10 +443,19 @@ abstract class content_management_tools_Abstract $jnlp_attribute1 = $docXML->createAttribute('spec'); $jnlp_attribute1->value = '6.0+'; $jnlp_balise->appendChild($jnlp_attribute1); + + $pathUrl = trim($_SESSION['config']['coreurl'], '/'); + $jnlp_attribute2 = $docXML->createAttribute('codebase'); - $jnlp_attribute2->value = $_SESSION['config']['tmppath']; + $jnlp_attribute2->value = $pathUrl . '/rest/jnlpDownload/'; $jnlp_balise->appendChild($jnlp_attribute2); + $jnlp_attribute3 = $docXML->createAttribute('href'); + $jnlp_attribute3->value = $jnlp_name; + $jnlp_balise->appendChild($jnlp_attribute3); + + //"{$pathUrl}/rest/jnlp?fileName={$jnlp_name}"; + $info_balise=$docXML->createElement("information"); $title_balise=$docXML->createElement("title","Editeur de modèle de document"); @@ -626,7 +635,7 @@ abstract class content_management_tools_Abstract $_SESSION['cm_applet'][$_SESSION['user']['UserId']][$uid_applet_name]=$uid_applet_name.'.lck'; $pathUrl = trim($_SESSION['config']['coreurl'], '/'); - $file = "{$pathUrl}/rest/jnlp?fileName={$jnlp_name}"; + $file = "{$pathUrl}/rest/jnlpDownload/{$jnlp_name}"; //echo '<a id="jnlp_file" href="'.$file.'" onclick="window.location.href=\''.$file.'\';self.close();"></a>'; echo '<script>window.location.href=\''.$file.'\';if($(\'CMApplet\')) {destroyModal(\'CMApplet\');};if($(\'CMApplet\')) {destroyModal(\'CMApplet\');};</script>'; diff --git a/rest/index.php b/rest/index.php index 0e7f357a31d..f29ef20cfc7 100755 --- a/rest/index.php +++ b/rest/index.php @@ -28,28 +28,34 @@ require_once("src/core/lang/lang-{$language}.php"); $app = new \Slim\App(['settings' => ['displayErrorDetails' => true, 'determineRouteBeforeAppMiddleware' => true]]); +//route without auth +$app->get('/jnlpDownload/{jnlpUniqueId}', \ContentManagement\controllers\JnlpController::class . ':donwloadJnlp'); + //Authentication $app->add(function (\Slim\Http\Request $request, \Slim\Http\Response $response, callable $next) { - $userId = \SrcCore\controllers\AuthenticationController::authentication(); - - if (!empty($userId)) { - $GLOBALS['userId'] = $userId; - $route = $request->getAttribute('route'); - if (!empty($route)) { - $currentRoute = $route->getPattern(); - $r = \SrcCore\controllers\AuthenticationController::isRouteAvailable(['userId' => $userId, 'currentRoute' => $currentRoute]); - if (!$r['isRouteAvailable']) { - return $response->withStatus(405)->withJson(['errors' => $r['errors']]); + $route = $request->getAttribute('route'); + if ($route->getPattern() <> '/jnlpDownload/{jnlpUniqueId}') { + $userId = \SrcCore\controllers\AuthenticationController::authentication(); + if (!empty($userId)) { + $GLOBALS['userId'] = $userId; + if (!empty($route)) { + $currentRoute = $route->getPattern(); + $r = \SrcCore\controllers\AuthenticationController::isRouteAvailable(['userId' => $userId, 'currentRoute' => $currentRoute]); + if (!$r['isRouteAvailable']) { + return $response->withStatus(405)->withJson(['errors' => $r['errors']]); + } } + $response = $next($request, $response); + return $response; + } else { + return $response->withStatus(401)->withJson(['errors' => 'Authentication Failed']); } + } else { $response = $next($request, $response); return $response; - } else { - return $response->withStatus(401)->withJson(['errors' => 'Authentication Failed']); } }); - //Initialize $app->get('/initialize', \SrcCore\controllers\CoreController::class . ':initialize'); @@ -171,7 +177,8 @@ $app->get('/home/lastRessources', \Home\controllers\HomeController::class . ':ge //Jnlp $app->post('/jnlp', \ContentManagement\controllers\JnlpController::class . ':generateJnlp'); -$app->get('/jnlp', \ContentManagement\controllers\JnlpController::class . ':renderJnlp'); + +//$app->get('/jnlp/{jnlpUniqueId}', \ContentManagement\controllers\JnlpController::class . ':renderJnlp'); $app->post('/jnlp/{jnlpUniqueId}', \ContentManagement\controllers\JnlpController::class . ':processJnlp'); $app->get('/jnlp/lock/{jnlpUniqueId}', \ContentManagement\controllers\JnlpController::class . ':isLockFileExisting'); diff --git a/src/app/contentManagement/controllers/JnlpController.php b/src/app/contentManagement/controllers/JnlpController.php index 6e9992c0077..873f85c5b97 100644 --- a/src/app/contentManagement/controllers/JnlpController.php +++ b/src/app/contentManagement/controllers/JnlpController.php @@ -180,18 +180,18 @@ class JnlpController return $response->withJson(['generatedJnlp' => $jnlpFileNameExt, 'jnlpUniqueId' => $jnlpUniqueId]); } - public function renderJnlp(Request $request, Response $response) + public function donwloadJnlp(Request $request, Response $response, array $aArgs) { $data = $request->getQueryParams(); - if (explode('.', $data['fileName'])[1] != 'jnlp') { + if (explode('.', $aArgs['jnlpUniqueId'])[1] != 'jnlp') { return $response->withStatus(403)->withJson(['errors' => 'File extension forbidden']); - } elseif (strpos($data['fileName'], "{$GLOBALS['userId']}_maarchCM_") === false) { + } elseif (strpos($aArgs['jnlpUniqueId'], "{$GLOBALS['userId']}_maarchCM_") === false) { return $response->withStatus(403)->withJson(['errors' => 'File name forbidden']); } $tmpPath = CoreConfigModel::getTmpPath(); - $jnlp = file_get_contents($tmpPath . $data['fileName']); + $jnlp = file_get_contents($tmpPath . $aArgs['jnlpUniqueId']); if ($jnlp === false) { return $response->withStatus(404)->withJson(['errors' => 'Jnlp file not found on ' . $tmpPath]); } @@ -201,6 +201,7 @@ class JnlpController return $response->withHeader('Content-Type', 'application/x-java-jnlp-file'); } + public function processJnlp(Request $request, Response $response, array $aArgs) { $data = $request->getParams(); -- GitLab