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 ]); } }