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; }
/** * 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(); } }
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()); }