Skip to content

Commit 422edcd

Browse files
drosettipranjalg1331
authored andcommitted
Fix all pivot (intelowlproject#2695)
* accept only connectors * fix all pivot run with one connector
1 parent e91acf4 commit 422edcd

File tree

4 files changed

+50
-4
lines changed

4 files changed

+50
-4
lines changed

api_app/pivots_manager/queryset.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ def valid(
2020
analyzers.values_list("pk", flat=True)
2121
)
2222
)
23-
| Q(related_analyzer_configs=None)
2423
)
2524
if connectors.exists():
2625
qs = qs.many_to_many_to_array("related_connector_configs").filter(
@@ -29,7 +28,6 @@ def valid(
2928
connectors.values_list("pk", flat=True)
3029
)
3130
)
32-
| Q(related_connector_configs=None)
3331
)
3432
return qs.distinct()
3533

api_app/serializers/job.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,13 @@ class Meta:
124124
slug_field="name",
125125
queryset=ConnectorConfig.objects.all(),
126126
many=True,
127-
default=ConnectorConfig.objects.none(),
127+
default=[],
128128
)
129129
analyzers_requested = rfs.SlugRelatedField(
130130
slug_field="name",
131131
queryset=AnalyzerConfig.objects.all(),
132132
many=True,
133-
default=AnalyzerConfig.objects.none(),
133+
default=[],
134134
)
135135
playbook_requested = rfs.SlugRelatedField(
136136
slug_field="name",
@@ -927,6 +927,7 @@ def set_analyzers_to_execute(
927927
observable_classification: str,
928928
**kwargs,
929929
) -> List[AnalyzerConfig]:
930+
logger.debug(f"{analyzers_requested=} {type(analyzers_requested)=}")
930931
analyzers_to_execute = analyzers_requested.copy()
931932

932933
partially_filtered_analyzers_qs = AnalyzerConfig.objects.filter(

api_app/views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,10 +324,12 @@ def analyze_multiple_observables(request):
324324
- 200: JSON response with the job details for each initiated analysis.
325325
"""
326326
logger.info(f"received analyze_multiple_observables from user {request.user}")
327+
logger.debug(f"{request.data=}")
327328
oas = ObservableAnalysisSerializer(
328329
data=request.data, many=True, context={"request": request}
329330
)
330331
oas.is_valid(raise_exception=True)
332+
logger.debug(f"{oas.validated_data=}")
331333
parent_job = oas.validated_data[0].get("parent_job", None)
332334
jobs = oas.save(send_task=True, parent=parent_job)
333335
jrs = JobResponseSerializer(jobs, many=True).data

tests/api_app/test_api.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
from api_app import models
1414
from api_app.analyzers_manager.models import AnalyzerConfig
15+
from api_app.connectors_manager.models import ConnectorConfig
1516
from api_app.playbooks_manager.models import PlaybookConfig
1617

1718
from .. import CustomViewSetTestCase
@@ -288,6 +289,50 @@ def test_analyze_multiple_observables(self):
288289
msg=msg,
289290
)
290291

292+
def test_observable_no_analyzers_only_connector(self):
293+
models.PluginConfig.objects.create(
294+
value="test subject",
295+
parameter=models.Parameter.objects.get(
296+
name="subject",
297+
python_module=models.PythonModule.objects.get(
298+
module="email_sender.EmailSender"
299+
),
300+
),
301+
connector_config=ConnectorConfig.objects.get(name="EmailSender"),
302+
)
303+
models.PluginConfig.objects.create(
304+
value="test body",
305+
parameter=models.Parameter.objects.get(
306+
name="body",
307+
python_module=models.PythonModule.objects.get(
308+
module="email_sender.EmailSender"
309+
),
310+
),
311+
connector_config=ConnectorConfig.objects.get(name="EmailSender"),
312+
)
313+
314+
data = {
315+
"observables": [
316+
["ip", "8.8.8.8"],
317+
],
318+
"connectors_requested": ["EmailSender"],
319+
"tlp": "CLEAR",
320+
}
321+
response = self.client.post(
322+
"/api/analyze_multiple_observables", data, format="json"
323+
)
324+
contents = response.json()
325+
msg = (response.status_code, contents)
326+
self.assertEqual(response.status_code, 200, msg=msg)
327+
328+
content = contents["results"][0]
329+
330+
job_id = int(content["job_id"])
331+
job = models.Job.objects.get(pk=job_id)
332+
self.assertEqual(data["observables"][0][1], job.observable_name, msg=msg)
333+
self.assertEqual(job.analyzers_requested.count(), 0)
334+
self.assertEqual(job.pivots_to_execute.count(), 0)
335+
291336
def test_download_sample_200(self):
292337
self.assertEqual(models.Job.objects.count(), 0)
293338
filename = "file.exe"

0 commit comments

Comments
 (0)