예제 #1
0
 /**
  * @return \Fusio\Engine\Repository\AppInterface
  */
 protected function createRepository()
 {
     $app = new App();
     $app->setId(1);
     $app->setName('foo');
     $repository = new Repository\AppMemory();
     $repository->add($app);
     return $repository;
 }
예제 #2
0
파일: Rate.php 프로젝트: apioo/fusio-impl
 public function getRateForRequest($routeId, Model\App $app)
 {
     $sql = '    SELECT rate.rateLimit,
                        rate.timespan
                   FROM fusio_rate_allocation rateAllocation
             INNER JOIN fusio_rate rate
                     ON rateAllocation.rateId = rate.id 
                  WHERE rate.status = :status
                    AND (rateAllocation.routeId IS NULL OR rateAllocation.routeId = :routeId)
                    AND (rateAllocation.appId IS NULL OR rateAllocation.appId = :appId)
                    AND (rateAllocation.authenticated IS NULL OR rateAllocation.authenticated = :authenticated)';
     $params = ['status' => self::STATUS_ACTIVE, 'routeId' => $routeId, 'appId' => $app->getId(), 'authenticated' => $app->isAnonymous() ? 0 : 1];
     $parameters = $app->getParameters();
     if (!empty($parameters)) {
         $sql .= ' AND (rateAllocation.parameters IS NULL OR ';
         $sql .= $this->connection->getDatabasePlatform()->getLocateExpression(':parameters', 'rateAllocation.parameters');
         $sql .= ' > 0)';
         $params['parameters'] = http_build_query($parameters, '', '&');
     }
     $sql .= ' ORDER BY rate.priority DESC';
     return $this->connection->fetchAssoc($sql, $params);
 }
예제 #3
0
 /**
  * @return \Fusio\Engine\Context
  */
 protected function getContext()
 {
     $app = new App();
     $app->setAnonymous(false);
     $app->setId(3);
     $app->setUserId(2);
     $app->setStatus(1);
     $app->setName('Foo-App');
     $app->setUrl('http://google.com');
     $app->setParameters(['foo' => 'bar']);
     $app->setScopes(['foo', 'bar']);
     $app->setAppKey('5347307d-d801-4075-9aaa-a21a29a448c5');
     $user = new User();
     $user->setAnonymous(false);
     $user->setId(2);
     $user->setStatus(0);
     $user->setName('Consumer');
     $action = new Action();
     $action->setId(uniqid());
     $action->setName('foo');
     $action->setDate(date('Y-m-d H:i:s'));
     return new Context(34, $app, $user, $action);
 }
예제 #4
0
 protected function newApp(array $row)
 {
     $parameters = [];
     if (!empty($row['parameters'])) {
         parse_str($row['parameters'], $parameters);
     }
     $app = new App();
     $app->setId($row['id']);
     $app->setUserId($row['userId']);
     $app->setStatus($row['status']);
     $app->setName($row['name']);
     $app->setUrl($row['url']);
     $app->setParameters($parameters);
     $app->setAppKey($row['appKey']);
     return $app;
 }
예제 #5
0
 /**
  * @param integer $appId
  * @return \Fusio\Engine\Model\AppInterface
  */
 private function getApp($appId)
 {
     $app = $this->appRepository->get($appId);
     if (!$app instanceof Model\AppInterface) {
         $app = new Model\App();
         $app->setAnonymous(true);
         $app->setScopes([]);
     }
     return $app;
 }
예제 #6
0
파일: Rate.php 프로젝트: apioo/fusio-impl
 /**
  * @param string $ip
  * @param string $timespan
  * @param \Fusio\Engine\Model\App $app
  * @return integer
  */
 protected function getRequestCount($ip, $timespan, Model\App $app)
 {
     if (empty($timespan)) {
         return 0;
     }
     $now = new \DateTime();
     $past = new \DateTime();
     $past->sub(new \DateInterval($timespan));
     $condition = new Condition();
     if ($app->isAnonymous()) {
         $condition->equals('ip', $ip);
     } else {
         $condition->equals('appId', $app->getId());
     }
     $condition->between('date', $past->format('Y-m-d H:i:s'), $now->format('Y-m-d H:i:s'));
     return $this->logTable->getCount($condition);
 }