frontend/modules/api/v1/models/ApiUserIdentity.php
<?php
/*
* This file is part of the HomeFinanceV2 project.
*
* (c) Rafalsky.com <http://github.com/Rafalsky/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace frontend\modules\api\v1\models;
use common\models\User;
use yii\filters\RateLimitInterface;
/**
* @author Eugene Terentev <eugene@terentev.net>
*/
class ApiUserIdentity extends User implements RateLimitInterface
{
/**
* @var int
*/
public $rateWindowSize = 3600;
/**
* Returns the maximum number of allowed requests and the window size.
* @param \yii\web\Request $request the current request
* @param \yii\base\Action $action the action to be executed
* @return array an array of two elements. The first element is the maximum number of allowed requests,
* and the second element is the size of the window in seconds.
*/
public function getRateLimit($request, $action)
{
return [5000, $this->rateWindowSize];
}
/**
* Loads the number of allowed requests and the corresponding timestamp from a persistent storage.
* @param \yii\web\Request $request the current request
* @param \yii\base\Action $action the action to be executed
* @return array an array of two elements. The first element is the number of allowed requests,
* and the second element is the corresponding UNIX timestamp.
*/
public function loadAllowance($request, $action)
{
$allowance = \Yii::$app->cache->get($this->getCacheKey('api_rate_allowance'));
$timestamp = \Yii::$app->cache->get($this->getCacheKey('api_rate_timestamp'));
return [$allowance, $timestamp];
}
/**
* Saves the number of allowed requests and the corresponding timestamp to a persistent storage.
* @param \yii\web\Request $request the current request
* @param \yii\base\Action $action the action to be executed
* @param integer $allowance the number of allowed requests remaining.
* @param integer $timestamp the current timestamp.
*/
public function saveAllowance($request, $action, $allowance, $timestamp)
{
\Yii::$app->cache->set($this->getCacheKey('api_rate_allowance'), $allowance, $this->rateWindowSize);
\Yii::$app->cache->set($this->getCacheKey('api_rate_timestamp'), $timestamp, $this->rateWindowSize);
}
/**
* @param $key
* @return array
*/
public function getCacheKey($key)
{
return [__CLASS__, $this->getId(), $key];
}
}