add legacy_hid
This commit is contained in:
parent
c85e5bddb9
commit
13bac41f9f
|
@ -3,11 +3,11 @@ import hashlib
|
|||
import logging
|
||||
|
||||
from dmidecode import DMIParse
|
||||
from evidence.parse_details import ParseSnapshot
|
||||
|
||||
from evidence.models import Annotation
|
||||
from evidence.xapian import index
|
||||
from evidence.parse_details import get_inxi_key, get_inxi
|
||||
from evidence.parse_details import ParseSnapshot, get_inxi_key, get_inxi, get_lshw_child
|
||||
from utils.constants import CHASSIS_DH
|
||||
from django.conf import settings
|
||||
|
||||
if settings.DPP:
|
||||
|
@ -25,6 +25,26 @@ def get_mac(inxi):
|
|||
return get_inxi(iface, 'mac')
|
||||
|
||||
|
||||
def get_legacy_mac(lshw):
|
||||
try:
|
||||
if type(lshw) is dict:
|
||||
hw = lshw
|
||||
else:
|
||||
hw = json.loads(lshw)
|
||||
except json.decoder.JSONDecodeError:
|
||||
return ""
|
||||
|
||||
nets = []
|
||||
get_lshw_child(hw, nets, 'network')
|
||||
|
||||
nets_sorted = sorted(nets, key=lambda x: x['businfo'])
|
||||
|
||||
if nets_sorted:
|
||||
mac = nets_sorted[0]['serial']
|
||||
logger.debug("The snapshot has the following MAC: %s" , mac)
|
||||
return mac
|
||||
|
||||
|
||||
class Build:
|
||||
def __init__(self, evidence_json, user, check=False):
|
||||
self.evidence = evidence_json.copy()
|
||||
|
@ -67,7 +87,7 @@ class Build:
|
|||
|
||||
def get_hid_14(self):
|
||||
if self.json.get("software") == "workbench-script":
|
||||
hid = self.get_hid(self.json)
|
||||
hid = self.get_hid()
|
||||
else:
|
||||
device = self.json['device']
|
||||
manufacturer = device.get("manufacturer", '')
|
||||
|
@ -145,7 +165,10 @@ class Build:
|
|||
value=v
|
||||
)
|
||||
|
||||
def get_hid(self, snapshot):
|
||||
def get_hid(self):
|
||||
if not self.json.get("data", {}).get("inxi"):
|
||||
return self.get_legacy_hid()
|
||||
|
||||
try:
|
||||
self.inxi = self.json["data"]["inxi"]
|
||||
if isinstance(self.inxi, str):
|
||||
|
@ -168,11 +191,50 @@ class Build:
|
|||
mac = get_mac(self.inxi) or ""
|
||||
if not mac:
|
||||
txt = "Could not retrieve MAC address in snapshot %s"
|
||||
logger.warning(txt, snapshot['uuid'])
|
||||
logger.warning(txt, self.json.get('uuid', "n/a"))
|
||||
return f"{manufacturer}{model}{chassis}{serial_number}{sku}"
|
||||
|
||||
return f"{manufacturer}{model}{chassis}{serial_number}{sku}{mac}"
|
||||
|
||||
def get_chassis_dh(self):
|
||||
chassis = self.get_chassis()
|
||||
lower_type = chassis.lower()
|
||||
for k, v in CHASSIS_DH.items():
|
||||
if lower_type in v:
|
||||
return k
|
||||
return self.default
|
||||
|
||||
def get_sku(self):
|
||||
return self.dmi.get("System")[0].get("SKU Number", "n/a").strip()
|
||||
|
||||
def get_chassis(self):
|
||||
return self.dmi.get("Chassis")[0].get("Type", '_virtual') #
|
||||
|
||||
def get_version(self):
|
||||
return self.dmi.get("System")[0].get("Verson", '_virtual')
|
||||
|
||||
def get_legacy_hid(self):
|
||||
dmidecode_raw = self.json.get("data", {}).get("dmidecode")
|
||||
self.dmi = DMIParse(dmidecode_raw)
|
||||
|
||||
manufacturer = self.dmi.manufacturer().strip()
|
||||
model = self.dmi.model().strip()
|
||||
chassis = self.get_chassis_dh()
|
||||
serial_number = self.dmi.serial_number()
|
||||
sku = self.get_sku()
|
||||
|
||||
if not self.json.get("data", {}).get('lshw'):
|
||||
return f"{manufacturer}{model}{chassis}{serial_number}{sku}"
|
||||
|
||||
lshw = self.json.get("data", {}).get("lshw")
|
||||
# mac = get_mac2(hwinfo_raw) or ""
|
||||
mac = get_legacy_mac(lshw) or ""
|
||||
if not mac:
|
||||
txt = "Could not retrieve MAC address in snapshot %s"
|
||||
logger.warning(txt, self.json.get('uuid', "n/a"))
|
||||
|
||||
return f"{manufacturer}{model}{chassis}{serial_number}{sku}{mac}"
|
||||
|
||||
def get_signature(self, doc):
|
||||
return hashlib.sha3_256(json.dumps(doc).encode()).hexdigest()
|
||||
|
||||
|
|
Loading…
Reference in a new issue