Skip to content

Commit d0b3aa0

Browse files
committed
feature: quick verify finding
1 parent 9df71ad commit d0b3aa0

4 files changed

Lines changed: 93 additions & 0 deletions

File tree

dojo/finding/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@
142142
name="choose_finding_template_options"),
143143
re_path(r"^finding/(?P<fid>\d+)/(?P<tid>\d+)/apply_template_to_finding$",
144144
views.apply_template_to_finding, name="apply_template_to_finding"),
145+
re_path(r"^finding/(?P<fid>\d+)/verify$", views.verify_finding,
146+
name="verify_finding"),
145147
re_path(r"^finding/(?P<fid>\d+)/close$", views.close_finding,
146148
name="close_finding"),
147149
re_path(r"^finding/(?P<fid>\d+)/defect_review$",

dojo/finding/views.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1223,6 +1223,72 @@ def close_finding(request, fid):
12231223
)
12241224

12251225

1226+
@user_is_authorized(Finding, Permissions.Finding_Edit, "fid")
1227+
def verify_finding(request, fid):
1228+
finding = get_object_or_404(Finding, id=fid)
1229+
1230+
if finding.verified:
1231+
messages.add_message(
1232+
request,
1233+
messages.INFO,
1234+
"Finding already verified.",
1235+
extra_tags="alert-info",
1236+
)
1237+
return redirect_to_return_url_or_else(
1238+
request,
1239+
reverse("view_finding", args=(finding.id,)),
1240+
)
1241+
1242+
form = NoteForm(data=request.POST or None)
1243+
form.fields["entry"].required = False
1244+
form.fields["entry"].label = _("Comment (optional)")
1245+
1246+
if request.method == "POST" and form.is_valid():
1247+
entry = form.cleaned_data.get("entry", "").strip()
1248+
if entry:
1249+
note = form.save(commit=False)
1250+
note.author = request.user
1251+
note.save()
1252+
finding.notes.add(note)
1253+
1254+
now_time = timezone.now()
1255+
finding.verified = True
1256+
finding.last_reviewed = now_time
1257+
finding.last_reviewed_by = request.user
1258+
finding.last_status_update = now_time
1259+
finding.save(push_to_jira=False)
1260+
1261+
messages.add_message(
1262+
request,
1263+
messages.SUCCESS,
1264+
"Finding verified.",
1265+
extra_tags="alert-success",
1266+
)
1267+
1268+
return redirect_to_return_url_or_else(
1269+
request,
1270+
reverse("view_finding", args=(finding.id,)),
1271+
)
1272+
1273+
product_tab = Product_Tab(
1274+
finding.test.engagement.product,
1275+
title="Verify Finding",
1276+
tab="findings",
1277+
)
1278+
1279+
return render(
1280+
request,
1281+
"dojo/verify_finding.html",
1282+
{
1283+
"finding": finding,
1284+
"product_tab": product_tab,
1285+
"user": request.user,
1286+
"form": form,
1287+
"active_tab": "findings",
1288+
},
1289+
)
1290+
1291+
12261292
@user_is_authorized(Finding, Permissions.Finding_Edit, "fid")
12271293
def defect_finding_review(request, fid):
12281294
finding = get_object_or_404(Finding, id=fid)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{% extends "base.html" %}
2+
{% load i18n %}
3+
4+
{% block content %}
5+
{{ block.super }}
6+
<h3>{% trans "Verify Finding" %}</h3>
7+
<h4>{{ finding.title }}</h4>
8+
<p>{% trans "Use this form to mark the finding as verified. Adding a comment is optional." %}</p>
9+
<form class="form-horizontal" action="{% url 'verify_finding' finding.id %}" method="post">
10+
{% csrf_token %}
11+
{% include "dojo/form_fields.html" with form=form %}
12+
<div class="form-group">
13+
<div class="col-sm-offset-2 col-sm-10">
14+
<input class="btn btn-primary" type="submit" value="{% trans "Verify Finding" %}" aria-label="{% trans "Verify Finding" %}"/>
15+
</div>
16+
</div>
17+
</form>
18+
{% endblock %}

dojo/templates/dojo/view_finding.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ <h3 class="pull-left finding-title">
126126
</a>
127127
</li>
128128
{% else %}
129+
{% if not finding.verified %}
130+
<li role="presentation">
131+
<a href="{% url 'verify_finding' finding.id %}">
132+
<i class="fa-solid fa-circle-check"></i> Verify Finding
133+
</a>
134+
</li>
135+
{% endif %}
129136
<li role="presentation">
130137
<a href="{% url 'close_finding' finding.id %}">
131138
<i class="fa-solid fa-fire-extinguisher"></i> Close Finding

0 commit comments

Comments
 (0)