Skip to content

Commit ea40687

Browse files
authored
Add: URI Mask config para Hyperf 3.0.x (#24)
WIP
1 parent 8e896fe commit ea40687

File tree

3 files changed

+52
-15
lines changed

3 files changed

+52
-15
lines changed

src/Aspect/HttpClientMetricAspect.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public function process(ProceedingJoinPoint $proceedingJoinPoint)
4444
$method = strtoupper($arguments['keys']['method'] ?? '');
4545
$uri = $arguments['keys']['uri'] ?? '';
4646
$host = $base_uri === null ? (parse_url($uri, PHP_URL_HOST) ?? '') : $base_uri->getHost();
47-
47+
$uriMask = $this->getUriMask($instance);
4848
$uri = $this->shouldIgnoreUri($instance)
4949
? '<IGNORED>'
50-
: SupportUri::sanitize(parse_url($uri, PHP_URL_PATH) ?? '/');
50+
: SupportUri::sanitize(parse_url($uri, PHP_URL_PATH) ?? '/', $uriMask);
5151

5252
$labels = [
5353
'uri' => $uri,
@@ -99,4 +99,15 @@ private function onRejected(Timer $timer, array $labels): callable
9999
return Create::rejectionFor($exception);
100100
};
101101
}
102+
103+
public function getUriMask(Client $instance): array
104+
{
105+
$uriMask = $instance->getConfig('uri_mask');
106+
107+
if (is_array($uriMask) === false) {
108+
return [];
109+
}
110+
111+
return $uriMask;
112+
}
102113
}

src/Support/Uri.php

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,31 @@
1313

1414
final class Uri
1515
{
16-
public static function sanitize(string $uri): string
16+
public static function sanitize(string $uri, array $uriMask = []): string
1717
{
1818
return preg_replace(
19-
[
20-
'/\/(?<=\/)([A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12})(?=\/)?/i',
21-
'/\/(?<=\/)([A-Z]{3}-?\d[0-9A-Z]\d{2})(?=\/)?/i',
22-
'/\/(?<=\/)[0-9A-F]{16,24}(?=\/)?/i',
23-
'/\/(?<=\/)\d+(?=\/)?/',
24-
],
25-
[
26-
'/<UUID>',
27-
'/<LICENSE-PLATE>',
28-
'/<OID>',
29-
'/<NUMBER>',
30-
],
19+
array_merge(
20+
array_keys($uriMask),
21+
[
22+
'/\/(?<=\/)[ED]\d{8}\d{12}[0-9a-zA-Z]{11}(?=\/)?/',
23+
'/\/(?<=\/)[a-f0-9]{40}(?=\/)?/i',
24+
'/\/(?<=\/)([A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12})(?=\/)?/i',
25+
'/\/(?<=\/)([A-Z]{3}-?\d[0-9A-Z]\d{2})(?=\/)?/i',
26+
'/\/(?<=\/)[0-9A-F]{16,24}(?=\/)?/i',
27+
'/\/(?<=\/)\d+(?=\/)?/',
28+
],
29+
),
30+
array_merge(
31+
array_values($uriMask),
32+
[
33+
'/<E2E-ID>',
34+
'/<SHA1>',
35+
'/<UUID>',
36+
'/<LICENSE-PLATE>',
37+
'/<OID>',
38+
'/<NUMBER>',
39+
],
40+
),
3141
'/' . ltrim($uri, '/'),
3242
);
3343
}

tests/Cases/UriTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,20 @@ public function testAddsInitialSlash(): void
9090
self::assertSame('/v1/test', Uri::sanitize('v1/test'));
9191
self::assertSame('/v1/test/', Uri::sanitize('v1/test/'));
9292
}
93+
94+
public function testWithMaskParams(): void
95+
{
96+
$uriMask = [
97+
'/\/[a-f0-9]{64}/i' => '/<SHA256-ID>',
98+
];
99+
100+
self::assertSame('/v1/test', Uri::sanitize('/v1/test', $uriMask));
101+
self::assertSame('/v2/test/<SHA256-ID>', Uri::sanitize('/v2/test/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7', $uriMask));
102+
self::assertSame('/v3/test/<SHA256-ID>/bar', Uri::sanitize('/v3/test/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/bar', $uriMask));
103+
self::assertSame('/v4/test/<SHA256-ID>/bar/<SHA256-ID>/', Uri::sanitize('/v4/test/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/bar/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/', $uriMask));
104+
self::assertSame('/v5/test/<SHA256-ID>/<SHA256-ID>', Uri::sanitize('/v5/test/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7', $uriMask));
105+
self::assertSame('/v6/test/<SHA256-ID>/<SHA256-ID>/', Uri::sanitize('/v6/test/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/', $uriMask));
106+
self::assertSame('/v7/test/<SHA256-ID>/<SHA256-ID>/<SHA256-ID>', Uri::sanitize('/v7/test/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7', $uriMask));
107+
self::assertSame('/v8/test/<SHA256-ID>/<SHA256-ID>/<SHA256-ID>/', Uri::sanitize('/v8/test/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/54cf575c04fdef4667094b6fc4fab8014dd3fa53576b644ec399452c43b5e7f7/', $uriMask));
108+
}
93109
}

0 commit comments

Comments
 (0)