1- # # findings
2- from dojo .utils import Product_Tab
3- from dojo .forms import DeleteFindingGroupForm
1+ from dojo .utils import Product_Tab , add_breadcrumb , get_words_for_field , get_page_items
2+ from dojo .forms import DeleteFindingGroupForm , EditFindingGroupForm , FindingBulkUpdateForm
43from dojo .notifications .helper import create_notification
4+ from dojo .finding .views import prefetch_for_findings
5+ from dojo .filters import FindingFilter
56from django .contrib import messages
67from django .contrib .admin .utils import NestedObjects
78from django .db .utils import DEFAULT_DB_ALIAS
89from django .http .response import HttpResponse , HttpResponseRedirect , JsonResponse
910from django .shortcuts import get_object_or_404 , render
1011from django .urls .base import reverse
1112from django .views .decorators .http import require_POST
12- from dojo .models import Finding_Group
13+ from dojo .models import Finding_Group , Product , Engagement , Finding , GITHUB_PKey
1314import logging
1415import dojo .jira_link .helper as jira_helper
1516from dojo .authorization .authorization_decorators import user_is_authorized
1617from dojo .authorization .roles_permissions import Permissions
18+ from dojo .authorization .authorization import user_has_permission_or_403
1719
1820logger = logging .getLogger (__name__ )
1921
2022
2123@user_is_authorized (Finding_Group , Permissions .Finding_Group_View , 'fgid' )
2224def view_finding_group (request , fgid ):
23- logger .debug ('view finding group: %s' , fgid )
24- return HttpResponse ('Not implemented yet' )
25-
25+ finding_group = get_object_or_404 (Finding_Group , pk = fgid )
26+ findings = finding_group .findings .all ()
27+ edit_finding_group_form = EditFindingGroupForm (instance = finding_group )
28+
29+ show_product_column = True
30+ custom_breadcrumb = None
31+ product_tab = None
32+ jira_project = None
33+ github_config = None
34+
35+ if finding_group .test .engagement .product .id :
36+ pid = finding_group .test .engagement .product .id
37+ product = get_object_or_404 (Product , id = pid )
38+ user_has_permission_or_403 (request .user , product , Permissions .Product_View )
39+ product_tab = Product_Tab (product , title = "Findings" , tab = "findings" )
40+ jira_project = jira_helper .get_jira_project (product )
41+ github_config = GITHUB_PKey .objects .filter (product = pid ).first ()
42+ findings_filter = FindingFilter (request .GET , findings , user = request .user , pid = pid )
43+ elif finding_group .test .engagement .id :
44+ eid = finding_group .test .engagement .id
45+ engagement = get_object_or_404 (Engagement , id = eid )
46+ user_has_permission_or_403 (request .user , engagement , Permissions .Engagement_View )
47+ product_tab = Product_Tab (engagement .product , title = engagement .name , tab = "engagements" )
48+ jira_project = jira_helper .get_jira_project (engagement )
49+ github_config = GITHUB_PKey .objects .filter (product__engagement = eid ).first ()
50+ findings_filter = FindingFilter (request .GET , findings , user = request .user , eid = eid )
51+
52+ title_words = get_words_for_field (Finding , 'title' )
53+ component_words = get_words_for_field (Finding , 'component_name' )
54+
55+ paged_findings = get_page_items (request , findings_filter .qs , 25 )
56+ paged_findings .object_list = prefetch_for_findings (paged_findings .object_list , 'all' )
57+
58+ bulk_edit_form = FindingBulkUpdateForm (request .GET )
59+
60+ if github_config :
61+ github_config = github_config .git_conf_id
62+
63+ filter_name = finding_group .name
2664
27- @user_is_authorized (Finding_Group , Permissions .Finding_Group_Edit , 'fgid' )
28- def edit_finding_group (request , fgid ):
29- logger .debug ('edit finding group: %s' , fgid )
30- return HttpResponse ('Not implemented yet' )
65+ if request .method == 'POST' :
66+ edit_finding_group_form = EditFindingGroupForm (request .POST , instance = finding_group )
67+ if edit_finding_group_form .is_valid ():
68+ finding_group .name = edit_finding_group_form .cleaned_data .get ('name' , '' )
69+ finding_group .save ()
70+ return HttpResponseRedirect (reverse ('view_test' , args = (finding_group .test .id ,)))
71+
72+ add_breadcrumb (title = finding_group .name , top_level = not len (request .GET ), request = request )
73+ return render (request , 'dojo/view_finding_group.html' , {
74+ 'show_product_column' : show_product_column ,
75+ 'product_tab' : product_tab ,
76+ 'findings' : paged_findings ,
77+ 'filtered' : findings_filter ,
78+ 'title_words' : title_words ,
79+ 'component_words' : component_words ,
80+ 'custom_breadcrumb' : custom_breadcrumb ,
81+ 'filter_name' : filter_name ,
82+ 'jira_project' : jira_project ,
83+ 'bulk_edit_form' : bulk_edit_form ,
84+ 'edit_finding_group_form' : edit_finding_group_form ,
85+ })
3186
3287
3388@user_is_authorized (Finding_Group , Permissions .Finding_Group_Delete , 'fgid' )
3489@require_POST
3590def delete_finding_group (request , fgid ):
36- logger .debug ('delete finding group: %s' , fgid )
3791 finding_group = get_object_or_404 (Finding_Group , pk = fgid )
3892 form = DeleteFindingGroupForm (instance = finding_group )
3993
@@ -61,12 +115,12 @@ def delete_finding_group(request, fgid):
61115 rels = collector .nested ()
62116 product_tab = Product_Tab (finding_group .test .engagement .product , title = "Product" , tab = "settings" )
63117
64- return render (request , 'dojo/delete_finding_group.html' ,
65- { 'finding_group' : finding_group ,
66- 'form' : form ,
67- 'product_tab' : product_tab ,
68- 'rels' : rels ,
69- })
118+ return render (request , 'dojo/delete_finding_group.html' , {
119+ 'finding_group' : finding_group ,
120+ 'form' : form ,
121+ 'product_tab' : product_tab ,
122+ 'rels' : rels ,
123+ })
70124
71125
72126@user_is_authorized (Finding_Group , Permissions .Finding_Group_Edit , 'fgid' )
@@ -113,7 +167,7 @@ def push_to_jira(request, fgid):
113167 logger .info ('trying to push %d:%s to JIRA to create or update JIRA issue' , group .id , group .name )
114168 logger .debug ('pushing to jira from group.push_to-jira()' )
115169
116- # it may look like succes here, but the push_to_jira are swallowing exceptions
170+ # it may look like success here, but the push_to_jira are swallowing exceptions
117171 # but cant't change too much now without having a test suite, so leave as is for now with the addition warning message to check alerts for background errors.
118172 if jira_helper .push_to_jira (group , sync = True ):
119173 messages .add_message (
@@ -138,4 +192,3 @@ def push_to_jira(request, fgid):
138192 'Error pushing to JIRA' ,
139193 extra_tags = 'alert-danger' )
140194 return HttpResponse (status = 500 )
141- # return redirect_to_return_url_or_else(request, reverse('view_finding', args=(group.id,)))
0 commit comments