Example #1
0
 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);
 }
Example #2
0
 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;
 }