update request log
This commit is contained in:
@@ -29,6 +29,12 @@ class CleanRequestLogsCommand extends HyperfCommand
|
|||||||
public function handle(): void
|
public function handle(): void
|
||||||
{
|
{
|
||||||
$days = (int) $this->input->getOption('days');
|
$days = (int) $this->input->getOption('days');
|
||||||
|
|
||||||
|
if ($days < 1) {
|
||||||
|
$this->error('保留天数必须大于 0');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$cutoff = Carbon::now()->subDays($days);
|
$cutoff = Carbon::now()->subDays($days);
|
||||||
|
|
||||||
$deleted = ApiRequestLog::query()
|
$deleted = ApiRequestLog::query()
|
||||||
|
|||||||
@@ -86,7 +86,10 @@ class RequestLogMiddleware implements MiddlewareInterface
|
|||||||
*/
|
*/
|
||||||
public static function sanitizeBody(array $body): array
|
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) {
|
foreach ($body as $key => $value) {
|
||||||
if (in_array($key, $sensitive_keys, true)) {
|
if (in_array($key, $sensitive_keys, true)) {
|
||||||
|
|||||||
@@ -131,4 +131,43 @@ class RequestLogMiddlewareTest extends TestCase
|
|||||||
$ip = RequestLogMiddleware::getClientIp($request);
|
$ip = RequestLogMiddleware::getClientIp($request);
|
||||||
$this->assertSame('192.168.1.1', $ip);
|
$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']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user