Skip to content

Commit 80c78df

Browse files
committed
Backend: Fix duplicate reference urls(#343)
Signed-off-by: savish <savishbedi1@gmail.com>
1 parent 3688d89 commit 80c78df

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,5 @@ zipp==0.6.0
5555
requests==2.23.0
5656
toml==0.10.2
5757
PyYAML==5.4
58-
freezegun==1.1.0
58+
freezegun==1.1.0
59+
urlpy==0.5

vulnerabilities/models.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import importlib
2424
from datetime import datetime
2525
from time import sleep
26+
import urlpy
2627

2728
from django.db import models
2829
from django.db import IntegrityError
@@ -110,6 +111,38 @@ class VulnerabilityReference(models.Model):
110111
def scores(self):
111112
return VulnerabilitySeverity.objects.filter(reference=self.id)
112113

114+
def save(self, *args, **kwargs):
115+
if self.id:
116+
super(VulnerabilityReference, self).save(*args, **kwargs)
117+
else:
118+
url_parsed = urlpy.parse(self.url)
119+
self.url = str(url_parsed.canonical())
120+
url_scheme = url_parsed.scheme
121+
scheme_independent_url = self.url[len(url_scheme) :]
122+
if url_scheme == "http":
123+
similar_instance = VulnerabilityReference.objects.filter(
124+
vulnerability=self.vulnerability,
125+
source=self.source,
126+
reference_id=self.reference_id,
127+
url="https" + scheme_independent_url,
128+
).first()
129+
if not similar_instance:
130+
super(VulnerabilityReference, self).save(*args, **kwargs)
131+
elif url_scheme == "https":
132+
similar_instance = VulnerabilityReference.objects.filter(
133+
vulnerability=self.vulnerability,
134+
source=self.source,
135+
reference_id=self.reference_id,
136+
url="http" + scheme_independent_url,
137+
).first()
138+
if similar_instance:
139+
similar_instance.url = self.url
140+
similar_instance.save()
141+
else:
142+
super(VulnerabilityReference, self).save(*args, **kwargs)
143+
else:
144+
super(VulnerabilityReference, self).save(*args, **kwargs)
145+
113146
class Meta:
114147
unique_together = ("vulnerability", "source", "reference_id", "url")
115148

0 commit comments

Comments
 (0)