Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  *
  * @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;
 }
Ejemplo n.º 3
0
 /**
  * @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;
 }
Ejemplo n.º 4
0
 /**
  * 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;
 }
Ejemplo n.º 5
0
 /**
  * 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;
     }
 }