包含:登录失败锁定、90天密码有效期、30分钟会话超时、 强制改密、登录审计日志、屏幕水印、企业背景图、 备案信息固定底部、favicon、JS空集合保护、 会话过期体验优化(403 JSON)、display_errors 关闭、 固定 key 根治 Integrity check failed 等全部改动 注意:config.inc.php/.htaccess/.user.ini 含敏感信息, 通过 .gitignore 排除,勿推送到公开仓库。
65 lines
1.5 KiB
PHP
65 lines
1.5 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
namespace MRBS\Errors\Handler;
|
|
|
|
use Monolog\Formatter\FormatterInterface;
|
|
use Monolog\Handler\MailHandler;
|
|
use Monolog\Logger;
|
|
use MRBS\Errors\Formatter\BrowserFormatter;
|
|
use MRBS\Errors\Formatter\ErrorLogFormatter;
|
|
use MRBS\Errors\Formatter\MailFormatter;
|
|
use PHPMailer\PHPMailer\PHPMailer;
|
|
|
|
class PHPMailerHandler extends MailHandler
|
|
{
|
|
private $mailer;
|
|
|
|
|
|
public function __construct(PHPMailer $mailer, $level = Logger::ERROR, bool $bubble = true)
|
|
{
|
|
parent::__construct($level, $bubble);
|
|
$this->mailer = $mailer;
|
|
}
|
|
|
|
|
|
protected function send(string $content, array $records): void
|
|
{
|
|
$mailer = $this->buildMessage($content, $records);
|
|
$mailer->send();
|
|
}
|
|
|
|
|
|
private function buildMessage(string $content, array $records): PHPMailer
|
|
{
|
|
$mailer = clone $this->mailer;
|
|
|
|
$record = $records[0];
|
|
if (isset($record['context']['details']))
|
|
{
|
|
$mailer->Subject = $record['context']['details'];
|
|
}
|
|
else
|
|
{
|
|
$mailer->Subject = $record['channel'] . '.' . $record['level_name'];
|
|
if (isset($record['extra']['file']))
|
|
{
|
|
$mailer->Subject .= ' in ' . $record['extra']['file'];
|
|
}
|
|
if (isset($record['extra']['line']))
|
|
{
|
|
$mailer->Subject .= ' at line ' . $record['extra']['line'];
|
|
}
|
|
}
|
|
$mailer->Body = $content;
|
|
|
|
return $mailer;
|
|
}
|
|
|
|
|
|
protected function getDefaultFormatter(): FormatterInterface
|
|
{
|
|
return new ErrorLogFormatter();
|
|
}
|
|
|
|
}
|