59 lines
1.5 KiB
PHP
59 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace acs\Controller;
|
|
|
|
use Acast\Http\Config;
|
|
use Acast\Http\Controller;
|
|
use Acast\Http\Router;
|
|
|
|
class Client extends Controller
|
|
{
|
|
/**
|
|
* @var \acs\View\Client
|
|
*/
|
|
protected $view;
|
|
|
|
/**
|
|
* @var \acs\Model\Client
|
|
*/
|
|
protected $model;
|
|
|
|
protected $id;
|
|
|
|
protected $key;
|
|
|
|
function __construct(Router $router)
|
|
{
|
|
parent::__construct($router);
|
|
$this->id = intval($this->params['id']);
|
|
$this->key = strval($this->params['key']);
|
|
}
|
|
|
|
function tick()
|
|
{
|
|
if ($this->id < 1 || empty($this->key)) {
|
|
$this->view->retJson('Bad request.', -1, 400);
|
|
return;
|
|
}
|
|
$result = $this->model->fetchById($this->id);
|
|
if (!$result || $result['key'] != $this->key) {
|
|
$this->view->retJson('Invalid credentials.', 1, 403);
|
|
return;
|
|
}
|
|
$token = '';
|
|
$expired = time() > $result['updated'] + Config::get('EXPIRY_TIME');
|
|
// No token yet; Token expired; Token used.
|
|
if ($result['token'] == '' || $expired || $result['stunum'] != '') {
|
|
$token = strtr(base64_encode(random_bytes(15)), '+/', '-_');
|
|
if (!$this->model->updateToken($this->id, $token)) {
|
|
$this->view->retJson('Failed to update token', -3, 500);
|
|
return;
|
|
}
|
|
}
|
|
$stunum = strval($result['stunum']);
|
|
$this->view->retJson([
|
|
'token' => $token,
|
|
'stunum' => $stunum
|
|
]);
|
|
}
|
|
} |