diff --git a/device/templates/details.html b/device/templates/details.html
index 331c857..137a4f6 100644
--- a/device/templates/details.html
+++ b/device/templates/details.html
@@ -58,7 +58,7 @@
{{ k }}
diff --git a/evidence/forms.py b/evidence/forms.py
index dab7a60..83d9e6b 100644
--- a/evidence/forms.py
+++ b/evidence/forms.py
@@ -15,7 +15,7 @@ from utils.save_snapshots import move_json, save_in_disk
class UploadForm(forms.Form):
evidence_file = MultipleFileField(label=_("File"))
- def clean(self):
+ def clean_evidence_file(self):
self.evidences = []
data = self.cleaned_data.get('evidence_file')
if not data:
@@ -33,13 +33,20 @@ class UploadForm(forms.Form):
exist_annotation = Annotation.objects.filter(
uuid=file_json['uuid']
).first()
-
+
if exist_annotation:
- raise ValidationError("error: {} exist".format(file_name))
-
- except Exception:
- raise ValidationError("error in: {}".format(file_name))
-
+ raise ValidationError(
+ _("The snapshot already exists"),
+ code="duplicate_snapshot",
+ )
+
+ #Catch any error and display it as Validation Error so the Form handles it
+ except Exception as e:
+ raise ValidationError(
+ _("Error on '%(file_name)s': %(error)s"),
+ code="error",
+ params={"file_name": file_name, "error": getattr(e, 'message', str(e))},
+ )
self.evidences.append((file_name, file_json))
return True
@@ -123,7 +130,15 @@ class ImportForm(forms.Form):
data = self.cleaned_data["file_import"]
self.file_name = data.name
- df = pd.read_excel(data)
+
+ try:
+ df = pd.read_excel(data)
+ except Exception as e:
+ raise ValidationError(
+ _("Error on '%(file_name)s': Invalid File"),
+ params={"file_name": self.file_name}
+ )
+
df.fillna('', inplace=True)
data_pd = df.to_dict(orient='index')
diff --git a/evidence/management/commands/up_snapshots.py b/evidence/management/commands/up_snapshots.py
index c987d76..36f5c28 100644
--- a/evidence/management/commands/up_snapshots.py
+++ b/evidence/management/commands/up_snapshots.py
@@ -47,17 +47,22 @@ class Command(BaseCommand):
self.open(filepath)
def open(self, filepath):
- with open(filepath, 'r') as file:
- content = json.loads(file.read())
- path_name = save_in_disk(content, self.user.institution.name)
- self.snapshots.append((content, path_name))
+ try:
+ with open(filepath, 'r') as file:
+ content = json.loads(file.read())
+ path_name = save_in_disk(content, self.user.institution.name)
+
+ self.snapshots.append((content, path_name))
+
+ except Exception as e:
+ logger.error("Could not open file %s: %s", filepath, e)
def parsing(self):
for s, p in self.snapshots:
try:
self.devices.append(Build(s, self.user))
move_json(p, self.user.institution.name)
- except Exception as err:
+ except Exception as e:
snapshot_id = s.get("uuid", "")
- txt = "Could not parse snapshot: %s"
- logger.error(txt, snapshot_id)
+ txt = "Could not parse snapshot %s: %s"
+ logger.error(txt, snapshot_id, e)
diff --git a/evidence/parse.py b/evidence/parse.py
index 3ec476b..fd68e06 100644
--- a/evidence/parse.py
+++ b/evidence/parse.py
@@ -4,6 +4,7 @@ import logging
from dmidecode import DMIParse
from json_repair import repair_json
+from evidence.parse_details import get_lshw_child
from evidence.models import Annotation
from evidence.xapian import index
@@ -12,16 +13,7 @@ from utils.constants import CHASSIS_DH
logger = logging.getLogger('django')
-
-def get_network_cards(child, nets):
- if child['id'] == 'network' and "PCI:" in child.get("businfo"):
- nets.append(child)
- if child.get('children'):
- [get_network_cards(x, nets) for x in child['children']]
-
-
def get_mac(lshw):
- nets = []
try:
if type(lshw) is dict:
hw = lshw
@@ -30,18 +22,16 @@ def get_mac(lshw):
except json.decoder.JSONDecodeError:
hw = json.loads(repair_json(lshw))
- try:
- get_network_cards(hw, nets)
- except Exception as ss:
- logger.warning("%s", ss)
- return
+ nets = []
+ get_lshw_child(hw, nets, 'network')
nets_sorted = sorted(nets, key=lambda x: x['businfo'])
- # This funcion get the network card integrated in motherboard
- # integrate = [x for x in nets if "pci@0000:00:" in x.get('businfo', '')]
if nets_sorted:
- return nets_sorted[0]['serial']
+ mac = nets_sorted[0]['serial']
+ logger.debug("The snapshot has the following MAC: %s" , mac)
+ return mac
+
class Build:
diff --git a/evidence/templates/upload.html b/evidence/templates/upload.html
index 056cf55..6337b3e 100644
--- a/evidence/templates/upload.html
+++ b/evidence/templates/upload.html
@@ -8,23 +8,21 @@
+
+
+
{% load django_bootstrap5 %}