92 lines
3.9 KiB
PHP
Executable File
92 lines
3.9 KiB
PHP
Executable File
<?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>"; |