From 3f3cbd17ed24fde43bebd568f98aab7d5be2430f Mon Sep 17 00:00:00 2001 From: Molkobain Date: Thu, 11 Jul 2019 17:46:32 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B02060=20[WIP]=20Initialisation=20of=20the?= =?UTF-8?q?=20portal=20application:=20Remove=20Silex=20portal=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/helpers/securityhelper.class.inc.php | 281 ------------------ ...xtmanipulatorserviceprovider.class.inc.php | 52 ---- ...yclevalidatorserviceprovider.class.inc.php | 55 ---- ...stmanipulatorserviceprovider.class.inc.php | 60 ---- ...copevalidatorserviceprovider.class.inc.php | 55 ---- .../src/routers/abstractrouter.class.inc.php | 140 --------- .../routers/browsebrickrouter.class.inc.php | 70 ----- .../routers/createbrickrouter.class.inc.php | 37 --- .../routers/managebrickrouter.class.inc.php | 77 ----- .../src/routers/objectrouter.class.inc.php | 120 -------- .../portal-silex/web/index.php | 172 ----------- 11 files changed, 1119 deletions(-) delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/helpers/securityhelper.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/providers/contextmanipulatorserviceprovider.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/providers/lifecyclevalidatorserviceprovider.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/providers/requestmanipulatorserviceprovider.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/providers/scopevalidatorserviceprovider.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/routers/abstractrouter.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/routers/browsebrickrouter.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/routers/createbrickrouter.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/routers/managebrickrouter.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/src/routers/objectrouter.class.inc.php delete mode 100644 datamodels/2.x/itop-portal-base/portal-silex/web/index.php diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/helpers/securityhelper.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/helpers/securityhelper.class.inc.php deleted file mode 100644 index a185924bfa..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/helpers/securityhelper.class.inc.php +++ /dev/null @@ -1,281 +0,0 @@ - - -namespace Combodo\iTop\Portal\Helper; - -use Silex\Application; -use UserRights; -use IssueLog; -use MetaModel; -use DBSearch; -use DBObjectSearch; -use DBObjectSet; -use FieldExpression; -use VariableExpression; -use BinaryExpression; - -/** - * SecurityHelper class - * - * Handle security checks through the different layers (portal scopes, iTop silos, user rights) - * - * @author Guillaume Lajarige - */ -class SecurityHelper -{ - public static $aAllowedScopeObjectsCache = array( - UR_ACTION_READ => array(), - UR_ACTION_MODIFY => array(), - ); - - /** - * Returns true if the current user is allowed to do the $sAction on an $sObjectClass object (with optionnal $sObjectId id) - * Checks are: - * - Has a scope query for the $sObjectClass / $sAction - * - Optionally, if $sObjectId provided: Is object within scope for $sObjectClass / $sObjectId / $sAction - * - Is allowed by datamodel for $sObjectClass / $sAction - * - * @param \Silex\Application $oApp - * @param string $sAction Must be in UR_ACTION_READ|UR_ACTION_MODIFY|UR_ACTION_CREATE - * @param string $sObjectClass - * @param string $sObjectId - * - * @return boolean - * - * @throws \CoreException - */ - public static function IsActionAllowed(Application $oApp, $sAction, $sObjectClass, $sObjectId = null) - { - $sDebugTracePrefix = __CLASS__ . ' / ' . __METHOD__ . ' : Returned false for action ' . $sAction . ' on ' . $sObjectClass . '::' . $sObjectId; - - // Checking action type - if (!in_array($sAction, array(UR_ACTION_READ, UR_ACTION_MODIFY, UR_ACTION_CREATE))) - { - if ($oApp['debug']) - { - IssueLog::Info($sDebugTracePrefix . ' as the action value could not be understood (' . UR_ACTION_READ . '/' . UR_ACTION_MODIFY . '/' . UR_ACTION_CREATE . ' expected'); - } - return false; - } - - // Checking the scopes layer - // - Transforming scope action as there is only 2 values - $sScopeAction = ($sAction === UR_ACTION_READ) ? UR_ACTION_READ : UR_ACTION_MODIFY; - // - Retrieving the query. If user has no scope, it can't access that kind of objects - $oScopeQuery = $oApp['scope_validator']->GetScopeFilterForProfiles(UserRights::ListProfiles(), $sObjectClass, $sScopeAction); - if ($oScopeQuery === null) - { - if ($oApp['debug']) - { - IssueLog::Info($sDebugTracePrefix . ' as there was no scope defined for action ' . $sScopeAction . ' and profiles ' . implode('/', UserRights::ListProfiles())); - } - return false; - } - // - If action != create we do some additionnal checks - if ($sAction !== UR_ACTION_CREATE) - { - // - Checking specific object if id is specified - if ($sObjectId !== null) - { - // Checking if object status is in cache (to avoid unnecessary query) - if(isset(static::$aAllowedScopeObjectsCache[$sScopeAction][$sObjectClass][$sObjectId]) ) - { - if(static::$aAllowedScopeObjectsCache[$sScopeAction][$sObjectClass][$sObjectId] === false) - { - if ($oApp['debug']) - { - IssueLog::Info($sDebugTracePrefix . ' as it was denied in the scope objects cache'); - } - return false; - } - } - else - { - // Modifying query to filter on the ID - // - Adding expression - $sObjectKeyAtt = MetaModel::DBGetKey($sObjectClass); - $oFieldExp = new FieldExpression($sObjectKeyAtt, $oScopeQuery->GetClassAlias()); - $oBinExp = new BinaryExpression($oFieldExp, '=', new VariableExpression('object_id')); - $oScopeQuery->AddConditionExpression($oBinExp); - // - Setting value - $aQueryParams = $oScopeQuery->GetInternalParams(); - $aQueryParams['object_id'] = $sObjectId; - $oScopeQuery->SetInternalParams($aQueryParams); - unset($aQueryParams); - - // - Checking if query result is null (which means that the user has no right to view this specific object) - $oSet = new DBObjectSet($oScopeQuery); - if ($oSet->Count() === 0) - { - // Updating cache - static::$aAllowedScopeObjectsCache[$sScopeAction][$sObjectClass][$sObjectId] = false; - - if ($oApp['debug']) - { - IssueLog::Info($sDebugTracePrefix . ' as there was no result for the following scope query : ' . $oScopeQuery->ToOQL(true)); - } - return false; - } - - // Updating cache - static::$aAllowedScopeObjectsCache[$sScopeAction][$sObjectClass][$sObjectId] = true; - } - } - } - - // Checking reading security layer. The object could be listed, check if it is actually allowed to view it - if (UserRights::IsActionAllowed($sObjectClass, $sAction) == UR_ALLOWED_NO) - { - // For security reasons, we don't want to give the user too many informations on why he cannot access the object. - //throw new SecurityException('User not allowed to view this object', array('class' => $sObjectClass, 'id' => $sObjectId)); - if ($oApp['debug']) - { - IssueLog::Info($sDebugTracePrefix . ' as the user is not allowed to access this object according to the datamodel security (cf. Console settings)'); - } - return false; - } - - return true; - } - - public static function IsStimulusAllowed(Application $oApp, $sStimulusCode, $sObjectClass, $oInstanceSet = null) - { - // Checking DataModel layer - $aStimuliFromDatamodel = Metamodel::EnumStimuli($sObjectClass); - $iActionAllowed = (get_class($aStimuliFromDatamodel[$sStimulusCode]) == 'StimulusUserAction') ? UserRights::IsStimulusAllowed($sObjectClass, $sStimulusCode, $oInstanceSet) : UR_ALLOWED_NO; - if( ($iActionAllowed === false) || ($iActionAllowed === UR_ALLOWED_NO) ) - { - return false; - } - - // Checking portal security layer - $aStimuliFromPortal = $oApp['lifecycle_validator']->GetStimuliForProfiles(UserRights::ListProfiles(), $sObjectClass); - if(!in_array($sStimulusCode, $aStimuliFromPortal)) - { - return false; - } - - return true; - } - - /** - * Preloads scope objects cache with objects from $oQuery - * - * @param \Silex\Application $oApp - * @param \DBSearch $oSearch - * @param array $aExtKeysToPreload - * - * @throws \Exception - * @throws \CoreException - */ - public static function PreloadForCache(Application $oApp, DBSearch $oSearch, $aExtKeysToPreload = null) - { - $sObjectClass = $oSearch->GetClass(); - $aObjectIds = array(); - $aExtKeysIds = array(); - $aColumnsToLoad = array(); - - if($aExtKeysToPreload !== null) - { - foreach($aExtKeysToPreload as $sAttCode) - { - /** @var \AttributeDefinition $oAttDef */ - $oAttDef = MetaModel::GetAttributeDef($sObjectClass, $sAttCode); - if($oAttDef->IsExternalKey()) - { - $aExtKeysIds[$oAttDef->GetTargetClass()] = array(); - $aColumnsToLoad[] = $sAttCode; - } - } - } - - // Retrieving IDs of all objects - // Note: We have to clone $oSet otherwise the source object will be modified - $oSet = new DBObjectSet($oSearch); - $oSet->OptimizeColumnLoad(array($oSearch->GetClassAlias() => $aColumnsToLoad)); - while($oCurrentRow = $oSet->Fetch()) - { - // Note: By presetting value to false, it is quicker to find which objects where not returned by the scope query later - $aObjectIds[$oCurrentRow->GetKey()] = false; - - // Preparing ExtKeys to preload - foreach($aColumnsToLoad as $sAttCode) - { - $iExtKey = $oCurrentRow->Get($sAttCode); - if($iExtKey > 0) - { - /** @var \AttributeExternalKey $oAttDef */ - $oAttDef = MetaModel::GetAttributeDef($sObjectClass, $sAttCode); - if(!in_array($iExtKey, $aExtKeysIds[$oAttDef->GetTargetClass()])) - { - $aExtKeysIds[$oAttDef->GetTargetClass()][] = $iExtKey; - } - } - } - } - - foreach(array(UR_ACTION_READ, UR_ACTION_MODIFY) as $sScopeAction) - { - // Retrieving scope query - /** @var DBSearch $oScopeQuery */ - $oScopeQuery = $oApp['scope_validator']->GetScopeFilterForProfiles(UserRights::ListProfiles(), $sObjectClass, $sScopeAction); - if($oScopeQuery !== null) - { - // Restricting scope if specified - if(!empty($aObjectIds)) - { - $oScopeQuery->AddCondition('id', array_keys($aObjectIds), 'IN'); - } - - // Preparing object set - $oScopeSet = new DBObjectSet($oScopeQuery); - $oScopeSet->OptimizeColumnLoad(array()); - - // Checking objects status - $aScopeObjectIds = $aObjectIds; - while($oCurrentRow = $oScopeSet->Fetch()) - { - $aScopeObjectIds[$oCurrentRow->GetKey()] = true; - } - - // Updating cache - if(!isset(static::$aAllowedScopeObjectsCache[$sScopeAction][$sObjectClass])) - { - static::$aAllowedScopeObjectsCache[$sScopeAction][$sObjectClass] = $aScopeObjectIds; - } - else - { - static::$aAllowedScopeObjectsCache[$sScopeAction][$sObjectClass] = array_merge_recursive(static::$aAllowedScopeObjectsCache[$sScopeAction][$sObjectClass], $aScopeObjectIds); - } - } - } - - // Preloading ExtKeys - foreach($aExtKeysIds as $sTargetClass => $aTargetIds) - { - if(!empty($aTargetIds)) - { - $oTargetSearch = new DBObjectSearch($sTargetClass); - $oTargetSearch->AddCondition('id', $aTargetIds, 'IN'); - - static::PreloadForCache($oApp, $oTargetSearch); - } - } - } -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/providers/contextmanipulatorserviceprovider.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/providers/contextmanipulatorserviceprovider.class.inc.php deleted file mode 100644 index 5d780163b7..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/providers/contextmanipulatorserviceprovider.class.inc.php +++ /dev/null @@ -1,52 +0,0 @@ - - -namespace Combodo\iTop\Portal\Provider; - -use Pimple\Container; -use Pimple\ServiceProviderInterface; -use Combodo\iTop\Portal\Helper\ContextManipulatorHelper; - -/** - * ContextManipulatorHelper service provider - * - * @author Guillaume Lajarige - */ -class ContextManipulatorServiceProvider implements ServiceProviderInterface -{ - - public function register(Container $oApp) - { - $oApp['context_manipulator'] = function ($oApp) - { - $oApp->flush(); - - $oContextManipulatorHelper = new ContextManipulatorHelper(); - $oContextManipulatorHelper->SetApp($oApp); - - return $oContextManipulatorHelper; - }; - } - - public function boot(Container $oApp) - { - - } - -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/providers/lifecyclevalidatorserviceprovider.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/providers/lifecyclevalidatorserviceprovider.class.inc.php deleted file mode 100644 index e4ddbaab8c..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/providers/lifecyclevalidatorserviceprovider.class.inc.php +++ /dev/null @@ -1,55 +0,0 @@ - - -namespace Combodo\iTop\Portal\Provider; - -use Pimple\Container; -use Pimple\ServiceProviderInterface; -use Combodo\iTop\Portal\Helper\LifecycleValidatorHelper; - -/** - * LifecycleValidatorHelper service provider - * - * @author Guillaume Lajarige - */ -class LifecycleValidatorServiceProvider implements ServiceProviderInterface -{ - - public function register(Container $oApp) - { - $oApp['lifecycle_validator'] = function ($oApp) - { - $oApp->flush(); - - $oLifecycleValidatorHelper = new LifecycleValidatorHelper($oApp['lifecycle_validator.lifecycle_filename'], $oApp['lifecycle_validator.lifecycle_path']); - if (isset($oApp['lifecycle_validator.instance_name'])) - { - $oLifecycleValidatorHelper->SetInstancePrefix($oApp['lifecycle_validator.instance_name'] . '-'); - } - - return $oLifecycleValidatorHelper; - }; - } - - public function boot(Container $oApp) - { - - } - -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/providers/requestmanipulatorserviceprovider.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/providers/requestmanipulatorserviceprovider.class.inc.php deleted file mode 100644 index cfbd1982f7..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/providers/requestmanipulatorserviceprovider.class.inc.php +++ /dev/null @@ -1,60 +0,0 @@ - - */ - -namespace Combodo\iTop\Portal\Provider; - -use Pimple\Container; -use Pimple\ServiceProviderInterface; -use Combodo\iTop\Portal\Helper\RequestManipulatorHelper; - -/** - * RequestManipulatorHelper service provider - * - * @author Guillaume Lajarige - * @since 2.5.1 - */ -class RequestManipulatorServiceProvider implements ServiceProviderInterface -{ - - /** - * @param \Pimple\Container $oApp - */ - public function register(Container $oApp) - { - $oApp['request_manipulator'] = function ($oApp) - { - $oApp->flush(); - - $oRequestManipulatorHelper = new RequestManipulatorHelper($oApp['request_stack']); - - return $oRequestManipulatorHelper; - }; - } - - /** - * @param \Pimple\Container $oApp - */ - public function boot(Container $oApp) - { - - } - -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/providers/scopevalidatorserviceprovider.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/providers/scopevalidatorserviceprovider.class.inc.php deleted file mode 100644 index bd406ad493..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/providers/scopevalidatorserviceprovider.class.inc.php +++ /dev/null @@ -1,55 +0,0 @@ - - -namespace Combodo\iTop\Portal\Provider; - -use Pimple\Container; -use Pimple\ServiceProviderInterface; -use Combodo\iTop\Portal\Helper\ScopeValidatorHelper; - -/** - * ScopeValidatorHelper service provider - * - * @author Guillaume Lajarige - */ -class ScopeValidatorServiceProvider implements ServiceProviderInterface -{ - - public function register(Container $oApp) - { - $oApp['scope_validator'] = function ($oApp) - { - $oApp->flush(); - - $oScopeValidatorHelper = new ScopeValidatorHelper($oApp['scope_validator.scopes_filename'], $oApp['scope_validator.scopes_path']); - if (isset($oApp['scope_validator.instance_name'])) - { - $oScopeValidatorHelper->SetInstancePrefix($oApp['scope_validator.instance_name'] . '-'); - } - - return $oScopeValidatorHelper; - }; - } - - public function boot(Container $oApp) - { - - } - -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/abstractrouter.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/routers/abstractrouter.class.inc.php deleted file mode 100644 index 0b44150d8b..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/abstractrouter.class.inc.php +++ /dev/null @@ -1,140 +0,0 @@ - - -namespace Combodo\iTop\Portal\Router; - -use Silex\Application; - -/** - * AbstractRouter class is where URLs are defined with their callback, parameters and constraints (assertions). - * It allows us to have URL pattern at one place only and to generate them anywhere in the code, avoiding to maintain URLs in multiple places. - * - * @package \Combodo\iTop\Portal\Router - * @author Guillaume Lajarige - * @since 2.3.0 - */ -abstract class AbstractRouter -{ - /** - * List of routes for that Router. - * - * Each route is defined as an associative array and can have the following parameters : - * - pattern : URL pattern with its parameters names (eg: '/{sBrickId}/browse/{sBrowseMode}') - * - hash : String to append to the URL with an '#' (eg: 'modal-popup' will append '#modal-popup' to the above URL) - * - callback : Function to be called for that route, usally in a Controller. (eg: 'Combodo\\iTop\\Portal\\Controller\\CreateBrickController::DisplayAction') - * - bind : Unique name of the route, must not contain blanks. Usually lowercase with underscore (eg: 'p_browse_brick') - * - asserts : Associative array of assertions to check for the pattern parameters (eg: array( 'sBrowseMode' => 'list|tree')) - * - values : Associative array of default values for the pattern parameters (eg: array('sBrowseMode' => 'tree')) - * - * @var array - */ - static $aRoutes = array(); - - /** - * Returns routes of the current AbstractRouter defined in $aRoutes. - * - * @return array - */ - static function GetRoutes() - { - return static::$aRoutes; - } - - /** - * Returns the route named $name of the current AbstractRouter. - * Throws an exception if not found. - * - * @param string $name - * - * @return array - * - * @throws \Exception - */ - static function GetRoute($name) - { - $bFound = false; - $aFoundRoute = array(); - - foreach (static::$aRoutes as $aRoute) - { - if (isset($aRoute['bind']) && $aRoute['bind'] === $name) - { - $bFound = true; - $aFoundRoute = $aRoute; - break; - } - } - - if (!$bFound) - { - throw new \Exception('Unknown route "' . $name . '" for ' . get_class() . ''); - } - - return $aFoundRoute; - } - - /** - * Registers all routes of the current AbstractRouter to the Application $oApp. - * - * @param Application $oApp - * @return int Number of succesfully registered routes - * @throws \Exception - */ - static function RegisterAllRoutes(Application $oApp) - { - $iCounter = 0; - - foreach (static::$aRoutes as $aRoute) - { - // Check if we have the base parameters to register the route - if (!isset($aRoute['pattern']) || !isset($aRoute['callback'])) - { - throw new \Exception('Unable to register routes from ' . get_class() . ', some parameters are missing.'); - } - - // Registering base route - $controller = $oApp->match($aRoute['pattern'], $aRoute['callback']); - - // Checking if route has optionnal parameters - if (isset($aRoute['bind'])) - { - $controller->bind($aRoute['bind']); - } - if (isset($aRoute['asserts'])) - { - foreach ($aRoute['asserts'] as $sKey => $sValue) - { - $controller->assert($sKey, $sValue); - } - } - if (isset($aRoute['values'])) - { - foreach ($aRoute['values'] as $sKey => $sValue) - { - $controller->value($sKey, $sValue); - } - } - - $iCounter++; - } - - return $iCounter; - } - -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/browsebrickrouter.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/routers/browsebrickrouter.class.inc.php deleted file mode 100644 index f96a99c81c..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/browsebrickrouter.class.inc.php +++ /dev/null @@ -1,70 +0,0 @@ - - -namespace Combodo\iTop\Portal\Router; - -/** - * Class BrowseBrickRouter - * - * @package Combodo\iTop\Portal\Router - * @author Guillaume Lajarige - * @since 2.3.0 - */ -class BrowseBrickRouter extends AbstractRouter -{ - static $aRoutes = array( - // We don't set asserts for sBrowseMode on that route, as it the generic one, it can be extended by another brick. - array('pattern' => '/browse/{sBrickId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController::DisplayAction', - 'bind' => 'p_browse_brick' - ), - array('pattern' => '/browse/{sBrickId}/{sBrowseMode}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController::DisplayAction', - 'bind' => 'p_browse_brick_mode' - ), - array('pattern' => '/browse/{sBrickId}/list/page/{iPageNumber}/show/{iListLength}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController::DisplayAction', - 'bind' => 'p_browse_brick_mode_list', - 'asserts' => array( - 'sBrowseMode' => 'list', - 'iPageNumber' => '\d+', - 'iListLength' => '\d+' - ), - 'values' => array( - 'sBrowseMode' => 'list', - 'sDataLoading' => 'lazy', - 'iPageNumber' => '1', - 'iListLength' => '20' - ) - ), - array('pattern' => '/browse/{sBrickId}/tree/expand/{sLevelAlias}/{sNodeId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController::DisplayAction', - 'bind' => 'p_browse_brick_mode_tree', - 'asserts' => array( - 'sBrowseMode' => 'tree' - ), - 'values' => array( - 'sBrowseMode' => 'tree', - 'sDataLoading' => 'lazy', - 'sNodeId' => null - ) - ), - ); - -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/createbrickrouter.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/routers/createbrickrouter.class.inc.php deleted file mode 100644 index 56a38a26bd..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/createbrickrouter.class.inc.php +++ /dev/null @@ -1,37 +0,0 @@ - - -namespace Combodo\iTop\Portal\Router; - -/** - * Class CreateBrickRouter - * - * @package Combodo\iTop\Portal\Router - * @author Guillaume Lajarige - * @since 2.3.0 - */ -class CreateBrickRouter extends AbstractRouter -{ - static $aRoutes = array( - array('pattern' => '/create/{sBrickId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\CreateBrickController::DisplayAction', - 'bind' => 'p_create_brick') - ); - -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/managebrickrouter.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/routers/managebrickrouter.class.inc.php deleted file mode 100644 index 1a7e193577..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/managebrickrouter.class.inc.php +++ /dev/null @@ -1,77 +0,0 @@ - - -namespace Combodo\iTop\Portal\Router; - -/** - * Class ManageBrickRouter - * - * @package Combodo\iTop\Portal\Router - * @author Guillaume Lajarige - * @author Pierre Goiffon - * @author Eric Espie - * @since 2.3.0 - */ -class ManageBrickRouter extends AbstractRouter -{ - static $aRoutes = array( - array( - 'pattern' => '/manage/{sBrickId}/{sGroupingTab}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ManageBrickController::DisplayAction', - 'bind' => 'p_manage_brick', - 'asserts' => array(), - 'values' => array( - 'sGroupingTab' => null, - ) - ), - array( - 'pattern' => '/manage/{sBrickId}/display-as/{sDisplayMode}/{sGroupingTab}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ManageBrickController::DisplayAction', - 'bind' => 'p_manage_brick_display_as', - 'asserts' => array( - 'sDisplayMode' => 'list|pie-chart|bar-chart' - ), - 'values' => array( - 'sGroupingTab' => null, - ) - ), - array( - 'pattern' => '/manage/{sBrickId}/{sGroupingTab}/{sGroupingArea}/page/{iPageNumber}/show/{iListLength}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ManageBrickController::DisplayAction', - 'bind' => 'p_manage_brick_lazy', - 'asserts' => array( - 'iPageNumber' => '\d+', - 'iListLength' => '\d+', - ), - 'values' => array( - 'sDataLoading' => 'lazy', - 'iPageNumber' => '1', - 'iListLength' => '20', - ) - ), - array( - 'pattern' => '/manage/export/excel/start/{sBrickId}/{sGroupingTab}/{sGroupingArea}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ManageBrickController::ExcelExportStartAction', - 'bind' => 'p_manage_brick_excel_export_start', - 'asserts' => array(), - 'values' => array(), - ), - ); - -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/objectrouter.class.inc.php b/datamodels/2.x/itop-portal-base/portal-silex/src/routers/objectrouter.class.inc.php deleted file mode 100644 index f3983170e5..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/src/routers/objectrouter.class.inc.php +++ /dev/null @@ -1,120 +0,0 @@ - - -namespace Combodo\iTop\Portal\Router; - -/** - * Class ObjectRouter - * - * @package Combodo\iTop\Portal\Router - * @author Guillaume Lajarige - * @since 2.3.0 - */ -class ObjectRouter extends AbstractRouter -{ - static $aRoutes = array( - array('pattern' => '/object/create/{sObjectClass}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::CreateAction', - 'bind' => 'p_object_create' - ), - array('pattern' => '/object/create-from-factory/{sObjectClass}/{sObjectId}/{sEncodedMethodName}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::CreateFromFactoryAction', - 'bind' => 'p_object_create_from_factory' - ), - array('pattern' => '/object/edit/{sObjectClass}/{sObjectId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::EditAction', - 'bind' => 'p_object_edit' - ), - array('pattern' => '/object/view/{sObjectClass}/{sObjectId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::ViewAction', - 'bind' => 'p_object_view' - ), - array('pattern' => '/object/apply-stimulus/{sStimulusCode}/{sObjectClass}/{sObjectId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::ApplyStimulusAction', - 'bind' => 'p_object_apply_stimulus' - ), - array('pattern' => '/object/search', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::SearchRegularAction', - 'bind' => 'p_object_search_regular' - ), - array('pattern' => '/object/search/from-attribute/{sTargetAttCode}/{sHostObjectClass}/{sHostObjectId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::SearchFromAttributeAction', - 'bind' => 'p_object_search_from_attribute', - 'values' => array( - 'sHostObjectClass' => null, - 'sHostObjectId' => null - ) - ), - array('pattern' => '/object/search/autocomplete/{sTargetAttCode}/{sHostObjectClass}/{sHostObjectId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::SearchAutocompleteAction', - 'bind' => 'p_object_search_autocomplete', - 'values' => array( - 'sHostObjectClass' => null, - 'sHostObjectId' => null - ) - ), - array('pattern' => '/object/search/hierarchy/{sTargetAttCode}/{sHostObjectClass}/{sHostObjectId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::SearchHierarchyAction', - 'bind' => 'p_object_search_hierarchy', - 'values' => array( - 'sHostObjectClass' => null, - 'sHostObjectId' => null - ) - ), - array('pattern' => '/object/search/{sMode}/{sTargetAttCode}/{sHostObjectClass}/{sHostObjectId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::SearchAction', - 'bind' => 'p_object_search_generic', - 'values' => array( - 'sMode' => '-sMode-', - 'sHostObjectClass' => null, - 'sHostObjectId' => null - ) - ), - array('pattern' => '/object/get-informations/json', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::GetInformationsAsJsonAction', - 'bind' => 'p_object_get_informations_json', - ), - array('pattern' => '/object/document/display/{sObjectClass}/{sObjectId}/{sObjectField}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::DocumentAction', - 'bind' => 'p_object_document_display', - 'values' => array( - 'sOperation' => 'display' - ) - ), - array('pattern' => '/object/document/download/{sObjectClass}/{sObjectId}/{sObjectField}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::DocumentAction', - 'bind' => 'p_object_document_download', - 'values' => array( - 'sOperation' => 'download' - ) - ), - array('pattern' => '/object/attachment/add', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::AttachmentAction', - 'bind' => 'p_object_attachment_add' - ), - array('pattern' => '/object/attachment/download/{sAttachmentId}', - 'callback' => 'Combodo\\iTop\\Portal\\Controller\\ObjectController::AttachmentAction', - 'bind' => 'p_object_attachment_download', - 'values' => array( - 'sOperation' => 'download' - ) - ), - ); - -} diff --git a/datamodels/2.x/itop-portal-base/portal-silex/web/index.php b/datamodels/2.x/itop-portal-base/portal-silex/web/index.php deleted file mode 100644 index 22f5d31480..0000000000 --- a/datamodels/2.x/itop-portal-base/portal-silex/web/index.php +++ /dev/null @@ -1,172 +0,0 @@ - - -/** - * Required constants : - * - PORTAL_MODULE_ID : Name of the portal instance module - * - PORTAL_ID : Name of the portal instance module design (Configuration) - */ -// Silex framework and components -require_once APPROOT . '/lib/silex/vendor/autoload.php'; -// iTop application requirements -//require_once __DIR__.'/../../../../approot.inc.php'; // Required by the instanciation module -//require_once APPROOT.'/application/startup.inc.php'; // Required by the instanciation module -require_once APPROOT . '/core/moduledesign.class.inc.php'; -require_once APPROOT . '/application/loginwebpage.class.inc.php'; -require_once APPROOT . '/sources/autoload.php'; -// Portal -// Note: This could be prevented by adding namespaces to composer -require_once __DIR__ . '/../src/providers/urlgeneratorserviceprovider.class.inc.php'; -require_once __DIR__ . '/../src/helpers/urlgeneratorhelper.class.inc.php'; -require_once __DIR__ . '/../src/providers/contextmanipulatorserviceprovider.class.inc.php'; -require_once __DIR__ . '/../src/helpers/contextmanipulatorhelper.class.inc.php'; -require_once __DIR__ . '/../src/providers/requestmanipulatorserviceprovider.class.inc.php'; -require_once __DIR__ . '/../src/helpers/requestmanipulatorhelper.class.inc.php'; -require_once __DIR__ . '/../src/providers/scopevalidatorserviceprovider.class.inc.php'; -require_once __DIR__ . '/../src/helpers/scopevalidatorhelper.class.inc.php'; -require_once __DIR__ . '/../src/providers/lifecyclevalidatorserviceprovider.class.inc.php'; -require_once __DIR__ . '/../src/helpers/lifecyclevalidatorhelper.class.inc.php'; -require_once __DIR__ . '/../src/helpers/securityhelper.class.inc.php'; -require_once __DIR__ . '/../src/helpers/applicationhelper.class.inc.php'; - -use Combodo\iTop\Portal\Helper\ApplicationHelper; -use Silex\Application; - -// Stacking context tag so it knows we are in the portal -$oContex = new ContextTag('GUI:Portal'); -$oContex2 = new ContextTag('Portal:' . PORTAL_MODULE_ID); - -// Checking if debug param is on -$bDebug = (isset($_REQUEST['debug']) && ($_REQUEST['debug'] === 'true') ); -if($bDebug) -{ - $oContexDebug = new ContextTag('debug'); -} - -// Initializing Silex framework -$oKPI = new ExecutionKPI(); -$oApp = new Application(); - -// Registring optional silex components -$oApp->register(new Combodo\iTop\Portal\Provider\UrlGeneratorServiceProvider()); -$oApp->register(new Combodo\iTop\Portal\Provider\ContextManipulatorServiceProvider()); -$oApp->register(new Combodo\iTop\Portal\Provider\ScopeValidatorServiceProvider(), array( - 'scope_validator.scopes_path' => utils::GetCachePath(), - 'scope_validator.scopes_filename' => PORTAL_ID . '.scopes.php', - 'scope_validator.instance_name' => PORTAL_ID -)); -$oApp->register(new Combodo\iTop\Portal\Provider\LifecycleValidatorServiceProvider(), array( - 'lifecycle_validator.lifecycle_path' => utils::GetCachePath(), - 'lifecycle_validator.lifecycle_filename' => PORTAL_ID . '.lifecycle.php', - 'lifecycle_validator.instance_name' => PORTAL_ID -)); -$oApp->register(new Silex\Provider\TwigServiceProvider(), array( - 'twig.path' => MODULESROOT, - 'twig.options' => array( - 'cache' => ($bDebug) ? false : utils::GetCachePath() . 'twig/', - ) -)); -$oApp->register(new Silex\Provider\HttpFragmentServiceProvider()); -$oKPI->ComputeAndReport('Initialization of the Silex application'); - -$oApp->before(function(Symfony\Component\HttpFoundation\Request $oRequest, Silex\Application $oApp) use ($bDebug){ - // User pre-checks - // Note: At this point the Exception handler is not registered, so we can't use $oApp::abort() method, hence the die(). - // - Checking user rights and prompt if needed (401 HTTP code returned if XHR request) - $iExitMethod = ($oRequest->isXmlHttpRequest()) ? LoginWebPage::EXIT_RETURN : LoginWebPage::EXIT_PROMPT; - $iLogonRes = LoginWebPage::DoLoginEx(PORTAL_ID, false, $iExitMethod); - if( ($iExitMethod === LoginWebPage::EXIT_RETURN) && ($iLogonRes != 0) ) - { - $oApp->abort(401); - } - // - User must be associated with a Contact - if (UserRights::GetContactId() == 0) - { - die(Dict::S('Portal:ErrorNoContactForThisUser')); - } - - // Register request manipulator now that the request has been created. - $oApp->register(new Combodo\iTop\Portal\Provider\RequestManipulatorServiceProvider()); - - // Enable archived data - utils::InitArchiveMode(); - - // Enabling datalocalizer if needed - if (!defined('DISABLE_DATA_LOCALIZER_PORTAL')) - { - ApplicationContext::SetPluginProperty('QueryLocalizerPlugin', 'language_code', UserRights::GetUserLanguage()); - } - - // Configuring Silex application - $oApp['debug'] = $bDebug; - $oApp['combodo.current_environment'] = utils::GetCurrentEnvironment(); - $oApp['combodo.absolute_url'] = utils::GetAbsoluteUrlAppRoot(); - $oApp['combodo.modules.absolute_url'] = utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment(); - $oApp['combodo.portal.base.absolute_url'] = utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment() . '/itop-portal-base/portal/web/'; - $oApp['combodo.portal.base.absolute_path'] = MODULESROOT . '/itop-portal-base/portal/web/'; - $oApp['combodo.portal.instance.absolute_url'] = utils::GetAbsoluteUrlAppRoot() . 'env-' . utils::GetCurrentEnvironment() . '/' . PORTAL_MODULE_ID . '/'; - $oApp['combodo.portal.instance.id'] = PORTAL_MODULE_ID; - $oApp['combodo.portal.instance.conf'] = array(); - $oApp['combodo.portal.instance.routes'] = array(); - - // Registering error/exception handler in order to transform php error to exception - ApplicationHelper::RegisterExceptionHandler($oApp); - - // Preparing portal foundations (Can't use Silex autoload through composer as we don't follow PSR conventions -filenames, functions-) - $oKPI = new ExecutionKPI(); - ApplicationHelper::LoadControllers(); - ApplicationHelper::LoadRouters(); - ApplicationHelper::RegisterRoutes($oApp); - ApplicationHelper::LoadBricks(); - ApplicationHelper::LoadFormManagers(); - ApplicationHelper::RegisterTwigExtensions($oApp['twig']); - $oKPI->ComputeAndReport('Loading portal files (routers, controllers, ...)'); - - // Loading portal configuration from the module design - $oKPI = new ExecutionKPI(); - ApplicationHelper::LoadPortalConfiguration($oApp); - ApplicationHelper::LoadSessionMessages($oApp); - $oKPI->ComputeAndReport('Parsing portal configuration'); - // Loading current user - ApplicationHelper::LoadCurrentUser($oApp); - - // Checking that user is allowed this portal - $bAllowed = false; - foreach($oApp['combodo.portal.instance.conf']['portals'] as $aAllowedPortal) - { - if($aAllowedPortal['id'] === PORTAL_ID) - { - $bAllowed = true; - break; - } - } - if(!$bAllowed) - { - $oApp->abort(404); - } -}, Application::EARLY_EVENT); - -// Running application -$oKPI = new ExecutionKPI(); -$oApp->run(); -$oKPI->ComputeAndReport('Page execution and rendering'); - -// Logging trace and stats -DBSearch::RecordQueryTrace(); -ExecutionKPI::ReportStats(); \ No newline at end of file