Skip to content

Commit 462ba48

Browse files
committed
Remove ScannerResult.state and related code
1 parent 10d382c commit 462ba48

7 files changed

Lines changed: 21 additions & 695 deletions

File tree

src/olympia/constants/scanners.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,6 @@
4141
DISABLE_AND_BLOCK: ('Force-disable and block'),
4242
}
4343

44-
UNKNOWN = None
45-
TRUE_POSITIVE = 1
46-
FALSE_POSITIVE = 2
47-
INCONCLUSIVE = 3
48-
49-
RESULT_STATES = {
50-
UNKNOWN: 'Unknown',
51-
TRUE_POSITIVE: 'True positive',
52-
FALSE_POSITIVE: 'False positive',
53-
INCONCLUSIVE: 'Inconclusive',
54-
}
55-
5644
NEW = 1
5745
RUNNING = 2
5846
ABORTED = 3
@@ -69,9 +57,6 @@
6957
SCHEDULED: 'Scheduled',
7058
}
7159

72-
LABEL_BAD = 'bad'
73-
LABEL_GOOD = 'good'
74-
7560
# Scanner service accounts group
7661
SCANNER_SERVICE_ACCOUNTS_GROUP = 'Service accounts for scanners'
7762

src/olympia/scanners/admin.py

Lines changed: 1 addition & 195 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from urllib.parse import urljoin, urlparse
1+
from urllib.parse import urljoin
22

33
from django.conf import settings
44
from django.contrib import admin, messages
@@ -23,21 +23,15 @@
2323
NumericRangeFilter,
2424
)
2525
from olympia.amo.templatetags.jinja_helpers import vite_asset
26-
from olympia.amo.utils import is_safe_url
2726
from olympia.api.models import APIKey
2827
from 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-
184150
class 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)
943749
class ScannerRuleAdmin(AbstractScannerRuleAdminMixin, AMOModelAdmin):
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from django.db import migrations
2+
3+
4+
class Migration(migrations.Migration):
5+
6+
dependencies = [
7+
('scanners', '0072_delete_enable_customs_waffle_switch'),
8+
]
9+
10+
operations = [
11+
migrations.RemoveIndex(
12+
model_name='scannerresult',
13+
name='scanners_re_state_2893a0_idx',
14+
),
15+
migrations.RemoveField(
16+
model_name='scannerresult',
17+
name='state',
18+
),
19+
]

src/olympia/scanners/models.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,10 @@
3636
NEW,
3737
NO_ACTION,
3838
QUERY_RULE_STATES,
39-
RESULT_STATES,
4039
RUNNING,
4140
SCANNER_SERVICE_ACCOUNTS_GROUP,
4241
SCANNERS,
4342
SCHEDULED,
44-
UNKNOWN,
4543
WEBHOOK,
4644
WEBHOOK_EVENTS,
4745
YARA,
@@ -357,9 +355,6 @@ class ScannerResult(AbstractScannerResult):
357355
)
358356
model_version = models.CharField(max_length=30, null=True)
359357
has_matches = models.BooleanField(null=True)
360-
state = models.PositiveSmallIntegerField(
361-
choices=RESULT_STATES.items(), null=True, blank=True, default=UNKNOWN
362-
)
363358

364359
class Meta(AbstractScannerResult.Meta):
365360
db_table = 'scanners_results'
@@ -370,7 +365,6 @@ class Meta(AbstractScannerResult.Meta):
370365
)
371366
]
372367
indexes = [
373-
models.Index(fields=('state',)),
374368
models.Index(fields=('has_matches',)),
375369
]
376370

@@ -395,12 +389,6 @@ def save(self, *args, **kwargs):
395389
for scanner_rule in matched_rules:
396390
self.matched_rules.add(scanner_rule)
397391

398-
def can_report_feedback(self):
399-
return self.state == UNKNOWN
400-
401-
def can_revert_feedback(self):
402-
return self.state != UNKNOWN
403-
404392
@classmethod
405393
def run_action(cls, version):
406394
"""Try to find and execute an action for a given version, based on the

src/olympia/scanners/templates/admin/scannerresult_actions.html

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)