92 lines
3.9 KiB
PHP
92 lines
3.9 KiB
PHP
|
|
<?php
|
|||
|
|
/**
|
|||
|
|
* REINSTALL LOG CLEANUP AGENT
|
|||
|
|
* Target: auth.con-med.ru
|
|||
|
|
*/
|
|||
|
|
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
|
|||
|
|
|
|||
|
|
if (!$USER->IsAdmin()) die("Доступ запрещен");
|
|||
|
|
|
|||
|
|
$log = [];
|
|||
|
|
$apiFile = $_SERVER["DOCUMENT_ROOT"]."/local/modules/conmed.authserver/lib/api.php";
|
|||
|
|
|
|||
|
|
// 1. ОБНОВЛЯЕМ ФАЙЛ API.PHP (чтобы метод точно был в классе)
|
|||
|
|
$apiCode = <<<'PHP'
|
|||
|
|
<?php
|
|||
|
|
namespace Conmed\Authserver;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Класс-фасад API сервера авторизации
|
|||
|
|
* Собирает функционал из трейтов и содержит системные методы (агенты)
|
|||
|
|
*/
|
|||
|
|
class Api {
|
|||
|
|
use SecurityTrait, AuthTokenTrait, RegistrationTrait, ProfileTrait, GroupsTrait;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Агент автоматической очистки логов
|
|||
|
|
* Выполняется раз в сутки
|
|||
|
|
*/
|
|||
|
|
public static function cleanLogsAgent() {
|
|||
|
|
if (!\Bitrix\Main\Loader::includeModule("highloadblock")) return "";
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
// Получаем классы таблиц через трейт безопасности
|
|||
|
|
$dcSec = self::getHlEntity('sso_security_log');
|
|||
|
|
$dcAud = self::getHlEntity('sso_audit');
|
|||
|
|
$dcCodes = self::getHlEntity('sso_codes');
|
|||
|
|
|
|||
|
|
// 1. Очистка логов безопасности (храним 7 дней)
|
|||
|
|
$date7 = \Bitrix\Main\Type\DateTime::createFromTimestamp(time() - 86400 * 7);
|
|||
|
|
$rs = $dcSec::getList(['filter' => ['<UF_DATE' => $date7], 'select' => ['ID']]);
|
|||
|
|
while ($el = $rs->fetch()) {
|
|||
|
|
$dcSec::delete($el['ID']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 2. Очистка аудита (храним 60 дней)
|
|||
|
|
$date60 = \Bitrix\Main\Type\DateTime::createFromTimestamp(time() - 86400 * 60);
|
|||
|
|
$rs = $dcAud::getList(['filter' => ['<UF_DATE' => $date60], 'select' => ['ID']]);
|
|||
|
|
while ($el = $rs->fetch()) {
|
|||
|
|
$dcAud::delete($el['ID']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 3. Очистка протухших кодов авторизации (храним 1 час для истории, потом удаляем)
|
|||
|
|
$date1h = \Bitrix\Main\Type\DateTime::createFromTimestamp(time() - 3600);
|
|||
|
|
$rs = $dcCodes::getList(['filter' => ['<UF_EXPIRES' => $date1h], 'select' => ['ID']]);
|
|||
|
|
while ($el = $rs->fetch()) {
|
|||
|
|
$dcCodes::delete($el['ID']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} catch (\Exception $e) {
|
|||
|
|
// Ошибки можно писать в системный лог php если нужно
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return "\Conmed\Authserver\Api::cleanLogsAgent();";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
PHP;
|
|||
|
|
|
|||
|
|
if (file_put_contents($apiFile, $apiCode)) {
|
|||
|
|
$log[] = "Файл lib/api.php обновлен (метод cleanLogsAgent добавлен).";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 2. РЕГИСТРАЦИЯ АГЕНТА В БИТРИКСЕ
|
|||
|
|
// Сначала удаляем старый, если он завис
|
|||
|
|
\CAgent::RemoveAgent("\Conmed\Authserver\Api::cleanLogsAgent();", "conmed.authserver");
|
|||
|
|
|
|||
|
|
// Добавляем новый
|
|||
|
|
// Параметры: Метод, Модуль, Периодичность (N=раз в интервал), Интервал (86400 = 24 часа)
|
|||
|
|
\CAgent::AddAgent(
|
|||
|
|
"\Conmed\Authserver\Api::cleanLogsAgent();",
|
|||
|
|
"conmed.authserver",
|
|||
|
|
"N",
|
|||
|
|
86400,
|
|||
|
|
"",
|
|||
|
|
"Y",
|
|||
|
|
\Bitrix\Main\Type\DateTime::createFromTimestamp(time() + 60) // Первый запуск через минуту
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
$log[] = "Агент очистки логов успешно зарегистрирован в системе.";
|
|||
|
|
|
|||
|
|
echo "<h2>Результат установки:</h2>";
|
|||
|
|
echo "<ul><li>" . implode("</li><li>", $log) . "</li></ul>";
|
|||
|
|
echo "<p>Проверить работу агента можно в админке: <b>Настройки -> Настройки продукта -> Агенты</b></p>";
|