Skip to content

Commit 5ccc204

Browse files
author
Aaron Weaver
authored
Merge pull request DefectDojo#198 from aaronweaver/master
Jira Fixes and Label Additions
2 parents b6c54a2 + 68f9f3d commit 5ccc204

File tree

5 files changed

+43
-22
lines changed

5 files changed

+43
-22
lines changed

dojo/finding/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,8 @@ def edit_finding(request, fid):
310310
new_finding.tags = t
311311
new_finding.save()
312312
if 'jiraform-push_to_jira' in request.POST:
313-
jform = JIRAFindingForm(request.POST, prefix='jiraform', enabled=enabled)
314-
if jform.is_valid():
313+
jform = JIRAFindingForm(request.POST, prefix='jiraform', enabled=enabled)
314+
if jform.is_valid():
315315
try:
316316
jissue = JIRA_Issue.objects.get(finding=new_finding)
317317
update_issue_task.delay(new_finding, old_status, jform.cleaned_data.get('push_to_jira'))

dojo/jira_link/views.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,9 @@ def new_jira(request):
9595
jira_server = jform.cleaned_data.get('url').rstrip('/')
9696
jira = JIRA(server=jform.cleaned_data.get('url').rstrip('/'),
9797
basic_auth=(jform.cleaned_data.get('username'), jform.cleaned_data.get('password')))
98-
jform.url = jira_server
99-
new_j = jform.save()
98+
new_j = jform.save(commit=False)
99+
new_j.url = jira_server
100+
new_j.save()
100101
messages.add_message(request,
101102
messages.SUCCESS,
102103

@@ -124,11 +125,12 @@ def edit_jira(request, jid):
124125
jira_server = jform.cleaned_data.get('url').rstrip('/')
125126
jira = JIRA(server=jira_server,
126127
basic_auth=(jform.cleaned_data.get('username'), jform.cleaned_data.get('password')))
127-
jform.url = jira_server
128-
new_j = jform.save()
128+
129+
new_j = jform.save(commit=False)
130+
new_j.url = jira_server
131+
new_j.save()
129132
messages.add_message(request,
130133
messages.SUCCESS,
131-
132134
'JIRA Configuration Successfully Created.',
133135
extra_tags='alert-success')
134136
return HttpResponseRedirect(reverse('jira', ))

dojo/product/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ def edit_product(request, pid):
327327
if settings.ENABLE_JIRA:
328328
if jira_enabled:
329329
jform = JIRAPKeyForm(request.POST, instance=jira_inst)
330+
jform.save()
330331
else:
331332
jform = JIRAPKeyForm(request.POST)
332333
new_conf = jform.save(commit=False)

dojo/test/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ def add_findings(request, tid):
177177
test = Test.objects.get(id=tid)
178178
form_error = False
179179
enabled = False
180+
jform = None
180181
form = AddFindingForm(initial={'date': datetime.now(tz=localtz).date()})
181182
if hasattr(settings, 'ENABLE_JIRA'):
182183
if settings.ENABLE_JIRA:

dojo/utils.py

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ def get_punchcard_data(findings, weeks_between, start_date):
231231
days[day_offset[finding.date.weekday()]] += 1
232232
if days[day_offset[finding.date.weekday()]] > highest_count:
233233
highest_count = days[day_offset[finding.date.weekday()]]
234-
except:
234+
except:
235235
if new_date < finding.date <= end_date:
236236
# [0,0,(20*.02)]
237237
# [week, day, weight]
@@ -387,7 +387,7 @@ def get_period_counts(active_findings, findings, findings_closed, accepted_findi
387387
elif finding.severity == 'Low':
388388
low_count += 1
389389
pass
390-
390+
391391
total = crit_count + high_count + med_count + low_count
392392
opened_in_period.append(
393393
[(tcalendar.timegm(new_date.timetuple()) * 1000), new_date, crit_count, high_count, med_count, low_count,
@@ -420,7 +420,7 @@ def get_period_counts(active_findings, findings, findings_closed, accepted_findi
420420
med_count += 1
421421
elif finding.severity == 'Low':
422422
low_count += 1
423-
except:
423+
except:
424424
if finding.date <= end_date:
425425
if finding.severity == 'Critical':
426426
crit_count += 1
@@ -430,12 +430,12 @@ def get_period_counts(active_findings, findings, findings_closed, accepted_findi
430430
med_count += 1
431431
elif finding.severity == 'Low':
432432
low_count += 1
433-
pass
433+
pass
434434
total = crit_count + high_count + med_count + low_count
435435
active_in_period.append(
436436
[(tcalendar.timegm(new_date.timetuple()) * 1000), new_date, crit_count, high_count, med_count, low_count,
437437
total])
438-
438+
439439
return {'opened_per_period': opened_in_period,
440440
'accepted_per_period': accepted_in_period,
441441
'active_per_period': active_in_period}
@@ -733,6 +733,17 @@ def handle_uploaded_threat(f, eng):
733733
eng.tmodel_path = settings.MEDIA_ROOT + '/threat/%s%s' % (eng.id, extension)
734734
eng.save()
735735

736+
def add_labels(find, issue):
737+
#Update Label with Security
738+
issue.fields.labels.append(u'security')
739+
#Update the label with the product name (underscore)
740+
prod_name = find.test.engagement.product.name.replace(" ", "_")
741+
issue.fields.labels.append(prod_name)
742+
issue.update(fields={"labels": issue.fields.labels})
743+
744+
def jira_long_description(find_description, find_id):
745+
return find_description + "\n\n*Dojo ID:* " + str(find_id)
746+
736747
def add_issue(find, push_to_jira):
737748
eng = Engagement.objects.get(test=find.test)
738749
prod = Product.objects.get(engagement= eng)
@@ -741,13 +752,17 @@ def add_issue(find, push_to_jira):
741752
if push_to_jira:
742753
if 'Active' in find.status() and 'Verified' in find.status():
743754
jira = JIRA(server=jira_conf.url, basic_auth=(jira_conf.username, jira_conf.password))
744-
new_issue = jira.create_issue(project=jpkey.project_key, summary=find.title, description=find.long_desc(), issuetype={'name': 'Bug'}, priority={'name': jira_conf.get_priority(find.severity)})
755+
new_issue = jira.create_issue(project=jpkey.project_key, summary=find.title, description=jira_long_description(find.long_desc(), find.id), issuetype={'name': 'Bug'}, priority={'name': jira_conf.get_priority(find.severity)})
745756
j_issue = JIRA_Issue(jira_id=new_issue.id, jira_key=new_issue, finding = find)
746757
j_issue.save()
747-
if jpkey.enable_engagement_epic_mapping:
748-
epic = JIRA_Issue.objects.get(engagement=eng)
749-
issue_list = [j_issue.jira_id,]
750-
jira.add_issues_to_epic(epic_id=epic.jira_id, issue_keys=[str(j_issue.jira_id)], ignore_epics=True)
758+
issue = jira.issue(new_issue.id)
759+
#Add labels (security & product)
760+
add_labels(find, new_issue)
761+
762+
#if jpkey.enable_engagement_epic_mapping:
763+
# epic = JIRA_Issue.objects.get(engagement=eng)
764+
# issue_list = [j_issue.jira_id,]
765+
# jira.add_issues_to_epic(epic_id=epic.jira_id, issue_keys=[str(j_issue.jira_id)], ignore_epics=True)
751766

752767
def update_issue( find, old_status, push_to_jira):
753768
prod = Product.objects.get(engagement=Engagement.objects.get(test=find.test))
@@ -757,16 +772,20 @@ def update_issue( find, old_status, push_to_jira):
757772
j_issue = JIRA_Issue.objects.get(finding=find)
758773
jira = JIRA(server=jira_conf.url, basic_auth=(jira_conf.username, jira_conf.password))
759774
issue = jira.issue(j_issue.jira_id)
760-
issue.update(summary=find.title, description=find.long_desc(), priority={'name': jira_conf.get_priority(find.severity)})
775+
issue.update(summary=find.title, description=jira_long_description(find.long_desc(), find.id), priority={'name': jira_conf.get_priority(find.severity)})
776+
777+
#Add labels(security & product)
778+
add_labels(find, issue)
779+
761780
req_url =jira_conf.url+'/rest/api/latest/issue/'+ j_issue.jira_id+'/transitions'
762781
if 'Inactive' in find.status() or 'Mitigated' in find.status() or 'False Positive' in find.status() or 'Out of Scope' in find.status() or 'Duplicate' in find.status():
763782
if 'Active' in old_status:
764783
json_data = {'transition':{'id':jira_conf.close_status_key}}
765784
r = requests.post(url=req_url, auth=HTTPBasicAuth(jira_conf.username, jira_conf.password), json=json_data)
766785
elif 'Active' in find.status() and 'Verified' in find.status():
767786
if 'Inactive' in old_status:
768-
json_data = {'transition':{'id':jira_conf.open_status_key}}
769-
r = requests.post(url=req_url, auth=HTTPBasicAuth(jira_conf.username, jira_conf.password), json=json_data)
787+
json_data = {'transition':{'id':jira_conf.open_status_key}}
788+
r = requests.post(url=req_url, auth=HTTPBasicAuth(jira_conf.username, jira_conf.password), json=json_data)
770789

771790
def close_epic(eng, push_to_jira):
772791
engagement = eng
@@ -835,5 +854,3 @@ def send_review_email(request, user, finding, users, new_note):
835854
recipients,
836855
fail_silently=False)
837856
pass
838-
839-

0 commit comments

Comments
 (0)