|
26 | 26 | import org.opensearch.cluster.service.ClusterService;
|
27 | 27 | import org.opensearch.common.collect.Tuple;
|
28 | 28 | import org.opensearch.common.xcontent.XContentType;
|
| 29 | +import org.opensearch.core.common.bytes.BytesArray; |
29 | 30 | import org.opensearch.core.common.bytes.BytesReference;
|
| 31 | +import org.opensearch.core.xcontent.NamedXContentRegistry; |
| 32 | +import org.opensearch.http.HttpChannel; |
| 33 | +import org.opensearch.http.HttpRequest; |
| 34 | +import org.opensearch.rest.RestRequest; |
30 | 35 | import org.opensearch.security.auditlog.AuditLog;
|
31 | 36 | import org.opensearch.security.auditlog.config.AuditConfig;
|
| 37 | +import org.opensearch.security.filter.SecurityRequest; |
| 38 | +import org.opensearch.security.filter.SecurityRequestFactory; |
32 | 39 | import org.opensearch.security.securityconf.impl.CType;
|
33 | 40 |
|
34 | 41 | import static org.junit.Assert.assertEquals;
|
@@ -155,4 +162,41 @@ public void testBCryptHashIsRedacted() {
|
155 | 162 | message.addSecurityConfigTupleToRequestBody(new Tuple<>(XContentType.JSON, ref), internalUsersDocId);
|
156 | 163 | assertEquals("Hash in tuple is __HASH__", message.getAsMap().get(AuditMessage.REQUEST_BODY));
|
157 | 164 | }
|
| 165 | + |
| 166 | + @Test |
| 167 | + public void testRequestBodyLoggingWithInvalidSourceOrContentTypeParam() { |
| 168 | + when(auditConfig.getFilter().shouldLogRequestBody()).thenReturn(true); |
| 169 | + |
| 170 | + HttpRequest httpRequest = mock(HttpRequest.class); |
| 171 | + |
| 172 | + // No content or Source paramater |
| 173 | + when(httpRequest.uri()).thenReturn(""); |
| 174 | + when(httpRequest.content()).thenReturn(new BytesArray(new byte[0])); |
| 175 | + |
| 176 | + RestRequest restRequest = RestRequest.request(mock(NamedXContentRegistry.class), httpRequest, mock(HttpChannel.class)); |
| 177 | + SecurityRequest request = SecurityRequestFactory.from(restRequest); |
| 178 | + |
| 179 | + message.addRestRequestInfo(request, auditConfig.getFilter()); |
| 180 | + assertNull(message.getAsMap().get(AuditMessage.REQUEST_BODY)); |
| 181 | + |
| 182 | + // No source parameter, content present but Invalid content-type header |
| 183 | + when(httpRequest.uri()).thenReturn(""); |
| 184 | + when(httpRequest.content()).thenReturn(new BytesArray(new byte[1])); |
| 185 | + |
| 186 | + restRequest = RestRequest.request(mock(NamedXContentRegistry.class), httpRequest, mock(HttpChannel.class)); |
| 187 | + request = SecurityRequestFactory.from(restRequest); |
| 188 | + |
| 189 | + message.addRestRequestInfo(request, auditConfig.getFilter()); |
| 190 | + assertEquals("ERROR: Unable to generate request body", message.getAsMap().get(AuditMessage.REQUEST_BODY)); |
| 191 | + |
| 192 | + // No content, source parameter present but Invalid source-content-type parameter |
| 193 | + when(httpRequest.uri()).thenReturn("/aaaa?source=request_body"); |
| 194 | + when(httpRequest.content()).thenReturn(new BytesArray(new byte[0])); |
| 195 | + |
| 196 | + restRequest = RestRequest.request(mock(NamedXContentRegistry.class), httpRequest, mock(HttpChannel.class)); |
| 197 | + request = SecurityRequestFactory.from(restRequest); |
| 198 | + |
| 199 | + message.addRestRequestInfo(request, auditConfig.getFilter()); |
| 200 | + assertEquals("ERROR: Unable to generate request body", message.getAsMap().get(AuditMessage.REQUEST_BODY)); |
| 201 | + } |
158 | 202 | }
|
0 commit comments