Skip to content

Commit b48df9e

Browse files
Merge pull request #3411 from DefectDojo/release/1.10.3
Release: Merge release into master from: release/1.10.3
2 parents 43142b2 + 768b906 commit b48df9e

File tree

16 files changed

+247
-34
lines changed

16 files changed

+247
-34
lines changed

components/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "DefectDojo",
3-
"version": "1.10.2",
3+
"version": "1.10.3",
44
"dependencies": {
55
"JUMFlot": "jumjum123/JUMFlot#*",
66
"bootstrap": "^3.4.0",

docker-compose.override.integration_tests.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ services:
99
depends_on:
1010
- nginx
1111
- uwsgi
12-
entrypoint: ['/wait-for-it.sh', 'mysql:3306', '-t', '30', '--', '/entrypoint-integration-tests.sh']
12+
entrypoint: ['/wait-for-it.sh', 'mysql:3306', '-t', '30', '--', '/app/docker/entrypoint-integration-tests.sh']
13+
volumes:
14+
- '.:/app:z'
1315
environment:
1416
DD_BASE_URL: 'http://nginx:8080/'
1517
DD_ADMIN_USER: ${DD_ADMIN_USER:-admin}

dojo/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66

77
default_app_config = 'dojo.apps.DojoAppConfig'
88

9-
__version__ = '1.10.2'
9+
__version__ = '1.10.3'
1010
__url__ = 'https://github.com/DefectDojo/django-DefectDojo'
1111
__docs__ = 'http://defectdojo.readthedocs.io/'

dojo/filters.py

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
from dojo.models import Dojo_User, Product_Type, Finding, Product, Test_Type, \
1818
Endpoint, Development_Environment, Finding_Template, Report, Note_Type, \
1919
Engagement_Survey, Question, TextQuestion, ChoiceQuestion, Endpoint_Status, Engagement, \
20-
ENGAGEMENT_STATUS_CHOICES
20+
ENGAGEMENT_STATUS_CHOICES, Test
2121
from dojo.utils import get_system_setting
2222
from django.contrib.contenttypes.models import ContentType
23+
from crum import get_current_user
2324

2425
logger = logging.getLogger(__name__)
2526

@@ -1072,6 +1073,18 @@ def __init__(self, *args, **kwargs):
10721073
self.form.fields['severity'].choices = self.queryset.order_by(
10731074
'numerical_severity'
10741075
).values_list('severity', 'severity').distinct()
1076+
if get_current_user() is not None and not get_current_user().is_staff:
1077+
self.form.fields[
1078+
'test__engagement__product__prod_type'].queryset = Product_Type.objects.filter(
1079+
authorized_users__in=[get_current_user()])
1080+
self.form.fields[
1081+
'test'].queryset = Test.objects.filter(
1082+
Q(engagement__product__authorized_users__in=[get_current_user()]) |
1083+
Q(engagement__product__prod_type__authorized_users__in=[get_current_user()]))
1084+
self.form.fields[
1085+
'duplicate_finding'].queryset = Finding.objects.filter(
1086+
Q(test__engagement__product__authorized_users__in=[get_current_user()]) |
1087+
Q(test__engagement__product__prod_type__authorized_users__in=[get_current_user()]))
10751088

10761089
class Meta:
10771090
model = Finding
@@ -1117,6 +1130,18 @@ def __init__(self, *args, **kwargs):
11171130
self.form.fields['finding__severity'].choices = self.queryset.order_by(
11181131
'finding__numerical_severity'
11191132
).values_list('finding__severity', 'finding__severity').distinct()
1133+
if get_current_user() is not None and not get_current_user().is_staff:
1134+
self.form.fields[
1135+
'finding__test__engagement__product__prod_type'].queryset = Product_Type.objects.filter(
1136+
authorized_users__in=[get_current_user()])
1137+
self.form.fields[
1138+
'endpoint'].queryset = Endpoint.objects.filter(
1139+
Q(product__authorized_users__in=[get_current_user()]) |
1140+
Q(product__prod_type__authorized_users__in=[get_current_user()]))
1141+
self.form.fields[
1142+
'finding'].queryset = Finding.objects.filter(
1143+
Q(test__engagement__product__authorized_users__in=[get_current_user()]) |
1144+
Q(test__engagement__product__prod_type__authorized_users__in=[get_current_user()]))
11201145

11211146
class Meta:
11221147
model = Endpoint_Status
@@ -1227,8 +1252,10 @@ def __init__(self, *args, **kwargs):
12271252
self.user = kwargs.pop('user')
12281253
super(EndpointFilter, self).__init__(*args, **kwargs)
12291254
if self.user and not self.user.is_staff:
1230-
self.form.fields['product'].queryset = Product.objects.filter(
1231-
authorized_users__in=[self.user]).distinct().order_by('name')
1255+
self.form.fields[
1256+
'product'].queryset = Product.objects.filter(
1257+
Q(authorized_users__in=[self.user]) |
1258+
Q(prod_type__authorized_users__in=[self.user])).distinct().order_by('name')
12321259

12331260
class Meta:
12341261
model = Endpoint
@@ -1286,28 +1313,30 @@ class ReportAuthedFindingFilter(DojoFilter):
12861313
out_of_scope = ReportBooleanFilter()
12871314

12881315
def __init__(self, *args, **kwargs):
1289-
self.user = None
1290-
if 'user' in kwargs:
1291-
self.user = kwargs.pop('user')
12921316
super(ReportAuthedFindingFilter, self).__init__(*args, **kwargs)
1293-
if not self.user.is_staff:
1317+
if get_current_user() and not get_current_user().is_staff:
12941318
self.form.fields[
12951319
'test__engagement__product'].queryset = Product.objects.filter(
1296-
authorized_users__in=[self.user])
1320+
Q(authorized_users__in=[get_current_user()]) |
1321+
Q(prod_type__authorized_users__in=[get_current_user()]))
12971322
self.form.fields[
12981323
'test__engagement__product__prod_type'].queryset = Product_Type.objects.filter(
1299-
authorized_users__in=[self.user])
1324+
authorized_users__in=[get_current_user()])
1325+
self.form.fields[
1326+
'duplicate_finding'].queryset = Finding.objects.filter(
1327+
Q(test__engagement__product__authorized_users__in=[get_current_user()]) |
1328+
Q(test__engagement__product__prod_type__authorized_users__in=[get_current_user()]))
13001329

13011330
@property
13021331
def qs(self):
13031332
parent = super(ReportAuthedFindingFilter, self).qs
1304-
if self.user.is_staff:
1305-
return parent
1306-
else:
1333+
if get_current_user() and not get_current_user().is_staff:
13071334
return parent.filter(
1308-
Q(test__engagement__product__authorized_users__in=[self.user]) |
1309-
Q(test__engagement__product__prod_type__authorized_users__in=[self.user])
1335+
Q(test__engagement__product__authorized_users__in=[get_current_user()]) |
1336+
Q(test__engagement__product__prod_type__authorized_users__in=[get_current_user()])
13101337
)
1338+
else:
1339+
return parent
13111340

13121341
class Meta:
13131342
model = Finding

dojo/fixtures/product_type.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
[
22
{
33
"fields": {
4-
"name": "Research and Development"
4+
"name": "Research and Development",
5+
"critical_product": true
56
},
67
"model": "dojo.product_type",
78
"pk": 1

dojo/forms.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from dojo.user.helper import user_is_authorized
3333
from django.urls import reverse
3434
import logging
35+
from crum import get_current_user
3536

3637
logger = logging.getLogger(__name__)
3738

@@ -1631,6 +1632,12 @@ class ProductTypeCountsForm(forms.Form):
16311632
error_messages={
16321633
'required': '*'})
16331634

1635+
def __init__(self, *args, **kwargs):
1636+
super(ProductTypeCountsForm, self).__init__(*args, **kwargs)
1637+
if get_current_user() is not None and not get_current_user().is_staff:
1638+
self.fields['product_type'].queryset = Product_Type.objects.filter(
1639+
authorized_users__in=[get_current_user()])
1640+
16341641

16351642
class APIKeyForm(forms.ModelForm):
16361643
id = forms.IntegerField(required=True,

0 commit comments

Comments
 (0)