/** * N.B.: if the user passed as input is a supporter, the method prefix '1' * to the token, making it 41-character long, rather than 40 * * @param PcApiApp $apiApp * @param int $userId * @return string */ public static function createToken(PcApiApp $apiApp, $userId) { $apiAppId = $apiApp->getId(); // if there is already a token entry for the application and the user, we delete it $c = new Criteria(); $c->add(PcApiTokenPeer::API_APP_ID, $apiAppId); $c->add(PcApiTokenPeer::USER_ID, $userId); PcApiTokenPeer::doDelete($c); $apiTokenEntry = new PcApiToken(); $tokenPrefix = PcUserPeer::retrieveByPK($userId)->isSupporter() ? '1' : ''; // we want to be extra-sure the token is unique $token = ''; $safetyCounter = 0; // to avoid infinite loop under any circumstances do { $token = $tokenPrefix . PcUtils::generate40CharacterRandomHash(); $c = new Criteria(); $c->add(PcApiTokenPeer::TOKEN, $token); $alreadyExisting = PcApiTokenPeer::doSelectOne($c); $safetyCounter++; if ($safetyCounter == 100) { throw new Exception("Detected possible infinite loop while creating API token"); } } while (is_object($alreadyExisting)); $apiTokenEntry->setToken($token)->setApiAppId($apiAppId)->setUserId($userId)->setExpiryTimestamp(time() + sfConfig::get('app_api_tokenValidity') * 3600)->save(); return $token; }
/** * * @param int $userId * @param string $description (='') - the description of the use * @return boolean - false is the user has got a personal api key already, true otherwise */ public static function createPersonalApiApp($userId, $description = '') { $alreadyExisting = is_object(self::retrieveByUserId($userId)); if ($alreadyExisting) { return false; } $apiKey = ''; $safetyCounter = 0; // to avoid infinite loop under any circumstances do { $apiKey = PcUtils::generate40CharacterRandomHash(); $c = new Criteria(); $c->add(PcApiAppPeer::API_KEY, $apiKey); $alreadyExisting = PcApiAppPeer::doSelectOne($c); $safetyCounter++; if ($safetyCounter == 100) { throw new Exception("Detected possible infinite loop while creating API key"); } } while (is_object($alreadyExisting)); $personalApiApp = new PcApiApp(); $personalApiApp->setUserId($userId)->setName('personal')->setApiKey($apiKey)->setApiSecret(PcUtils::generateRandomString(16))->setIsLimited(true)->setDescription($description)->save(); $apiKeyStats = new PcApiAppStats(); $apiKeyStats->setApiAppId($personalApiApp->getId())->setToday(date('Y-m-d'))->setLastHour(date('H'))->save(); $userKey = PcUserKeyPeer::retrieveByPK($userId); if (!is_object($userKey)) { $userKey = new PcUserKey(); $userKey->setUserId($userId)->setKey(PcUtils::generate32CharacterRandomHash())->save(); } return true; }
/** * @return PcApiAppStats */ public function getStats() { $stats = self::$stats; if ($stats === null) { self::$stats = PcApiAppStatsPeer::retrieveByApiAppId($this->getId()); // Fix null exception if there are currently no stats if (!self::$stats) { self::$stats = new PcApiAppStats(); self::$stats->setApiAppId($this->getId()); } } return self::$stats; }
/** * Declares an association between this object and a PcApiApp object. * * @param PcApiApp $v * @return PcApiAppStats The current object (for fluent API support) * @throws PropelException */ public function setPcApiApp(PcApiApp $v = null) { if ($v === null) { $this->setApiAppId(NULL); } else { $this->setApiAppId($v->getId()); } $this->aPcApiApp = $v; // Add binding for other direction of this n:n relationship. // If this object has already been added to the PcApiApp object, it will not be re-added. if ($v !== null) { $v->addPcApiAppStats($this); } return $this; }
/** * Adds an object to the instance pool. * * Propel keeps cached copies of objects in an instance pool when they are retrieved * from the database. In some cases -- especially when you override doSelect*() * methods in your stub classes -- you may need to explicitly add objects * to the cache in order to ensure that the same objects are always returned by doSelect*() * and retrieveByPK*() calls. * * @param PcApiApp $value A PcApiApp object. * @param string $key (optional) key to use for instance map (for performance boost if key was already calculated externally). */ public static function addInstanceToPool(PcApiApp $obj, $key = null) { if (Propel::isInstancePoolingEnabled()) { if ($key === null) { $key = (string) $obj->getId(); } // if key === null self::$instances[$key] = $obj; } }