Skip to content

Commit 004488d

Browse files
authored
Merge pull request #2 from nkikkertyouwe/main
Added URL filter
2 parents 014b5b1 + 3bf2a33 commit 004488d

File tree

3 files changed

+69
-15
lines changed

3 files changed

+69
-15
lines changed

Model/Config.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ class Config
3535
*/
3636
protected const WEBAPI_LOGS_LOG_CLEAN_OLDER_THAN_HOURS = 'webapi_logs/log/clean_older_than_hours';
3737

38+
/**
39+
* @var string
40+
*/
41+
protected const WEBAPI_LOGS_LOG_FILTER_REQUEST_PATHS = 'webapi_logs/log/filter_request_paths';
42+
3843
/**
3944
* @var ScopeConfigInterface
4045
*/
@@ -102,4 +107,19 @@ public function getCleanOlderThanHours(): int
102107
ScopeInterface::SCOPE_WEBSITE
103108
);
104109
}
110+
111+
/**
112+
* @return array
113+
*/
114+
public function getFilterRequestPaths(): array
115+
{
116+
$value = $this->scopeConfig->getValue(
117+
self::WEBAPI_LOGS_LOG_FILTER_REQUEST_PATHS,
118+
ScopeInterface::SCOPE_WEBSITE
119+
);
120+
if ($value == null) {
121+
return [];
122+
}
123+
return preg_split('/\n|\r\n?/', $value);
124+
}
105125
}

Model/LogHandle.php

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,27 @@ public function before(
7878
string $requestBody,
7979
string $requestDateTime
8080
) {
81-
if ($this->config->isSecretMode()) {
82-
$requestorIp = $this->secretParser->parseIp();
83-
$requestHeaders = $this->secretParser->parseHeades($requestHeaders);
84-
$requestBody = $this->secretParser->parseBody($requestBody);
85-
}
81+
$filter = $this->config->getFilterRequestPaths();
82+
83+
// Only log this request if the path is not filtered.
84+
if (!$this->filterRequestPath($requestPath, $filter)) {
85+
if ($this->config->isSecretMode()) {
86+
$requestorIp = $this->secretParser->parseIp();
87+
$requestHeaders = $this->secretParser->parseHeades($requestHeaders);
88+
$requestBody = $this->secretParser->parseBody($requestBody);
89+
}
8690

87-
$log = $this->logFactory->create();
88-
$log->setData([
89-
'request_method' => $requestMethod,
90-
'requestor_ip' => $requestorIp,
91-
'request_url' => $requestPath,
92-
'request_headers' => $requestHeaders,
93-
'request_body' => $requestBody,
94-
'request_datetime' => $requestDateTime
95-
]);
96-
$this->lastLog = $log;
91+
$log = $this->logFactory->create();
92+
$log->setData([
93+
'request_method' => $requestMethod,
94+
'requestor_ip' => $requestorIp,
95+
'request_url' => $requestPath,
96+
'request_headers' => $requestHeaders,
97+
'request_body' => $requestBody,
98+
'request_datetime' => $requestDateTime
99+
]);
100+
$this->lastLog = $log;
101+
}
97102
}
98103

99104
/**
@@ -123,4 +128,26 @@ public function after(
123128
$this->logger->error(__('Cant complete webapi log save because of error: %1', $exception->getMessage()));
124129
}
125130
}
131+
132+
/**
133+
* Check if request path is among the filters.
134+
*
135+
* @param string $requestPath
136+
* @param array $filters
137+
*
138+
* @return bool
139+
*/
140+
private function filterRequestPath(
141+
string $requestPath,
142+
array $filters
143+
): bool {
144+
foreach ($filters as $filter) {
145+
if ($filter != '') {
146+
if (stripos($requestPath, $filter) !== false) {
147+
return true;
148+
}
149+
}
150+
}
151+
return false;
152+
}
126153
}

etc/adminhtml/system.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,13 @@
4444
</depends>
4545
<validate>validate-number validate-greater-than-zero</validate>
4646
</field>
47+
<field id="filter_request_paths" translate="label" type="textarea" sortOrder="50" showInDefault="1" showInWebsite="0" showInStore="0">
48+
<label>Filter request paths</label>
49+
<depends>
50+
<field id="webapi_logs/log/enabled">1</field>
51+
</depends>
52+
<comment><![CDATA[A list of request paths that should not be logged, separated by a simple new line]]></comment>
53+
</field>
4754
</group>
4855
</section>
4956
</system>

0 commit comments

Comments
 (0)