Skip to content

Commit 42c5f85

Browse files
Merge branch 'dev' into fix--helm-chart
2 parents 4b66191 + 7082611 commit 42c5f85

99 files changed

Lines changed: 5276 additions & 712 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ services:
120120
source: ./docker/extra_settings
121121
target: /app/docker/extra_settings
122122
postgres:
123-
image: postgres:18.0-alpine@sha256:9636ae7feacd8d630303eede7f95cd0f472d514e7864422c6aa8ea07b2171df8
123+
image: postgres:18.0-alpine@sha256:70b32afe0c274b4d93098fd724fcdaab3aba47270a4f1e63cbf9cc69d7bf1be4
124124
environment:
125125
POSTGRES_DB: ${DD_DATABASE_NAME:-defectdojo}
126126
POSTGRES_USER: ${DD_DATABASE_USER:-defectdojo}

docs/content/en/connecting_your_tools/parsers/file/snyk_issue_api.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22
title: "Snyk Issue API"
33
toc_hide: true
44
---
5-
The Snyk Issue API parser supports importing vulnerability data from the Snyk Issue API in JSON format. Currently only parsing issues of type `code` is supported. Samples of ther issue types are welcome.
5+
The Snyk Issue API parser supports importing vulnerability data from the Snyk Issue API in JSON format.
6+
7+
Currently parsing issues of type `code` (SAST) and `package_vulnerability` (SCA) are supported.
8+
9+
Samples of ther issue types are welcome.
610

711
For more information about the Snyk Issue API, refer to the [official Snyk API documentation](https://docs.snyk.io/snyk-api/reference/issues#get-orgs-org_id-issues).
812

docs/package-lock.json

Lines changed: 11 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
},
2424
"devDependencies": {
2525
"prettier": "3.6.2",
26-
"vite": "7.1.7"
26+
"vite": "7.1.9"
2727
},
2828
"engines": {
2929
"node": "22.20.0"

dojo/api_v2/serializers.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2104,8 +2104,14 @@ class CommonImportScanSerializer(serializers.Serializer):
21042104
required=False,
21052105
validators=[ImporterFileExtensionValidator()],
21062106
)
2107-
product_type_name = serializers.CharField(required=False)
2108-
product_name = serializers.CharField(required=False)
2107+
product_type_name = serializers.CharField(
2108+
required=False,
2109+
help_text=_("Also referred to as 'Organization' name."),
2110+
)
2111+
product_name = serializers.CharField(
2112+
required=False,
2113+
help_text=_("Also referred to as 'Asset' name."),
2114+
)
21092115
engagement_name = serializers.CharField(required=False)
21102116
engagement_end_date = serializers.DateField(
21112117
required=False,
@@ -2160,8 +2166,14 @@ class CommonImportScanSerializer(serializers.Serializer):
21602166
# confused
21612167
test_id = serializers.IntegerField(read_only=True)
21622168
engagement_id = serializers.IntegerField(read_only=True)
2163-
product_id = serializers.IntegerField(read_only=True)
2164-
product_type_id = serializers.IntegerField(read_only=True)
2169+
product_id = serializers.IntegerField(
2170+
read_only=True,
2171+
help_text=_("Also referred to as 'Asset' ID."),
2172+
)
2173+
product_type_id = serializers.IntegerField(
2174+
read_only=True,
2175+
help_text=_("Also referred to as 'Organization' ID."),
2176+
)
21652177
statistics = ImportStatisticsSerializer(read_only=True, required=False)
21662178
pro = serializers.ListField(read_only=True, required=False)
21672179
apply_tags_to_findings = serializers.BooleanField(

dojo/api_v2/views.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
get_authorized_jira_issues,
8686
get_authorized_jira_projects,
8787
)
88+
from dojo.labels import get_labels
8889
from dojo.models import (
8990
Announcement,
9091
Answer,
@@ -179,6 +180,9 @@
179180
logger = logging.getLogger(__name__)
180181

181182

183+
labels = get_labels()
184+
185+
182186
def schema_with_prefetch() -> dict:
183187
return {
184188
"list": extend_schema(
@@ -2725,7 +2729,7 @@ def report_generate(request, obj, options):
27252729
if type(obj).__name__ == "Product_Type":
27262730
product_type = obj
27272731

2728-
report_name = "Product Type Report: " + str(product_type)
2732+
report_name = labels.ORG_REPORT_WITH_NAME_TITLE % {"name": str(product_type)}
27292733

27302734
findings = report_finding_filter_class(
27312735
request.GET,
@@ -2754,7 +2758,7 @@ def report_generate(request, obj, options):
27542758
elif type(obj).__name__ == "Product":
27552759
product = obj
27562760

2757-
report_name = "Product Report: " + str(product)
2761+
report_name = labels.ASSET_REPORT_WITH_NAME_TITLE % {"name": str(product)}
27582762

27592763
findings = report_finding_filter_class(
27602764
request.GET,

dojo/asset/__init__.py

Whitespace-only changes.

dojo/asset/api/__init__.py

Whitespace-only changes.

dojo/asset/api/filters.py

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
from django_filters import BooleanFilter, CharFilter, NumberFilter, OrderingFilter
2+
from django_filters.rest_framework import FilterSet
3+
from drf_spectacular.types import OpenApiTypes
4+
from drf_spectacular.utils import extend_schema_field
5+
6+
from dojo.filters import (
7+
CharFieldFilterANDExpression,
8+
CharFieldInFilter,
9+
DateRangeFilter,
10+
DojoFilter,
11+
NumberInFilter,
12+
ProductSLAFilter,
13+
custom_filter,
14+
)
15+
from dojo.labels import get_labels
16+
from dojo.models import (
17+
Product_API_Scan_Configuration,
18+
Product_Group,
19+
Product_Member,
20+
)
21+
22+
labels = get_labels()
23+
24+
25+
class AssetAPIScanConfigurationFilterSet(FilterSet):
26+
asset = NumberFilter(field_name="product")
27+
28+
class Meta:
29+
model = Product_API_Scan_Configuration
30+
fields = ("id", "tool_configuration", "service_key_1", "service_key_2", "service_key_3")
31+
32+
33+
class ApiAssetFilter(DojoFilter):
34+
# BooleanFilter
35+
external_audience = BooleanFilter(field_name="external_audience")
36+
internet_accessible = BooleanFilter(field_name="internet_accessible")
37+
# CharFilter
38+
name = CharFilter(lookup_expr="icontains")
39+
name_exact = CharFilter(field_name="name", lookup_expr="iexact")
40+
description = CharFilter(lookup_expr="icontains")
41+
business_criticality = CharFilter(method=custom_filter, field_name="business_criticality")
42+
platform = CharFilter(method=custom_filter, field_name="platform")
43+
lifecycle = CharFilter(method=custom_filter, field_name="lifecycle")
44+
origin = CharFilter(method=custom_filter, field_name="origin")
45+
# NumberInFilter
46+
id = NumberInFilter(field_name="id", lookup_expr="in")
47+
asset_manager = NumberInFilter(field_name="product_manager", lookup_expr="in")
48+
technical_contact = NumberInFilter(field_name="technical_contact", lookup_expr="in")
49+
team_manager = NumberInFilter(field_name="team_manager", lookup_expr="in")
50+
prod_type = NumberInFilter(field_name="prod_type", lookup_expr="in")
51+
tid = NumberInFilter(field_name="tid", lookup_expr="in")
52+
prod_numeric_grade = NumberInFilter(field_name="prod_numeric_grade", lookup_expr="in")
53+
user_records = NumberInFilter(field_name="user_records", lookup_expr="in")
54+
regulations = NumberInFilter(field_name="regulations", lookup_expr="in")
55+
56+
tag = CharFilter(field_name="tags__name", lookup_expr="icontains", label="Tag name contains")
57+
tags = CharFieldInFilter(
58+
field_name="tags__name",
59+
lookup_expr="in",
60+
help_text="Comma separated list of exact tags (uses OR for multiple values)")
61+
tags__and = CharFieldFilterANDExpression(
62+
field_name="tags__name",
63+
help_text="Comma separated list of exact tags to match with an AND expression")
64+
not_tag = CharFilter(field_name="tags__name", lookup_expr="icontains", help_text="Not Tag name contains", exclude="True")
65+
not_tags = CharFieldInFilter(field_name="tags__name", lookup_expr="in",
66+
help_text=labels.ASSET_FILTERS_CSV_TAGS_NOT_HELP, exclude="True")
67+
has_tags = BooleanFilter(field_name="tags", lookup_expr="isnull", exclude=True, label="Has tags")
68+
outside_of_sla = extend_schema_field(OpenApiTypes.NUMBER)(ProductSLAFilter())
69+
70+
# DateRangeFilter
71+
created = DateRangeFilter()
72+
updated = DateRangeFilter()
73+
# NumberFilter
74+
revenue = NumberFilter()
75+
76+
o = OrderingFilter(
77+
# tuple-mapping retains order
78+
fields=(
79+
("id", "id"),
80+
("tid", "tid"),
81+
("name", "name"),
82+
("created", "created"),
83+
("prod_numeric_grade", "prod_numeric_grade"),
84+
("business_criticality", "business_criticality"),
85+
("platform", "platform"),
86+
("lifecycle", "lifecycle"),
87+
("origin", "origin"),
88+
("revenue", "revenue"),
89+
("external_audience", "external_audience"),
90+
("internet_accessible", "internet_accessible"),
91+
("product_manager", "asset_manager"),
92+
("product_manager__first_name", "asset_manager__first_name"),
93+
("product_manager__last_name", "asset_manager__last_name"),
94+
("technical_contact", "technical_contact"),
95+
("technical_contact__first_name", "technical_contact__first_name"),
96+
("technical_contact__last_name", "technical_contact__last_name"),
97+
("team_manager", "team_manager"),
98+
("team_manager__first_name", "team_manager__first_name"),
99+
("team_manager__last_name", "team_manager__last_name"),
100+
("prod_type", "prod_type"),
101+
("prod_type__name", "prod_type__name"),
102+
("updated", "updated"),
103+
("user_records", "user_records"),
104+
),
105+
)
106+
107+
108+
class AssetMemberFilterSet(FilterSet):
109+
asset_id = NumberFilter(field_name="product_id")
110+
111+
class Meta:
112+
model = Product_Member
113+
fields = ("id", "user_id")
114+
115+
116+
class AssetGroupFilterSet(FilterSet):
117+
asset_id = NumberFilter(field_name="product_id")
118+
119+
class Meta:
120+
model = Product_Group
121+
fields = ("id", "group_id")

0 commit comments

Comments
 (0)