1- from urllib .parse import urljoin , urlparse
1+ from urllib .parse import urljoin
22
33from django .conf import settings
44from django .contrib import admin , messages
2323 NumericRangeFilter ,
2424)
2525from olympia .amo .templatetags .jinja_helpers import vite_asset
26- from olympia .amo .utils import is_safe_url
2726from olympia .api .models import APIKey
2827from olympia .constants .scanners import (
2928 ABORTING ,
3029 COMPLETED ,
31- FALSE_POSITIVE ,
32- INCONCLUSIVE ,
3330 NARC ,
3431 NEW ,
35- RESULT_STATES ,
3632 RUNNING ,
3733 SCANNERS ,
3834 SCHEDULED ,
39- TRUE_POSITIVE ,
40- UNKNOWN ,
4135 WEBHOOK ,
4236 WEBHOOK_EVENTS ,
4337 YARA ,
@@ -153,34 +147,6 @@ def queryset(self, request, queryset):
153147 return queryset .filter (scanner = self .value ())
154148
155149
156- class StateFilter (SimpleListFilter ):
157- title = 'result state'
158- parameter_name = 'state'
159-
160- def lookups (self , request , model_admin ):
161- return (('all' , 'All' ), * RESULT_STATES .items ())
162-
163- def choices (self , cl ):
164- for lookup , title in self .lookup_choices :
165- selected = (
166- lookup == UNKNOWN
167- if self .value () is None
168- else self .value () == str (lookup )
169- )
170- yield {
171- 'selected' : selected ,
172- 'query_string' : cl .get_query_string ({self .parameter_name : lookup }, []),
173- 'display' : title ,
174- }
175-
176- def queryset (self , request , queryset ):
177- if self .value () == 'all' :
178- return queryset
179- if self .value () is None :
180- return queryset .filter (state = UNKNOWN )
181- return queryset .filter (state = self .value ())
182-
183-
184150class ScannerRuleListFilter (admin .RelatedOnlyFieldListFilter ):
185151 include_empty_choice = False
186152
@@ -351,7 +317,6 @@ def get_unfiltered_changelist_params(self):
351317 might filter out some results by default."""
352318 return {
353319 WithVersionFilter .parameter_name : 'all' ,
354- StateFilter .parameter_name : 'all' ,
355320 }
356321
357322 def has_block_addons_permission (self , request ):
@@ -405,27 +370,6 @@ def has_add_permission(self, request):
405370 def has_change_permission (self , request , obj = None ):
406371 return False
407372
408- # Custom actions
409- def has_actions_permission (self , request ):
410- return acl .action_allowed_for (
411- request .user , amo .permissions .ADMIN_SCANNERS_RESULTS_EDIT
412- )
413-
414- def get_list_display (self , request ):
415- fields = super ().get_list_display (request )
416- return self ._excludes_fields (request = request , fields = fields )
417-
418- def get_fields (self , request , obj = None ):
419- fields = super ().get_fields (request , obj )
420- return self ._excludes_fields (request = request , fields = fields )
421-
422- def _excludes_fields (self , request , fields ):
423- to_exclude = []
424- if not self .has_actions_permission (request ):
425- to_exclude = ['result_actions' ]
426- fields = list (filter (lambda x : x not in to_exclude , fields ))
427- return fields
428-
429373 def formatted_addon (self , obj ):
430374 if obj .version :
431375 return format_html (
@@ -639,9 +583,7 @@ class ScannerResultAdmin(AbstractScannerResultAdminMixin, AMOModelAdmin):
639583 'guid' ,
640584 'formatted_scanner' ,
641585 'created' ,
642- 'state' ,
643586 formatted_matched_rules_with_files_and_data ,
644- 'result_actions' ,
645587 'formatted_results' ,
646588 )
647589 list_display = (
@@ -652,12 +594,10 @@ class ScannerResultAdmin(AbstractScannerResultAdminMixin, AMOModelAdmin):
652594 'formatted_scanner' ,
653595 'formatted_matched_rules' ,
654596 'formatted_created' ,
655- 'result_actions' ,
656597 )
657598 list_filter = (
658599 ScannerFilter ,
659600 MatchesFilter ,
660- StateFilter ,
661601 ('matched_rules' , ScannerRuleListFilter ),
662602 WithVersionFilter ,
663603 ExcludeMatchedRulesFilter ,
@@ -672,135 +612,6 @@ def formatted_scanner(self, obj):
672612
673613 formatted_scanner .short_description = 'Scanner'
674614
675- def safe_referer_redirect (self , request , default_url ):
676- referer = request .META .get ('HTTP_REFERER' )
677- allowed_hosts = (
678- settings .DOMAIN ,
679- urlparse (settings .EXTERNAL_SITE_URL ).netloc ,
680- )
681- if referer and is_safe_url (referer , request , allowed_hosts ):
682- return redirect (referer )
683- return redirect (default_url )
684-
685- def handle_true_positive (self , request , pk , * args , ** kwargs ):
686- can_use_actions = self .has_actions_permission (request )
687- if not can_use_actions or request .method != 'POST' :
688- raise Http404
689-
690- result = self .get_object (request , pk )
691- result .update (state = TRUE_POSITIVE )
692-
693- messages .add_message (
694- request ,
695- messages .INFO ,
696- f'Scanner result { pk } has been marked as true positive.' ,
697- )
698-
699- return self .safe_referer_redirect (
700- request , default_url = 'admin:scanners_scannerresult_changelist'
701- )
702-
703- def handle_inconclusive (self , request , pk , * args , ** kwargs ):
704- can_use_actions = self .has_actions_permission (request )
705- if not can_use_actions or request .method != 'POST' :
706- raise Http404
707-
708- result = self .get_object (request , pk )
709- result .update (state = INCONCLUSIVE )
710-
711- messages .add_message (
712- request ,
713- messages .INFO ,
714- f'Scanner result { pk } has been marked as inconclusive.' ,
715- )
716-
717- return self .safe_referer_redirect (
718- request , default_url = 'admin:scanners_scannerresult_changelist'
719- )
720-
721- def handle_false_positive (self , request , pk , * args , ** kwargs ):
722- can_use_actions = self .has_actions_permission (request )
723- if not can_use_actions or request .method != 'POST' :
724- raise Http404
725-
726- result = self .get_object (request , pk )
727- result .update (state = FALSE_POSITIVE )
728-
729- messages .add_message (
730- request ,
731- messages .INFO ,
732- f'Scanner result { pk } has been marked as false positive.' ,
733- )
734-
735- return self .safe_referer_redirect (
736- request , default_url = 'admin:scanners_scannerresult_changelist'
737- )
738-
739- def handle_revert (self , request , pk , * args , ** kwargs ):
740- is_admin = acl .action_allowed_for (
741- request .user , amo .permissions .ADMIN_SCANNERS_RESULTS_EDIT
742- )
743- if not is_admin or request .method != 'POST' :
744- raise Http404
745-
746- result = self .get_object (request , pk )
747- result .update (state = UNKNOWN )
748-
749- messages .add_message (
750- request ,
751- messages .INFO ,
752- f'Scanner result { pk } report has been reverted.' ,
753- )
754-
755- return self .safe_referer_redirect (
756- request , default_url = 'admin:scanners_scannerresult_changelist'
757- )
758-
759- def get_urls (self ):
760- urls = super ().get_urls ()
761- info = self .model ._meta .app_label , self .model ._meta .model_name
762- custom_urls = [
763- re_path (
764- r'^(?P<pk>.+)/report-false-positive/$' ,
765- self .admin_site .admin_view (self .handle_false_positive ),
766- name = '%s_%s_handlefalsepositive' % info ,
767- ),
768- re_path (
769- r'^(?P<pk>.+)/report-true-positive/$' ,
770- self .admin_site .admin_view (self .handle_true_positive ),
771- name = '%s_%s_handletruepositive' % info ,
772- ),
773- re_path (
774- r'^(?P<pk>.+)/report-inconclusive/$' ,
775- self .admin_site .admin_view (self .handle_inconclusive ),
776- name = '%s_%s_handleinconclusive' % info ,
777- ),
778- re_path (
779- r'^(?P<pk>.+)/revert-report/$' ,
780- self .admin_site .admin_view (self .handle_revert ),
781- name = '%s_%s_handlerevert' % info ,
782- ),
783- ]
784- return custom_urls + urls
785-
786- def result_actions (self , obj ):
787- info = self .model ._meta .app_label , self .model ._meta .model_name
788- return render_to_string (
789- 'admin/scannerresult_actions.html' ,
790- {
791- 'handlefalsepositive_urlname' : (
792- 'admin:%s_%s_handlefalsepositive' % info
793- ),
794- 'handletruepositive_urlname' : ('admin:%s_%s_handletruepositive' % info ),
795- 'handleinconclusive_urlname' : ('admin:%s_%s_handleinconclusive' % info ),
796- 'handlerevert_urlname' : 'admin:%s_%s_handlerevert' % info ,
797- 'obj' : obj ,
798- },
799- )
800-
801- result_actions .short_description = 'Actions'
802- result_actions .allow_tags = True
803-
804615 # Remove the "delete" button
805616 def has_delete_permission (self , request , obj = None ):
806617 return False
@@ -933,11 +744,6 @@ def download(self, obj):
933744 )
934745 return '-'
935746
936- def has_actions_permission (self , request ):
937- return acl .action_allowed_for (
938- request .user , amo .permissions .ADMIN_SCANNERS_QUERY_EDIT
939- )
940-
941747
942748@admin .register (ScannerRule )
943749class ScannerRuleAdmin (AbstractScannerRuleAdminMixin , AMOModelAdmin ):
0 commit comments