diff --git a/did/template_credential.py b/did/template_credential.py new file mode 100644 index 0000000..0af0fae --- /dev/null +++ b/did/template_credential.py @@ -0,0 +1,41 @@ +dpp_tmpl = { + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://test.uncefact.org/vocabulary/untp/dpp/0.5.0/" + ], + "type": [ + "DigitalProductPassport", + "VerifiableCredential" + ], + "id": "https://example.ereuse.org/credentials/2a423366-a0d6-4855-ba65-2e0c926d09b0", + "issuer": { + "type": [ + "CredentialIssuer" + ], + "id": "did:web:r1.identifiers.ereuse.org:did-registry:z6Mkoreij5y9bD9fL5SGW6TfMUmcbaV7LCPwZHCFEEZBrVYQ#z6Mkoreij5y9bD9fL5SGW6TfMUmcbaV7LCPwZHCFEEZBrVYQ", + "name": "Refurbisher One" + }, + "validFrom": "2024-11-15T12:00:00", + "validUntil": "2034-11-15T12:00:00", + "credentialSubject": { + "type": [ + "Product" + ], + "id": "https://id.ereuse.org/01/09520123456788/21/12345", + "name": "Refurbished XYZ Lenovo laptop item", + "registeredId": "09520123456788.21.12345", + "description": "XYZ Lenovo laptop refurbished by Refurbisher One", + "data": "" + }, + "credentialSchema": { + "id": "https://idhub.pangea.org/vc_schemas/dpp.json", + "type": "FullJsonSchemaValidator2021", + "proof": { + "type": "Ed25519Signature2018", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:web:r1.identifiers.ereuse.org:did-registry:z6Mkoreij5y9bD9fL5SGW6TfMUmcbaV7LCPwZHCFEEZBrVYQ#z6Mkoreij5y9bD9fL5SGW6TfMUmcbaV7LCPwZHCFEEZBrVYQ", + "created": "2024-12-03T15:33:42Z", + "jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..rBPqbOcZCXB7GAnq1XIfV9Jvw4MKXlHff7qZkRfgwQ0Hnd9Ujt5s1xT4O0K6VESzWvdP2mOvMvu780fVNfraBQ" + } + } +} diff --git a/did/views.py b/did/views.py index efeb673..e0a59e6 100644 --- a/did/views.py +++ b/did/views.py @@ -8,6 +8,7 @@ from evidence.parse import Build from dpp.api_dlt import ALGORITHM from dpp.models import Proof from dpp.api_dlt import PROOF_TYPE +from did.template_credential import dpp_tmpl logger = logging.getLogger('django') @@ -89,43 +90,46 @@ class PublicDeviceWebView(TemplateView): return response def get_result(self): - components = [] + + if len(self.pk.split(":")) > 1: + return self.build_from_dpp() + else: + return self.build_from_chid() + + def build_from_dpp(self): data = { 'document': {}, 'dpp': self.pk, 'algorithm': ALGORITHM, - 'components': components, + 'components': [], 'manufacturer DPP': '', 'device': {}, } - result = { - '@context': ['https://ereuse.org/dpp0.json'], - 'data': data, - } + dev = Build(self.object.last_evidence.doc, None, check=True) + doc = dev.get_phid() + data['document'] = json.dumps(doc) + data['device'] = dev.device + data['components'] = dev.components - if len(self.pk.split(":")) > 1: - dev = Build(self.object.last_evidence.doc, None, check=True) - doc = dev.get_phid() - data['document'] = json.dumps(doc) - data['device'] = dev.device - data['components'] = dev.components + self.object.get_evidences() + last_dpp = Proof.objects.filter( + uuid__in=self.object.uuids, type=PROOF_TYPE['IssueDPP'] + ).order_by("-timestamp").first() - self.object.get_evidences() - last_dpp = Proof.objects.filter( - uuid__in=self.object.uuids, type=PROOF_TYPE['IssueDPP'] - ).order_by("-timestamp").first() + key = self.pk + if last_dpp: + key = last_dpp.signature - key = self.pk - if last_dpp: - key = last_dpp.signature - - url = "https://{}/did/{}".format( - self.request.get_host(), - key - ) - data['url_last'] = url - return result + url = "https://{}/did/{}".format( + self.request.get_host(), + key + ) + data['url_last'] = url + tmpl = dpp_tmpl.copy() + tmpl["credentialSubject"]["data"] = data + return tmpl + def build_from_chid(self): dpps = [] self.object.initial() for d in self.object.evidences: @@ -144,7 +148,10 @@ class PublicDeviceWebView(TemplateView): 'components': dev.components } - dpps.append(rr) + tmpl = dpp_tmpl.copy() + tmpl["credentialSubject"]["data"] = rr + + dpps.append(tmpl) return { '@context': ['https://ereuse.org/dpp0.json'], 'data': dpps, diff --git a/requirements.txt b/requirements.txt index 33a93f7..52409e6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,5 +12,5 @@ odfpy==1.4.1 pytz==2024.2 json-repair==0.30.0 setuptools==75.5.0 -requests==2.32.3 +requests==2.32.3 wheel==0.45.0