/** * Готовим данные для логирования. * * Кроме сообщения, переданного клиентским кодом, добавляем полезную инфу: дата/время, часовой пояс, IP юзера, * URL запроса. * * @param array $data исходные данные * @return void */ private function prepareLogData($data) { $ts = $this->conf['php_timezone'] ? new \DateTime(null, new \DateTimeZone($this->conf['php_timezone'])) : new \DateTime(); $this->logIt = ['type' => $data['type'], 'ts' => $ts, 'timezone' => $ts->format('\\G\\M\\T P'), 'userIP' => Request::userIP(), 'request' => Request::absoluteURL(), 'source' => $data['source'], 'message' => str_replace(chr(9), '', $data['message'])]; }
/** * Проверка CSRF-токена * * Если поле с токеном не задано, не выполнять проверку. Если не пройдет проверку, пробрасываем исключение. * * @return true * @throws \LogicException * @throws \RuntimeException с кодом 400, если токен неверный. */ private function checkСsrfToken() { if (!$this->csrfField) { return true; } $method = Request::method(); if (!in_array($method, ['GET', 'POST'])) { throw new \LogicException('Проверка CSRF токена возможна только при передаче формы методами GET или POST' . PHP_EOL . 'Текущий метод определен, как ' . $method); } $method = strtolower($method); $token = Request::$method($this->csrfField); if (!Request::validateCsrfToken($token)) { throw new \RuntimeException('Неверный CSRF токен', 400); } return true; }