Skip to content

Commit eb6120a

Browse files
authored
Refactor get_object_or_404 calls for Engagement and Engagement_Presets (#14375)
* refactor: optimize get_object_or_404 calls for Engagement and Engagement_Presets * refactor: optimize get_object_or_404 calls for Answered_Survey by filtering with engagement * refactor: optimize get_object_or_404 calls in update_benchmark and update_benchmark_summary functions
1 parent c342120 commit eb6120a

4 files changed

Lines changed: 21 additions & 21 deletions

File tree

dojo/benchmark/views.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ def update_benchmark(request, pid, _type):
4646
field = request.POST.get("field")
4747
value = request.POST.get("value")
4848
value = {"true": True, "false": False}.get(value, value)
49+
product = get_object_or_404(Product, id=pid)
50+
bench = get_object_or_404(Benchmark_Product.objects.filter(product=product), id=bench_id)
4951

5052
if field in {
5153
"enabled",
@@ -54,7 +56,6 @@ def update_benchmark(request, pid, _type):
5456
"get_notes",
5557
"delete_notes",
5658
}:
57-
bench = Benchmark_Product.objects.get(id=bench_id)
5859
if field == "enabled":
5960
bench.enabled = value
6061
elif field == "pass_fail":
@@ -90,21 +91,22 @@ def update_benchmark(request, pid, _type):
9091
@user_is_authorized(Product, Permissions.Benchmark_Edit, "pid")
9192
def update_benchmark_summary(request, pid, _type, summary):
9293
if request.method == "POST":
94+
product = get_object_or_404(Product, id=pid)
95+
benchmark_summary = get_object_or_404(Benchmark_Product_Summary.objects.filter(product=product), id=summary)
9396
field = request.POST.get("field")
9497
value = request.POST.get("value")
9598
value = {"true": True, "false": False}.get(value, value)
9699

97100
if field in {"publish", "desired_level"}:
98-
summary = Benchmark_Product_Summary.objects.get(id=summary)
99101
data = {}
100102
if field == "publish":
101-
summary.publish = value
103+
benchmark_summary.publish = value
102104
data = {"publish": value}
103105
elif field == "desired_level":
104-
summary.desired_level = value
105-
data = {"desired_level": value, "text": asvs_level(summary)}
106+
benchmark_summary.desired_level = value
107+
data = {"desired_level": value, "text": asvs_level(benchmark_summary)}
106108

107-
summary.save()
109+
benchmark_summary.save()
108110
return JsonResponse(data)
109111

110112
return redirect_to_return_url_or_else(
@@ -290,9 +292,9 @@ def benchmark_view(request, pid, benchmark_type, cat=None):
290292
@user_is_authorized(Product, Permissions.Benchmark_Delete, "pid")
291293
def delete(request, pid, benchmark_type):
292294
product = get_object_or_404(Product, id=pid)
293-
benchmark_product_summary = Benchmark_Product_Summary.objects.filter(
294-
product=product, benchmark_type=benchmark_type,
295-
).first()
295+
benchmark_product_summary = get_object_or_404(
296+
Benchmark_Product_Summary.objects.filter(product=product), benchmark_type=benchmark_type,
297+
)
296298
form = DeleteBenchmarkForm(instance=benchmark_product_summary)
297299

298300
if request.method == "POST":

dojo/engagement/views.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,7 +1377,7 @@ def edit_risk_acceptance(request, eid, raid):
13771377
# will only be called by view_risk_acceptance and edit_risk_acceptance
13781378
def view_edit_risk_acceptance(request, eid, raid, *, edit_mode=False):
13791379
risk_acceptance = get_object_or_404(Risk_Acceptance, pk=raid)
1380-
eng = get_object_or_404(Engagement, pk=eid)
1380+
eng = get_object_or_404(Engagement.objects.filter(risk_acceptance=risk_acceptance), pk=eid)
13811381

13821382
if edit_mode and not eng.product.enable_full_risk_acceptance:
13831383
raise PermissionDenied
@@ -1538,7 +1538,7 @@ def view_edit_risk_acceptance(request, eid, raid, *, edit_mode=False):
15381538
def expire_risk_acceptance(request, eid, raid):
15391539
risk_acceptance = get_object_or_404(prefetch_for_expiration(Risk_Acceptance.objects.all()), pk=raid)
15401540
# Validate the engagement ID exists before moving forward
1541-
get_object_or_404(Engagement, pk=eid)
1541+
get_object_or_404(Engagement.objects.filter(risk_acceptance=risk_acceptance), pk=eid)
15421542

15431543
ra_helper.expire_now(risk_acceptance)
15441544

@@ -1548,8 +1548,7 @@ def expire_risk_acceptance(request, eid, raid):
15481548
@user_is_authorized(Engagement, Permissions.Risk_Acceptance, "eid")
15491549
def reinstate_risk_acceptance(request, eid, raid):
15501550
risk_acceptance = get_object_or_404(prefetch_for_expiration(Risk_Acceptance.objects.all()), pk=raid)
1551-
eng = get_object_or_404(Engagement, pk=eid)
1552-
1551+
eng = get_object_or_404(Engagement.objects.filter(risk_acceptance=risk_acceptance), pk=eid)
15531552
if not eng.product.enable_full_risk_acceptance:
15541553
raise PermissionDenied
15551554

@@ -1561,8 +1560,7 @@ def reinstate_risk_acceptance(request, eid, raid):
15611560
@user_is_authorized(Engagement, Permissions.Risk_Acceptance, "eid")
15621561
def delete_risk_acceptance(request, eid, raid):
15631562
risk_acceptance = get_object_or_404(Risk_Acceptance, pk=raid)
1564-
eng = get_object_or_404(Engagement, pk=eid)
1565-
1563+
eng = get_object_or_404(Engagement.objects.filter(risk_acceptance=risk_acceptance), pk=eid)
15661564
ra_helper.delete(eng, risk_acceptance)
15671565

15681566
messages.add_message(

dojo/product/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,7 +1597,7 @@ def engagement_presets(request, pid):
15971597
@user_is_authorized(Product, Permissions.Product_Edit, "pid")
15981598
def edit_engagement_presets(request, pid, eid):
15991599
prod = get_object_or_404(Product, id=pid)
1600-
preset = get_object_or_404(Engagement_Presets, id=eid)
1600+
preset = get_object_or_404(Engagement_Presets.objects.filter(product=prod), id=eid)
16011601

16021602
product_tab = Product_Tab(prod, title=_("Edit Engagement Preset"), tab="settings")
16031603

@@ -1646,7 +1646,7 @@ def add_engagement_presets(request, pid):
16461646
@user_is_authorized(Product, Permissions.Product_Edit, "pid")
16471647
def delete_engagement_presets(request, pid, eid):
16481648
prod = get_object_or_404(Product, id=pid)
1649-
preset = get_object_or_404(Engagement_Presets, id=eid)
1649+
preset = get_object_or_404(Engagement_Presets.objects.filter(product=prod), id=eid)
16501650
form = DeleteEngagementPresetsForm(instance=preset)
16511651

16521652
if request.method == "POST":

dojo/survey/views.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
@user_is_authorized(Engagement, Permissions.Engagement_Edit, "eid")
5858
def delete_engagement_survey(request, eid, sid):
5959
engagement = get_object_or_404(Engagement, id=eid)
60-
survey = get_object_or_404(Answered_Survey, id=sid)
60+
survey = get_object_or_404(Answered_Survey.objects.filter(engagement=engagement), id=sid)
6161
questions = get_answered_questions(survey=survey, read_only=True)
6262
form = Delete_Questionnaire_Form(instance=survey)
6363

@@ -96,8 +96,8 @@ def delete_engagement_survey(request, eid, sid):
9696

9797

9898
def answer_questionnaire(request, eid, sid):
99-
survey = get_object_or_404(Answered_Survey, id=sid)
10099
engagement = get_object_or_404(Engagement, id=eid)
100+
survey = get_object_or_404(Answered_Survey.objects.filter(engagement=engagement), id=sid)
101101
system_settings = System_Settings.objects.all()[0]
102102

103103
if not system_settings.allow_anonymous_survey_repsonse:
@@ -162,8 +162,8 @@ def answer_questionnaire(request, eid, sid):
162162

163163
@user_is_authorized(Engagement, Permissions.Engagement_Edit, "eid")
164164
def assign_questionnaire(request, eid, sid):
165-
survey = get_object_or_404(Answered_Survey, id=sid)
166165
engagement = get_object_or_404(Engagement, id=eid)
166+
survey = get_object_or_404(Answered_Survey.objects.filter(engagement=engagement), id=sid)
167167

168168
form = AssignUserForm(instance=survey)
169169
if request.method == "POST":
@@ -183,8 +183,8 @@ def assign_questionnaire(request, eid, sid):
183183

184184
@user_is_authorized(Engagement, Permissions.Engagement_View, "eid")
185185
def view_questionnaire(request, eid, sid):
186-
survey = get_object_or_404(Answered_Survey, id=sid)
187186
engagement = get_object_or_404(Engagement, id=eid)
187+
survey = get_object_or_404(Answered_Survey.objects.filter(engagement=engagement), id=sid)
188188
questions = get_answered_questions(survey=survey, read_only=True)
189189

190190
add_breadcrumb(

0 commit comments

Comments
 (0)