/
mikopbx
/
ModuleBeelinePbx
Обзор
Документация
Войти
/
mikopbx
/
ModuleBeelinePbx
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
master
Lib/EventLogFormatter.php
94 строки
4 KB
boffart
Инициализация модуля ModuleBeelinePbx
08 июл 2026, 17:11
08 июл 2026, 17:11
1cc4e1a
Код
Авторство
О чём код?
<?php /* * MikoPBX - free phone system for small business * Copyright © 2017-2024 Alexey Portnov and Nikolay Beketov * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program. * If not, see <https://www.gnu.org/licenses/>. */ namespace Modules\ModuleBeelinePbx\Lib; /** * Формирование структуры входящего HTTP-запроса для записи в лог. * * Вынесено из EventController отдельным классом (без зависимости от framework), * чтобы покрыть чистую логику модульными тестами. */ class EventLogFormatter { /** * Максимальный размер тела запроса, записываемого в лог (защита от разрастания лога). */ public const MAX_BODY_LOG = 100000; /** * Заголовки, значения которых маскируются в логе (могут содержать секреты). */ public const SENSITIVE_HEADERS = ['authorization', 'x-mpbx-api-auth-token']; /** * Собирает структуру запроса для записи в лог. * * @param string $method HTTP-метод * @param array<string,string> $headers заголовки запроса * @param array<string,mixed> $query query-параметры * @param string $body сырое тело запроса * @param string $remoteAddr IP источника * @param int $maxBody порог усечения тела * @return array */ public static function build( string $method, array $headers, array $query, string $body, string $remoteAddr, int $maxBody = self::MAX_BODY_LOG ): array { $bodyLen = strlen($body); $truncated = false; if ($bodyLen > $maxBody) { $body = substr($body, 0, $maxBody); $truncated = true; } return [ 'method' => $method, 'remote_addr' => $remoteAddr, 'query' => $query, 'headers' => self::maskSensitiveHeaders($headers), 'body_length' => $bodyLen, 'body_truncated' => $truncated, 'body' => $body, ]; } /** * Маскирует значения чувствительных заголовков (по имени, без учёта регистра). * * @param array<string,string> $headers * @return array<string,string> */ public static function maskSensitiveHeaders(array $headers): array { $masked = []; foreach ($headers as $name => $value) { if (in_array(strtolower((string)$name), self::SENSITIVE_HEADERS, true)) { $masked[$name] = substr((string)$value, 0, 4) . '***'; } else { $masked[$name] = $value; } } return $masked; } }