Files
conmed-authserver/local/modules/conmed.authserver/.reinstall_agent.php

92 lines
3.9 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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>";