public function getExceptionObject($ex, $service, $action) { KalturaResponseCacher::adjustApiCacheForException($ex); if ($ex instanceof KalturaAPIException) { KalturaLog::err($ex); $object = $ex; } else { if ($ex instanceof APIException) { $args = $ex->extra_data; $reflectionException = new ReflectionClass("KalturaAPIException"); $ex = $reflectionException->newInstanceArgs($args); KalturaLog::err($ex); $object = $ex; } else { if ($ex instanceof kCoreException) { switch ($ex->getCode()) { case kCoreException::USER_BLOCKED: $object = new KalturaAPIException(KalturaErrors::USER_BLOCKED); break; case kCoreException::PARTNER_BLOCKED: $object = new KalturaAPIException(KalturaErrors::SERVICE_FORBIDDEN_CONTENT_BLOCKED); break; case kCoreException::INVALID_KS: $object = new KalturaAPIException(KalturaErrors::INVALID_KS, $ex->getData(), ks::INVALID_STR, 'INVALID_STR'); break; case kCoreException::MAX_NUMBER_OF_ACCESS_CONTROLS_REACHED: $object = new KalturaAPIException(KalturaErrors::MAX_NUMBER_OF_ACCESS_CONTROLS_REACHED, $ex->getData()); break; case kCoreException::MAX_CATEGORIES_PER_ENTRY: $object = new KalturaAPIException(KalturaErrors::MAX_CATEGORIES_FOR_ENTRY_REACHED, $ex->getData()); break; case kCoreException::MAX_ASSETS_PER_ENTRY: $object = new KalturaAPIException(KalturaErrors::MAX_ASSETS_FOR_ENTRY_REACHED, asset::MAX_ASSETS_PER_ENTRY); break; case kCoreException::SEARCH_TOO_GENERAL: $object = new KalturaAPIException(KalturaErrors::SEARCH_TOO_GENERAL); break; case kCoreException::SOURCE_FILE_NOT_FOUND: $object = new KalturaAPIException(KalturaErrors::SOURCE_FILE_NOT_FOUND); break; case APIErrors::INVALID_ACTIONS_LIMIT: $object = new KalturaAPIException(APIErrors::INVALID_ACTIONS_LIMIT); break; case APIErrors::PRIVILEGE_IP_RESTRICTION: $object = new KalturaAPIException(APIErrors::PRIVILEGE_IP_RESTRICTION); break; case APIErrors::INVALID_SET_ROLE: $object = new KalturaAPIException(APIErrors::INVALID_SET_ROLE); break; case APIErrors::UNKNOWN_ROLE_ID: $object = new KalturaAPIException(APIErrors::UNKNOWN_ROLE_ID); break; case APIErrors::SEARCH_ENGINE_QUERY_FAILED: $object = new KalturaAPIException(APIErrors::SEARCH_ENGINE_QUERY_FAILED); break; case kCoreException::FILE_NOT_FOUND: $object = new KalturaAPIException(KalturaErrors::FILE_NOT_FOUND); break; case kCoreException::LOCK_TIMED_OUT: $object = new KalturaAPIException(KalturaErrors::LOCK_TIMED_OUT); break; case kCoreException::SPHINX_CRITERIA_EXCEEDED_MAX_MATCHES_ALLOWED: $object = new KalturaAPIException(KalturaErrors::SPHINX_CRITERIA_EXCEEDED_MAX_MATCHES_ALLOWED); break; case kCoreException::INVALID_ENTRY_ID: $object = new KalturaAPIException(KalturaErrors::INVALID_ENTRY_ID, $ex->getData()); break; case kCoreException::MAX_FILE_SYNCS_FOR_OBJECT_PER_DAY_REACHED: $object = new KalturaAPIException(KalturaErrors::MAX_FILE_SYNCS_FOR_OBJECT_PER_DAY_REACHED, $ex->getData()); break; case kCoreException::ID_NOT_FOUND: $object = new KalturaAPIException(KalturaErrors::INVALID_OBJECT_ID, $ex->getData()); break; default: KalturaLog::crit($ex); $object = new KalturaAPIException(KalturaErrors::INTERNAL_SERVERL_ERROR); } } else { if ($ex instanceof PropelException) { KalturaLog::alert($ex); $object = new KalturaAPIException(KalturaErrors::INTERNAL_DATABASE_ERROR); } else { KalturaLog::crit($ex); $object = new KalturaAPIException(KalturaErrors::INTERNAL_SERVERL_ERROR); } } } } return $this->handleErrorMapping($object, $service, $action); }
public function dispatch($service, $action, $params = array()) { $start = microtime(true); // prevent impersonate to partner zero $p = isset($params["p"]) && $params["p"] ? $params["p"] : null; if (!$p) { $p = isset($params["partnerId"]) && $params["partnerId"] ? $params["partnerId"] : null; } $GLOBALS["partnerId"] = $p; // set for logger $userId = ""; $ksStr = isset($params["ks"]) ? $params["ks"] : null; if (!$service) { throw new KalturaAPIException(KalturaErrors::SERVICE_NOT_SPECIFIED); } //strtolower on service - map is indexed according to lower-case service IDs $service = strtolower($service); $serviceActionItem = KalturaServicesMap::retrieveServiceActionItem($service, $action); $action = strtolower($action); if (!isset($serviceActionItem->actionMap[$action])) { KalturaLog::crit("Action does not exist!"); throw new KalturaAPIException(KalturaErrors::ACTION_DOES_NOT_EXISTS, $action, $service); } try { $actionReflector = new KalturaActionReflector($service, $action, $serviceActionItem->actionMap[$action]); } catch (Exception $e) { throw new Exception("Could not create action reflector for service [{$service}], action [{$action}]. Received error: " . $e->getMessage()); } $actionParams = $actionReflector->getActionParams(); $actionInfo = $actionReflector->getActionInfo(); // services.ct - check if partner is allowed to access service ... kCurrentContext::$host = isset($_SERVER["HOSTNAME"]) ? $_SERVER["HOSTNAME"] : gethostname(); kCurrentContext::$user_ip = requestUtils::getRemoteAddress(); kCurrentContext::$ps_vesion = "ps3"; kCurrentContext::$service = $serviceActionItem->serviceInfo->serviceName; kCurrentContext::$action = $action; kCurrentContext::$client_lang = isset($params['clientTag']) ? $params['clientTag'] : null; kCurrentContext::initKsPartnerUser($ksStr, $p, $userId); // validate it's ok to access this service $deserializer = new KalturaRequestDeserializer($params); $this->arguments = $deserializer->buildActionArguments($actionParams); KalturaLog::debug("Dispatching service [" . $service . "], action [" . $action . "], reqIndex [" . kCurrentContext::$multiRequest_index . "] with params " . print_r($this->arguments, true)); $responseProfile = $deserializer->getResponseProfile(); if ($responseProfile) { KalturaLog::debug("Response profile: " . print_r($responseProfile, true)); } kPermissionManager::init(kConf::get('enable_cache')); kEntitlementUtils::initEntitlementEnforcement(); $disableTags = $actionInfo->disableTags; if ($disableTags && is_array($disableTags) && count($disableTags)) { foreach ($disableTags as $disableTag) { KalturaCriterion::disableTag($disableTag); } } if ($actionInfo->validateUserObjectClass && $actionInfo->validateUserIdParamName && isset($actionParams[$actionInfo->validateUserIdParamName])) { // // TODO maybe if missing should throw something, maybe a bone? // if(!isset($actionParams[$actionInfo->validateUserIdParamName])) // throw new KalturaAPIException(KalturaErrors::MISSING_MANDATORY_PARAMETER, $actionInfo->validateUserIdParamName); KalturaLog::debug("validateUserIdParamName: " . $actionInfo->validateUserIdParamName); $objectId = $params[$actionInfo->validateUserIdParamName]; $this->validateUser($actionInfo->validateUserObjectClass, $objectId, $actionInfo->validateUserPrivilege, $actionInfo->validateOptions); } // initialize the service before invoking the action on it // action reflector will init the service to maintain the pluginable action transparency $actionReflector->initService($responseProfile); $invokeStart = microtime(true); KalturaLog::debug("Invoke start"); try { $res = $actionReflector->invoke($this->arguments); } catch (KalturaAPIException $e) { if ($actionInfo->returnType != 'file') { throw $e; } KalturaResponseCacher::adjustApiCacheForException($e); $res = new kRendererDieError($e->getCode(), $e->getMessage()); } kEventsManager::flushEvents(); KalturaLog::debug("Invoke took - " . (microtime(true) - $invokeStart) . " seconds"); KalturaLog::debug("Dispatch took - " . (microtime(true) - $start) . " seconds, memory: " . memory_get_peak_usage(true)); return $res; }