-
-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Files rescan and pivot #121
base: old/develop
Are you sure you want to change the base?
Changes from 13 commits
ca76f8a
1e5f593
6fa86e9
adb796a
e0e7fc7
181f755
1d3fb9f
e8a0edb
a8017f6
90c641e
996abec
7a8c50f
dfc5dc8
e7a870d
a37911d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -20,6 +20,7 @@ | |||||||||||||||||||||||||||||||||||||||||||||
from rest_framework.response import Response | ||||||||||||||||||||||||||||||||||||||||||||||
from rest_framework.viewsets import ModelViewSet | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
from api_app.choices import ScanMode | ||||||||||||||||||||||||||||||||||||||||||||||
from api_app.websocket import JobConsumer | ||||||||||||||||||||||||||||||||||||||||||||||
from certego_saas.apps.organization.permissions import ( | ||||||||||||||||||||||||||||||||||||||||||||||
IsObjectOwnerOrSameOrgPermission as IsObjectUserOrSameOrgPermission, | ||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -452,7 +453,7 @@ def get_permissions(self): | |||||||||||||||||||||||||||||||||||||||||||||
- List of applicable permissions. | ||||||||||||||||||||||||||||||||||||||||||||||
""" | ||||||||||||||||||||||||||||||||||||||||||||||
permissions = super().get_permissions() | ||||||||||||||||||||||||||||||||||||||||||||||
if self.action in ["destroy", "kill"]: | ||||||||||||||||||||||||||||||||||||||||||||||
if self.action in ["destroy", "kill", "rescan"]: | ||||||||||||||||||||||||||||||||||||||||||||||
permissions.append(IsObjectUserOrSameOrgPermission()) | ||||||||||||||||||||||||||||||||||||||||||||||
return permissions | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -541,6 +542,36 @@ def retry(self, request, pk=None): | |||||||||||||||||||||||||||||||||||||||||||||
job.retry() | ||||||||||||||||||||||||||||||||||||||||||||||
return Response(status=status.HTTP_204_NO_CONTENT) | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
@action(detail=True, methods=["post"]) | ||||||||||||||||||||||||||||||||||||||||||||||
def rescan(self, request, pk=None): | ||||||||||||||||||||||||||||||||||||||||||||||
logger.info(f"rescan request for job: {pk}") | ||||||||||||||||||||||||||||||||||||||||||||||
existing_job: Job = self.get_object() | ||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+545
to
+548
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Suggestion: Add a permission check before allowing job rescan [Security, importance: 8]
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
# create a new job | ||||||||||||||||||||||||||||||||||||||||||||||
data = { | ||||||||||||||||||||||||||||||||||||||||||||||
"tlp": existing_job.tlp, | ||||||||||||||||||||||||||||||||||||||||||||||
"runtime_configuration": existing_job.runtime_configuration, | ||||||||||||||||||||||||||||||||||||||||||||||
"scan_mode": ScanMode.FORCE_NEW_ANALYSIS, | ||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||
if existing_job.playbook_requested: | ||||||||||||||||||||||||||||||||||||||||||||||
data["playbook_requested"] = existing_job.playbook_requested | ||||||||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||||||||
data["analyzers_requested"] = existing_job.analyzers_requested.all() | ||||||||||||||||||||||||||||||||||||||||||||||
data["connectors_requested"] = existing_job.connectors_requested.all() | ||||||||||||||||||||||||||||||||||||||||||||||
if existing_job.is_sample: | ||||||||||||||||||||||||||||||||||||||||||||||
data["file"] = existing_job.file | ||||||||||||||||||||||||||||||||||||||||||||||
data["file_name"] = existing_job.file_name | ||||||||||||||||||||||||||||||||||||||||||||||
job_serializer = FileJobSerializer(data=data, context={"request": request}) | ||||||||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||||||||
data["observable_classification"] = existing_job.observable_classification | ||||||||||||||||||||||||||||||||||||||||||||||
data["observable_name"] = existing_job.observable_name | ||||||||||||||||||||||||||||||||||||||||||||||
job_serializer = ObservableAnalysisSerializer( | ||||||||||||||||||||||||||||||||||||||||||||||
data=data, context={"request": request} | ||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||
job_serializer.is_valid(raise_exception=True) | ||||||||||||||||||||||||||||||||||||||||||||||
new_job = job_serializer.save(send_task=True) | ||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+570
to
+571
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Suggestion: Add error handling for job serializer operations [Error handling, importance: 7]
Suggested change
Comment on lines
+570
to
+571
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Suggestion: Add error handling for job serializer operations [Error handling, importance: 7]
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||
logger.info(f"rescan request for job: {pk} generated job: {new_job.pk}") | ||||||||||||||||||||||||||||||||||||||||||||||
return Response(data={"id": new_job.pk}, status=status.HTTP_202_ACCEPTED) | ||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||
@add_docs( | ||||||||||||||||||||||||||||||||||||||||||||||
description="Kill running job by closing celery tasks and marking as killed", | ||||||||||||||||||||||||||||||||||||||||||||||
request=None, | ||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# Ignore artifacts: | ||
.coverage |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggestion: Add a permission check before allowing job rescan [Security, importance: 8]