Skip to content

Commit 062d175

Browse files
committed
Refactored obfuscateBody() for performance to run single regex replacements on message body
1 parent c7b5e2e commit 062d175

File tree

2 files changed

+19
-15
lines changed

2 files changed

+19
-15
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
## [v1.2.3 (2025-06-16)](https://github.com/onlime/laravel-http-client-global-logger/compare/v1.2.2...v1.2.3)
66

77
- [Security] Body key obfuscation (`obfuscate.body_keys` config) is now also applied to response body, both for JSON or form-styled content.
8+
- Refactored `obfuscateBody()` for performance to run single regex replacements on message body.
89

910
## [v1.2.2 (2025-06-16)](https://github.com/onlime/laravel-http-client-global-logger/compare/v1.2.1...v1.2.2)
1011

src/Traits/ObfuscatesBody.php

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,24 @@ protected function obfuscateBody(string $message): string
1616
{
1717
$replacement = config('http-client-global-logger.obfuscate.replacement');
1818

19-
foreach (config('http-client-global-logger.obfuscate.body_keys') as $key) {
20-
$quoted = preg_quote($key, '/');
21-
// JSON-style: "key":"value"
22-
$message = preg_replace(
23-
'/(?<="'.$quoted.'":")[^"]*(?=")/mU',
24-
$replacement,
25-
$message
26-
);
27-
// form-style: key=value (until & or end)
28-
$message = preg_replace(
29-
'/(?<=\b'. $quoted .'=)[^&]*(?=&|$)/',
30-
$replacement,
31-
$message
32-
);
33-
}
19+
// Build regex pattern for keys to obfuscate
20+
$keysPattern = implode('|', array_map(
21+
fn (string $key) => preg_quote($key, '/'),
22+
config('http-client-global-logger.obfuscate.body_keys')
23+
));
24+
25+
// JSON-style: "(key1|key2)": "someValue"
26+
$message = preg_replace(
27+
'/(?<="(?:' . $keysPattern . ')":")[^"]*(?=")/mU',
28+
$replacement,
29+
$message
30+
);
31+
// form-style: key1=someValue& or key2=someValue$
32+
$message = preg_replace(
33+
'/(?<=\b(?:'. $keysPattern .')=)[^&]*(?=&|$)/',
34+
$replacement,
35+
$message
36+
);
3437

3538
return $message;
3639
}

0 commit comments

Comments
 (0)