update request log

This commit is contained in:
2026-03-17 14:17:06 +08:00
parent ccea43d8d6
commit 8f69eb0349
3 changed files with 49 additions and 1 deletions
@@ -29,6 +29,12 @@ class CleanRequestLogsCommand extends HyperfCommand
public function handle(): void
{
$days = (int) $this->input->getOption('days');
if ($days < 1) {
$this->error('保留天数必须大于 0');
return;
}
$cutoff = Carbon::now()->subDays($days);
$deleted = ApiRequestLog::query()
@@ -86,7 +86,10 @@ class RequestLogMiddleware implements MiddlewareInterface
*/
public static function sanitizeBody(array $body): array
{
$sensitive_keys = ['password', 'old_password', 'new_password', 'password_confirmation'];
$sensitive_keys = [
'password', 'old_password', 'new_password', 'password_confirmation',
'token', 'secret', 'api_key', 'access_token', 'refresh_token',
];
foreach ($body as $key => $value) {
if (in_array($key, $sensitive_keys, true)) {
@@ -131,4 +131,43 @@ class RequestLogMiddlewareTest extends TestCase
$ip = RequestLogMiddleware::getClientIp($request);
$this->assertSame('192.168.1.1', $ip);
}
public function test_get_client_ip_returns_null_when_no_ip_available(): void
{
$request = new ServerRequest('GET', '/test');
$ip = RequestLogMiddleware::getClientIp($request);
$this->assertNull($ip);
}
public function test_extract_response_code_handles_code_as_string(): void
{
$response = new Response(200, ['Content-Type' => 'application/json'], json_encode([
'code' => '200',
'message' => 'success',
]));
$code = RequestLogMiddleware::extractResponseCode($response);
$this->assertSame(200, $code);
}
public function test_sanitize_body_handles_deeply_nested_structures(): void
{
$body = [
'level1' => [
'level2' => [
'level3' => [
'password' => 'deep_secret',
'token' => 'deep_token',
'name' => 'keep_this',
],
],
],
];
$result = RequestLogMiddleware::sanitizeBody($body);
$this->assertSame('***', $result['level1']['level2']['level3']['password']);
$this->assertSame('***', $result['level1']['level2']['level3']['token']);
$this->assertSame('keep_this', $result['level1']['level2']['level3']['name']);
}
}