Merge pull request 'bugfix integration with dpp/dlt' (#50) from fix_build into main

Reviewed-on: #50
This commit is contained in:
pedro 2025-02-14 13:36:39 +00:00
commit 42f5cf7e36
10 changed files with 62 additions and 35 deletions

View file

@ -103,6 +103,8 @@
{% include 'tabs/evidences.html' %} {% include 'tabs/evidences.html' %}
{% include 'tabs/dpps.html' %}
<!-- Add a note popup --> <!-- Add a note popup -->
<div class="modal fade" id="addNoteModal" tabindex="-1" aria-labelledby="addNoteModalLabel" aria-hidden="true"> <div class="modal fade" id="addNoteModal" tabindex="-1" aria-labelledby="addNoteModalLabel" aria-hidden="true">
<div class="modal-dialog"> <div class="modal-dialog">

View file

@ -0,0 +1,18 @@
{% load i18n %}
<div class="tab-pane fade" id="dpps">
<h5 class="card-title">{% trans 'List of dpps' %}</h5>
<div class="list-group col">
{% for d in dpps %}
<div class="list-group-item">
<div class="d-flex w-100 justify-content-between">
<small class="text-muted">{{ d.2.timestamp }}</small>
<span>{{ d.2.type }}</span>
</div>
<p class="mb-1">
<a href="{% url 'did:device_web' d.0 %}">{{ d.1 }}...</a>
</p>
</div>
{% endfor %}
</div>
</div>

View file

@ -94,10 +94,14 @@ class DetailsView(DashboardView, TemplateView):
lot_tags = LotTag.objects.filter(owner=self.request.user.institution) lot_tags = LotTag.objects.filter(owner=self.request.user.institution)
dpps = [] dpps = []
if settings.DPP: if settings.DPP:
dpps = Proof.objects.filter( _dpps = Proof.objects.filter(
uuid__in=self.object.uuids, uuid__in=self.object.uuids,
type=PROOF_TYPE["IssueDPP"] type=PROOF_TYPE["IssueDPP"]
) )
for x in _dpps:
dpp = "{}:{}".format(self.pk, x.signature)
dpps.append((dpp, x.signature[:10], x))
last_evidence = self.object.get_last_evidence() last_evidence = self.object.get_last_evidence()
uuids = self.object.uuids uuids = self.object.uuids
state_definitions = StateDefinition.objects.filter( state_definitions = StateDefinition.objects.filter(

View file

@ -106,10 +106,10 @@ class PublicDeviceWebView(TemplateView):
'device': {}, 'device': {},
} }
dev = Build(self.object.last_evidence.doc, None, check=True) dev = Build(self.object.last_evidence.doc, None, check=True)
doc = dev.get_phid() doc = dev.build.get_doc()
data['document'] = json.dumps(doc) data['document'] = json.dumps(doc)
data['device'] = dev.device data['device'] = dev.build.device
data['components'] = dev.components data['components'] = dev.build.components
self.object.get_evidences() self.object.get_evidences()
last_dpp = Proof.objects.filter( last_dpp = Proof.objects.filter(
@ -118,7 +118,7 @@ class PublicDeviceWebView(TemplateView):
key = self.pk key = self.pk
if last_dpp: if last_dpp:
key = last_dpp.signature key += ":"+last_dpp.signature
url = "https://{}/did/{}".format( url = "https://{}/did/{}".format(
self.request.get_host(), self.request.get_host(),
@ -135,17 +135,17 @@ class PublicDeviceWebView(TemplateView):
for d in self.object.evidences: for d in self.object.evidences:
d.get_doc() d.get_doc()
dev = Build(d.doc, None, check=True) dev = Build(d.doc, None, check=True)
doc = dev.get_phid() doc = dev.build.get_doc()
ev = json.dumps(doc) ev = json.dumps(doc)
phid = dev.get_signature(doc) phid = dev.sign(ev)
dpp = "{}:{}".format(self.pk, phid) dpp = "{}:{}".format(self.pk, phid)
rr = { rr = {
'dpp': dpp, 'dpp': dpp,
'document': ev, 'document': ev,
'algorithm': ALGORITHM, 'algorithm': ALGORITHM,
'manufacturer DPP': '', 'manufacturer DPP': '',
'device': dev.device, 'device': dev.build.device,
'components': dev.components 'components': dev.build.components
} }
tmpl = dpp_tmpl.copy() tmpl = dpp_tmpl.copy()

View file

@ -42,19 +42,6 @@ gen_env_vars() {
export API_RESOLVER='http://id_index_api:3012' export API_RESOLVER='http://id_index_api:3012'
# TODO hardcoded # TODO hardcoded
export ID_FEDERATED='DH1' export ID_FEDERATED='DH1'
# propagate to .env
dpp_env_vars="$(cat <<END
API_DLT=${API_DLT}
API_DLT_TOKEN=${API_DLT_TOKEN}
API_RESOLVER=${API_RESOLVER}
ID_FEDERATED=${ID_FEDERATED}
END
)"
# generate config using env vars from docker
# TODO rethink if this is needed because now this is django, not flask
cat > .env <<END
${dpp_env_vars:-}
END
fi fi
} }

View file

@ -12,7 +12,7 @@ from dpp.models import Proof
class ProofView(View): class ProofView(View):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
timestamp = kwargs.get("proof_id") timestamp = kwargs.get("proof_id")
proof = Proof.objects.filter(timestamp=timestamp).first() proof = Proof.objects.filter(timestamp=timestamp).first()
@ -22,9 +22,9 @@ class ProofView(View):
ev = Evidence(proof.uuid) ev = Evidence(proof.uuid)
if not ev.doc: if not ev.doc:
return JsonResponse({}, status=404) return JsonResponse({}, status=404)
dev = Build(ev.doc, None, check=True) dev = Build(ev.doc, None, check=True)
doc = dev.get_phid() doc = dev.build.get_doc()
data = { data = {
"algorithm": ALGORITHM, "algorithm": ALGORITHM,

View file

@ -66,4 +66,9 @@ class Build(BuildMix):
def _get_components(self): def _get_components(self):
data = ParseSnapshot(self.json) data = ParseSnapshot(self.json)
self.device = data.device
self.components = data.components self.components = data.components
self.device.pop("actions", None)
for c in self.components:
c.pop("actions", None)

View file

@ -17,7 +17,7 @@ class BuildMix:
self.chassis = "" self.chassis = ""
self.sku = "" self.sku = ""
self.mac = "" self.mac = ""
self.tpy = "" self.type = ""
self.version = "" self.version = ""
self.get_details() self.get_details()
self.generate_chids() self.generate_chids()
@ -41,8 +41,6 @@ class BuildMix:
def get_doc(self): def get_doc(self):
self._get_components() self._get_components()
for c in self.components:
c.pop("actions", None)
components = sorted(self.components, key=lambda x: x.get("type")) components = sorted(self.components, key=lambda x: x.get("type"))
device = self.algorithms.get('ereuse22') device = self.algorithms.get('ereuse22')
@ -52,6 +50,8 @@ class BuildMix:
for c in components: for c in components:
doc.append((c.get("type"), self.get_id_hw_dpp(c))) doc.append((c.get("type"), self.get_id_hw_dpp(c)))
return doc
def get_id_hw_dpp(self, d): def get_id_hw_dpp(self, d):
algorithm = ALGOS.get("ereuse22", []) algorithm = ALGOS.get("ereuse22", [])
hid = "" hid = ""

View file

@ -36,7 +36,9 @@ class Build(BuildMix):
self.manufacturer = system self.manufacturer = system
self.model = get_inxi(m, "product") self.model = get_inxi(m, "product")
self.serial_number = get_inxi(m, "serial") self.serial_number = get_inxi(m, "serial")
self.chassis = get_inxi(m, "Type") self.type = get_inxi(m, "Type")
self.chassis = self.type
self.version = get_inxi(m, "v")
else: else:
self.sku = get_inxi(m, "part-nu") self.sku = get_inxi(m, "part-nu")
@ -61,4 +63,9 @@ class Build(BuildMix):
def _get_components(self): def _get_components(self):
data = ParseSnapshot(self.json) data = ParseSnapshot(self.json)
self.device = data.device
self.components = data.components self.components = data.components
self.device.pop("actions", None)
for c in self.components:
c.pop("actions", None)

View file

@ -11,12 +11,16 @@ class Build(BuildMix):
# normaly is worbench 11 # normaly is worbench 11
def get_details(self): def get_details(self):
device = self.json.get('device', {}) self.device = self.json.get('device', {})
self.manufacturer = device.get("manufacturer", '') self.manufacturer = self.device.get("manufacturer", '')
self.model = device.get("model", '') self.model = self.device.get("model", '')
self.chassis = device.get("chassis", '') self.chassis = self.device.get("chassis", '')
self.serial_number = device.get("serialNumber", '') self.serial_number = self.device.get("serialNumber", '')
self.sku = device.get("sku", '') self.sku = self.device.get("sku", '')
def _get_components(self): def _get_components(self):
self.components = self.json.get("components", []) self.components = self.json.get("components", [])
self.device.pop("actions", None)
for c in self.components:
c.pop("actions", None)