Skip to content

Commit 4e62baf

Browse files
authored
Update API endpoint for file upload (DefectDojo#6712)
1 parent 946b930 commit 4e62baf

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

dojo/api_v2/serializers.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,21 @@ class EngagementToFilesSerializer(serializers.Serializer):
762762
engagement_id = serializers.PrimaryKeyRelatedField(queryset=Engagement.objects.all(), many=False, allow_null=True)
763763
files = FileSerializer(many=True)
764764

765+
def to_representation(self, data):
766+
engagement = data.get('engagement_id')
767+
files = data.get('files')
768+
new_files = []
769+
for file in files:
770+
new_files.append({
771+
'id': file.id,
772+
'file': '{site_url}/{file_access_url}'.format(
773+
site_url=settings.SITE_URL,
774+
file_access_url=file.get_accessible_url(engagement, engagement.id)),
775+
'title': file.title
776+
})
777+
new_data = {'engagement_id': engagement.id, 'files': new_files}
778+
return new_data
779+
765780

766781
class AppAnalysisSerializer(TaggitSerializer, serializers.ModelSerializer):
767782
tags = TagListSerializerField(required=False)
@@ -1058,6 +1073,21 @@ class TestToFilesSerializer(serializers.Serializer):
10581073
test_id = serializers.PrimaryKeyRelatedField(queryset=Test.objects.all(), many=False, allow_null=True)
10591074
files = FileSerializer(many=True)
10601075

1076+
def to_representation(self, data):
1077+
test = data.get('test_id')
1078+
files = data.get('files')
1079+
new_files = []
1080+
for file in files:
1081+
new_files.append({
1082+
'id': file.id,
1083+
'file': '{site_url}/{file_access_url}'.format(
1084+
site_url=settings.SITE_URL,
1085+
file_access_url=file.get_accessible_url(test, test.id)),
1086+
'title': file.title
1087+
})
1088+
new_data = {'test_id': test.id, 'files': new_files}
1089+
return new_data
1090+
10611091

10621092
class TestImportFindingActionSerializer(serializers.ModelSerializer):
10631093
class Meta:
@@ -1896,6 +1926,21 @@ class FindingToFilesSerializer(serializers.Serializer):
18961926
finding_id = serializers.PrimaryKeyRelatedField(queryset=Finding.objects.all(), many=False, allow_null=True)
18971927
files = FileSerializer(many=True)
18981928

1929+
def to_representation(self, data):
1930+
finding = data.get('finding_id')
1931+
files = data.get('files')
1932+
new_files = []
1933+
for file in files:
1934+
new_files.append({
1935+
'id': file.id,
1936+
'file': '{site_url}/{file_access_url}'.format(
1937+
site_url=settings.SITE_URL,
1938+
file_access_url=file.get_accessible_url(finding, finding.id)),
1939+
'title': file.title
1940+
})
1941+
new_data = {'finding_id': finding.id, 'files': new_files}
1942+
return new_data
1943+
18991944

19001945
class ReportGenerateOptionSerializer(serializers.Serializer):
19011946
include_finding_notes = serializers.BooleanField(default=False)

dojo/models.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,20 @@ def copy(self):
608608

609609
return copy
610610

611+
def get_accessible_url(self, obj, obj_id):
612+
if isinstance(obj, Engagement):
613+
obj_type = 'Engagement'
614+
elif isinstance(obj, Test):
615+
obj_type = 'Test'
616+
elif isinstance(obj, Finding):
617+
obj_type = 'Finding'
618+
619+
return 'access_url/{file_id}/{obj_id}/{obj_type}'.format(
620+
file_id=self.id,
621+
obj_id=obj_id,
622+
obj_type=obj_type
623+
)
624+
611625

612626
class Product_Type(models.Model):
613627
"""Product types represent the top level model, these can be business unit divisions, different offices or locations, development teams, or any other logical way of distinguishing “types” of products.

0 commit comments

Comments
 (0)