1: <?php
2: namespace Worldline\Connect\Sdk\Communication;
3:
4: use Worldline\Connect\Sdk\Logging\BodyObfuscator;
5: use Worldline\Connect\Sdk\Logging\HeaderObfuscator;
6:
7: /**
8: * Class HttpObfuscator
9: *
10: * @package Worldline\Connect\Sdk\Communication
11: */
12: class HttpObfuscator
13: {
14: const HTTP_VERSION = 'HTTP/1.1';
15:
16: /**
17: * @var HeaderObfuscator
18: */
19: protected HeaderObfuscator $headerObfuscator;
20:
21: /**
22: * @var BodyObfuscator
23: */
24: protected BodyObfuscator $bodyObfuscator;
25:
26: public function __construct()
27: {
28: $this->headerObfuscator = new HeaderObfuscator();
29: $this->bodyObfuscator = new BodyObfuscator();
30: }
31:
32: /**
33: * @param BodyObfuscator $bodyObfuscator
34: *
35: * @return void
36: */
37: public function setBodyObfuscator(BodyObfuscator $bodyObfuscator): void
38: {
39: $this->bodyObfuscator = $bodyObfuscator;
40: }
41:
42: /**
43: * @param HeaderObfuscator $headerObfuscator
44: *
45: * @return void
46: */
47: public function setHeaderObfuscator(HeaderObfuscator $headerObfuscator): void
48: {
49: $this->headerObfuscator = $headerObfuscator;
50: }
51:
52: /**
53: * @param string $requestMethod
54: * @param string $relativeRequestUri
55: * @param array $requestHeaders
56: * @param string $requestBody
57: *
58: * @return string
59: */
60: public function getRawObfuscatedRequest(
61: string $requestMethod,
62: string $relativeRequestUri,
63: array $requestHeaders,
64: string $requestBody = ''
65: ): string {
66: $rawObfuscatedRequest = $requestMethod . ' ' . $relativeRequestUri . ' ' . static::HTTP_VERSION;
67: if ($requestHeaders) {
68: $rawObfuscatedRequest .= PHP_EOL . implode(
69: PHP_EOL,
70: HttpHeaderHelper::generateRawHeaders($this->headerObfuscator->obfuscateHeaders($requestHeaders))
71: );
72: }
73: if (strlen($requestBody) > 0) {
74: $rawObfuscatedRequest .= PHP_EOL . PHP_EOL . $this->bodyObfuscator->obfuscateBody(
75: array_key_exists('Content-Type', $requestHeaders) ? $requestHeaders['Content-Type'] : '',
76: $requestBody
77: );
78: }
79: return $rawObfuscatedRequest;
80: }
81:
82: /**
83: * @param ConnectionResponse $response
84: *
85: * @return string
86: */
87: public function getRawObfuscatedResponse(ConnectionResponse $response): string
88: {
89: $rawObfuscatedResponse = '';
90: $responseHeaders = $response->getHeaders();
91: if ($responseHeaders) {
92: $rawObfuscatedResponse .= implode(
93: PHP_EOL,
94: HttpHeaderHelper::generateRawHeaders($this->headerObfuscator->obfuscateHeaders($responseHeaders))
95: );
96: }
97: $responseBody = $response->getBody();
98: if (strlen($responseBody) > 0) {
99: $rawObfuscatedResponse .= PHP_EOL . PHP_EOL . $this->bodyObfuscator->obfuscateBody(
100: $response->getHeaderValue('Content-Type'),
101: $responseBody
102: );
103: }
104: return $rawObfuscatedResponse;
105: }
106: }
107: