protected function createUserOnDemand($partner_id, $subp_id, $puser_id, $puser_kuser, $kuser = null)
 {
     // make sure the user [puser_kuser + kuser] exists according to addUserOnDemand
     // TODO - remove dead code
     //$create_user_on_demand = $this->addUserOnDemand();
     $create_user_on_demand = $this->addUserOnDemand2();
     $create_user = false;
     if ($puser_kuser == null) {
         if ($create_user_on_demand == self::CREATE_USER_FALSE) {
             $create_user = false;
         } elseif ($create_user_on_demand == self::CREATE_USER_FORCE) {
             $create_user = true;
         } elseif ($create_user_on_demand == self::CREATE_USER_FROM_PARTNER_SETTINGS) {
             $partner = PartnerPeer::retrieveByPK($partner_id);
             $create_user = $partner->getCreateUserOnDemand();
         }
     }
     if ($create_user) {
         // prefer the user_screenName on user_name
         $user_name = $this->getP("user_screenName", $this->getP("user_name"));
         if (!$user_name) {
             $puser_name = $kuser_name = myPartnerUtils::getPrefix($partner_id) . $puser_id;
         } else {
             $puser_name = $kuser_name = $user_name;
         }
         $puser_kuser = PuserKuserPeer::createPuserKuser($partner_id, $subp_id, $puser_id, $kuser_name, $puser_name, false, $kuser);
     }
     return $puser_kuser;
 }
Ejemplo n.º 2
0
 /**
  * Sets the valid user for the entry 
  * Throws an error if the session user is trying to add entry to another user and not using an admin session 
  *
  * @param KalturaBaseEntry $entry
  * @param entry $dbEntry
  */
 protected function checkAndSetValidUser(KalturaBaseEntry $entry, entry $dbEntry)
 {
     KalturaLog::debug("DB puser id [" . $dbEntry->getPuserId() . "] kuser id [" . $dbEntry->getKuserId() . "]");
     // for new entry, puser ID is null - set it from service scope
     if ($dbEntry->getPuserId() === null) {
         KalturaLog::debug("Set kuser id [" . $this->getKuser()->getId() . "] line [" . __LINE__ . "]");
         $dbEntry->setKuserId($this->getKuser()->getId());
         return;
     }
     // get puser ID from entry to compare to userId on the updated entry object
     $entryPuserId = $dbEntry->getPuserId();
     $kuser = null;
     if ($dbEntry->getKuserId()) {
         // get kuser object from entry kuserId
         $kuser = kuserPeer::retrieveByPK($dbEntry->getKuserId());
         if (!$kuser || $kuser->getPuserId() != $dbEntry->getPuserId()) {
             $kuser = null;
         }
     } else {
         // get kuser object from entry puserId
         $kuser = kuserPeer::getKuserByPartnerAndUid($dbEntry->getPartnerId(), $dbEntry->getPuserId());
     }
     if ($kuser) {
         KalturaLog::debug("Set kuser id [" . $kuser->getId() . "] line [" . __LINE__ . "]");
         $dbEntry->setKuserId($kuser->getId());
         return;
     }
     // userID doesn't require change (it is null or the same as the db entry) - do nothing
     if ($entry->userId === null || $entry->userId === $entryPuserId) {
         KalturaLog::debug('API entry userId [' . $entry->userId . '], DB entry userId [' . $entryPuserId . '] - no need to change - quitting');
         return;
     }
     // db user is going to be changed, only admin allowed - otherwise, throw exception
     if (!$this->getKs() || !$this->getKs()->isAdmin()) {
         KalturaLog::debug('API entry userId [' . $entry->userId . '], DB entry userId [' . $entryPuserId . '] - change required but KS is not admin');
         throw new KalturaAPIException(KalturaErrors::INVALID_KS, "", ks::INVALID_TYPE, ks::getErrorStr(ks::INVALID_TYPE));
     }
     // passed previous conditions, need to change userID on entry
     // first step is to make sure the user exists
     $puserKuser = PuserKuserPeer::createPuserKuser($this->getPartnerId(), $this->getPartnerId() * 100, $dbEntry->getPuserId(), $dbEntry->getPuserId(), $dbEntry->getPuserId(), true);
     // second step is simply changing the userID on the entry
     $dbEntry->setKuserId($puserKuser->getKuserId());
     KalturaLog::debug("Set kuser id [" . $puserKuser->getKuserId() . "] line [" . __LINE__ . "]");
 }
 protected function getLoggedInUserId()
 {
     if ($this->partner_id) {
         // this part overhere should be in a more generic place - part of the services
         $ks = "";
         // TODO - for now ignore the session
         $valid = true;
         // ( 0 >= kSessionUtils::validateKSession ( $this->partner_id , $this->uid , $this->ks_str ,&$ks ) );
         if ($valid) {
             $puser_id = $this->uid;
             // actually the better user indicator will be placed in the ks - TODO - use it !!
             // $puser_id = $ks->user;
             $kuser_name = $puser_name = $this->getP("user_name");
             if (!$puser_name) {
                 $kuser_name = myPartnerUtils::getPrefix($this->partner_id) . $puser_id;
             }
             // will return the existing one if any, will create is none
             $puser_kuser = PuserKuserPeer::createPuserKuser($this->partner_id, $this->subp_id, $puser_id, $kuser_name, $puser_name, false);
             $likuser_id = $puser_kuser->getKuserId();
             // from now on  - this will be considered the logged in user
             return $likuser_id;
         }
     } else {
         return parent::getLoggedInUserId();
     }
 }
Ejemplo n.º 4
0
 public function executeImpl($partner_id, $subp_id, $puser_id, $partner_prefix, $puser_kuser)
 {
     defPartnerservices2baseAction::disableCache();
     kuserPeer::setUseCriteriaFilter(false);
     $email = trim($this->getPM("email"));
     $password = trim($this->getPM("password"));
     $loginData = UserLoginDataPeer::getByEmail($email);
     // be sure to return the same error if there are no admins in the list and when there are none matched -
     // so no hint about existing admin will leak
     if (!$loginData) {
         $this->addError(APIErrors::ADMIN_KUSER_NOT_FOUND);
         return;
     }
     try {
         $adminKuser = UserLoginDataPeer::userLoginByEmail($email, $password, $partner_id);
     } catch (kUserException $e) {
         $code = $e->getCode();
         if ($code == kUserException::USER_NOT_FOUND) {
             $this->addError(APIErrors::ADMIN_KUSER_NOT_FOUND);
             return null;
         }
         if ($code == kUserException::LOGIN_DATA_NOT_FOUND) {
             $this->addError(APIErrors::ADMIN_KUSER_NOT_FOUND);
             return null;
         } else {
             if ($code == kUserException::LOGIN_RETRIES_EXCEEDED) {
                 $this->addError(APIErrors::LOGIN_RETRIES_EXCEEDED);
                 return null;
             } else {
                 if ($code == kUserException::LOGIN_BLOCKED) {
                     $this->addError(APIErrors::LOGIN_BLOCKED);
                     return null;
                 } else {
                     if ($code == kUserException::PASSWORD_EXPIRED) {
                         $this->addError(APIErrors::PASSWORD_EXPIRED);
                         return null;
                     } else {
                         if ($code == kUserException::WRONG_PASSWORD) {
                             $this->addError(APIErrors::USER_WRONG_PASSWORD);
                             return null;
                         } else {
                             if ($code == kUserException::USER_IS_BLOCKED) {
                                 $this->addError(APIErrors::USER_IS_BLOCKED);
                                 return null;
                             } else {
                                 $this->addError(APIErrors::INTERNAL_SERVERL_ERROR);
                                 return null;
                             }
                         }
                     }
                 }
             }
         }
     }
     if (!$adminKuser || !$adminKuser->getIsAdmin()) {
         $this->addError(APIErrors::ADMIN_KUSER_NOT_FOUND);
         return null;
     }
     if ($partner_id && $partner_id != $adminKuser->getPartnerId()) {
         $this->addError(APIErrors::UNKNOWN_PARTNER_ID);
         return;
     }
     $partner = PartnerPeer::retrieveByPK($adminKuser->getPartnerId());
     if (!$partner) {
         $this->addError(APIErrors::UNKNOWN_PARTNER_ID);
         return;
     }
     $partner_id = $partner->getId();
     $subp_id = $partner->getSubpId();
     $admin_puser_id = $adminKuser->getPuserId();
     // get the puser_kuser for this admin if exists, if not - creae it and return it - create a kuser too
     $puser_kuser = PuserKuserPeer::createPuserKuser($partner_id, $subp_id, $admin_puser_id, $adminKuser->getScreenName(), $adminKuser->getScreenName(), true);
     $uid = $puser_kuser->getPuserId();
     $ks = null;
     // create a ks for this admin_kuser as if entered the admin_secret using the API
     // ALLOW A KS FOR 30 DAYS
     kSessionUtils::createKSessionNoValidations($partner_id, $uid, $ks, 30 * 86400, 2, "", "*");
     $this->addMsg("partner_id", $partner_id);
     $this->addMsg("subp_id", $subp_id);
     $this->addMsg("uid", $uid);
     $this->addMsg("ks", $ks);
     $this->addMsg("screenName", $adminKuser->getFullName());
     $this->addMsg("fullName", $adminKuser->getFullName());
     $this->addMsg("email", $adminKuser->getEmail());
 }