diff --git a/idhub/migrations/0001_initial.py b/idhub/migrations/0001_initial.py index 05fa67a..df5fa3c 100644 --- a/idhub/migrations/0001_initial.py +++ b/idhub/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.5 on 2023-10-02 15:55 +# Generated by Django 4.2.5 on 2023-10-03 15:28 from django.conf import settings from django.db import migrations, models diff --git a/idhub/models.py b/idhub/models.py index 41f0de0..fb053bc 100644 --- a/idhub/models.py +++ b/idhub/models.py @@ -14,42 +14,29 @@ class AppUser(models.Model): class Event(models.Model): # Para los "audit logs" que se requieren en las pantallas. timestamp = models.DateTimeField() - kind = "PLACEHOLDER" + # Los eventos no tienen relaciĆ³n con otros objetos a nivel de BBDD. + event_data = models.CharField(max_length=250) - - - - - - - - - - -class ExternallyStoredModel(models.Model): - pass - - # Any models which inherit from this class are stored in wallet-kit, not in the Django ORM - class Meta: - abstract = True - - @staticmethod - def from_json(json_serialization): - # Construct an instance of this class by de-serialization from data returned by wallet-kit. - # Must be implemented by any deriving class. - raise NotImplementedError() - - -class DID(ExternallyStoredModel): +class DID(models.Model): did_string = models.CharField(max_length=250) - # kind = "KEY|JWK|WEB|EBSI|CHEQD|IOTA" + label = models.CharField(max_length=50) + owner = models.ForeignKey(AppUser, on_delete=models.CASCADE) + # kind = "KEY|WEB" -class VerifiableCredential(ExternallyStoredModel): +class VerifiableCredential(models.Model): id_string = models.CharField(max_length=250) - data = models.TextField() verified = models.BooleanField() created_on = models.DateTimeField() - did_issuer = models.CharField(max_length=250) # Probably not a FK but the DID directly - did_subject = models.CharField(max_length=250) # Probably not a FK but the DID directly + did_issuer = models.CharField(max_length=250) + did_subject = models.CharField(max_length=250) + owner = models.ForeignKey(AppUser, on_delete=models.CASCADE) + data = models.TextField() + + +class VCTemplate(models.Model): + wkit_template_id = models.CharField(max_length=250) + data = models.TextField() + + diff --git a/trustchain_walletkit/TENANT_CFG_TEMPLATE b/trustchain_walletkit/TENANT_CFG_TEMPLATE new file mode 100644 index 0000000..00b3372 --- /dev/null +++ b/trustchain_walletkit/TENANT_CFG_TEMPLATE @@ -0,0 +1,15 @@ +{ + "issuerApiUrl": "http://localhost:8080/issuer-api/default", + "issuerClientName": "PANGEA Issuer Portal", + "issuerDid": null, + "issuerUiUrl": "http://localhost:5000", + "wallets": { + "walt.id": { + "description": "walt.id web wallet", + "id": "walt.id", + "presentPath": "api/siop/initiatePresentation", + "receivePath": "api/siop/initiateIssuance", + "url": "http://localhost:3000" + } + } +} \ No newline at end of file diff --git a/trustchain_walletkit/__init__.py b/trustchain_walletkit/__init__.py new file mode 100644 index 0000000..02d0144 --- /dev/null +++ b/trustchain_walletkit/__init__.py @@ -0,0 +1,52 @@ +from pathlib import Path + +import requests +import json + +WALLETKITD = 'http://localhost:8080/' +ISSUER = f'{WALLETKITD}issuer-api/default/' +VERIFIER = f'{WALLETKITD}verifier-api/default/' + +default_ctype_header = { + 'Content-Type': 'application/json', # specify the type of data you're sending + 'Accept': 'application/json', # specify the type of data you can accept +} + + +def include_str(path): + with open(path, "r") as f: + return f.read().strip() + + +# Create DID for tenant +# Valid methods: 'key'|'web' +def user_create_did(did_method): + url = f'{ISSUER}config/did/create' + data = { + 'method': did_method + } + response = requests.post(url, json=data, headers=default_ctype_header) + response.raise_for_status() + return response.text + + +def admin_create_template(template_name, template_body): + url = f'{ISSUER}config/templates/{template_name}' + body = template_body + response = requests.post(url, data=body, headers=default_ctype_header) + response.raise_for_status() + return + + +def user_issue_vc(vc_name, vc_params): + url = f'{ISSUER}credentials/issuance/request' + # ... + # TODO examine cross-device issuance workflow + pass + + + + + +TENANT_CFG_TMEPLATE = include_str("./TENANT_CFG_TEMPLATE") +