Skip to content

Commit 090633b

Browse files
authored
Sca fixed in improvements (#192)
* version needed for sbom-repo dependency * exclude empty fixed in from vuln counters * pkg-config, mysqlclient 2.2.4 * . * dep versions * fixes sbomrepor deps requirement * dependencies * . * python 3.9 on integration test
1 parent 8a1e490 commit 090633b

10 files changed

+33
-11
lines changed

.github/workflows/integration.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ jobs:
1212

1313
steps:
1414
- uses: actions/checkout@v4
15+
- uses: actions/setup-python@v5
16+
with:
17+
python-version: '3.9'
18+
1519
- name: Set-up environment
1620
run: pip install -r surface/requirements_test.txt
1721

dev/Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ RUN apt-get update \
1717
libldap2-dev \
1818
libsasl2-dev \
1919
git \
20+
pkg-config \
2021
&& rm -rf /var/lib/apt/lists/*
2122

2223
WORKDIR /wheels

dev/Dockerfile-IN-A-BOX

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ RUN apt-get update \
77
libldap2-dev \
88
libsasl2-dev \
99
git \
10+
pkg-config \
1011
&& rm -rf /var/lib/apt/lists/*
1112

1213
RUN --mount=type=bind,target=/tmpapp \

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ select = [
3838
src = ['surface', 'e2e']
3939

4040
[tool.ruff.isort]
41-
known-first-party = ["theme", "dkron", "django_restful_admin", "slackbot", "dbcleanup", "olympus", "notifications", "ppbenviron", "logbasecommand", "impersonate", "apitokens"]
41+
known-first-party = ["theme", "dkron", "django_restful_admin", "slackbot", "dbcleanup", "olympus", "notifications", "ppbenviron", "logbasecommand", "impersonate", "apitokens", "sbomrepo"]

surface/requirements.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
# Core Libraries
2-
32
Django==3.2.25
43
django-admin-rangefilter==0.11.0
54
django-after-response==0.2.2
@@ -27,7 +26,7 @@ django-impersonator==0.0.2
2726
django-apitokens==0.0.2
2827
django-sbomrepo==0.0.6
2928

30-
mysqlclient==2.0.3
29+
mysqlclient==2.2.4
3130
tqdm==4.65.0 # for core_utils that is not really a app/package ..?
3231
django-database-locks==0.5 # distributed locks (on mysql)
3332
django-bulk-update-or-create==0.3.0 # for faster batch operations with update_or_create

surface/sca/admin.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
from core_utils.admin_filters import DefaultFilterMixin
1818
from core_utils.utils import admin_reverse
1919
from dkron.utils import run_async
20+
from inventory.models import GitSource
2021
from sca import models
2122
from sca.utils import only_highest_version_dependencies
2223
from theme.filters import RelatedFieldAjaxListFilter
23-
from inventory.models import GitSource
2424

2525
logger = logging.getLogger(__name__)
2626

@@ -190,9 +190,9 @@ class Meta:
190190

191191
def filter_fixed_in(self, queryset, name, value):
192192
if value == "true":
193-
return queryset.exclude(Q(fixed_in="") | Q(fixed_in__isnull=True))
193+
return queryset.exclude(fixed_in="")
194194
elif value == "false":
195-
return queryset.filter(Q(fixed_in="") | Q(fixed_in__isnull=True))
195+
return queryset.filter(fixed_in="")
196196
return queryset
197197

198198

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.2.23 on 2024-09-16 10:38
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('sca', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AlterField(
14+
model_name='scafinding',
15+
name='fixed_in',
16+
field=models.TextField(default=''),
17+
),
18+
]

surface/sca/models.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from enum import Enum
33
from typing import Union
44

5-
from bulk_update_or_create import BulkUpdateOrCreateQuerySet
65
from django.db import models
76
from django.db.models import Case, Count, Q, When
87

@@ -164,7 +163,7 @@ def get_dependencies(root_dependency: "SCADependency") -> list:
164163
def update_vulnerability_counters(self) -> "SCAFindingCounter":
165164
severity_counters = (
166165
SCAFinding.objects.filter(
167-
(Q(fixed_in__isnull=False) | Q(finding_type=SCAFinding.FindingType.EOL)),
166+
(Q(fixed_in__gt="") | Q(finding_type=SCAFinding.FindingType.EOL)),
168167
dependency__purl__in=self.dependencies,
169168
state__in=(SCAFinding.State.NEW, SCAFinding.State.OPEN),
170169
)
@@ -247,7 +246,7 @@ class FindingType(models.IntegerChoices):
247246
vuln_id = models.CharField(max_length=128)
248247
published = models.DateTimeField()
249248
aliases = models.TextField(default="")
250-
fixed_in = models.TextField(default=None, null=True)
249+
fixed_in = models.TextField(default="")
251250
cvss_vector = models.CharField(max_length=128, default="")
252251
ecosystem = models.CharField(max_length=20)
253252
finding_type = models.IntegerField(choices=FindingType.choices, default=FindingType.VULN)

surface/sca/tests/test_admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def test_admin_changelist(self):
7373

7474
# Assert Vulnerabilities Counters
7575
assert "1 Critical" in content
76-
assert "4 High" in content
76+
assert "3 High" in content
7777
assert "3 Medium" in content
7878
assert "0 Low" in content
7979
assert "0 End of Life" in content

surface/sca/tests/test_resync_sbom_repo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def test_resync_sbom_repo(self, now):
5050
assert SCAFindingCounter.objects.filter(dependency=main_dependency).exists()
5151
counter = SCAFindingCounter.objects.filter(dependency=main_dependency).first()
5252
assert counter.critical == 1
53-
assert counter.high == 4
53+
assert counter.high == 3
5454
assert counter.medium == 3
5555

5656
# Asserts main dependency has only one git source "https://github.com/test/repo"

0 commit comments

Comments
 (0)