Infraestructura para usar didweb
This commit is contained in:
parent
d018c46bf4
commit
c0dba1c423
|
@ -645,7 +645,7 @@ class DidRegisterView(Credentials, CreateView):
|
|||
|
||||
def form_valid(self, form):
|
||||
form.instance.user = self.request.user
|
||||
form.instance.set_did()
|
||||
form.instance.set_did(form.instance.type)
|
||||
form.save()
|
||||
messages.success(self.request, _('DID created successfully'))
|
||||
Event.set_EV_ORG_DID_CREATED_BY_ADMIN(form.instance)
|
||||
|
|
|
@ -8,7 +8,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
from utils.idhub_ssikit import (
|
||||
generate_did_controller_key,
|
||||
keydid_from_controller_key,
|
||||
sign_credential,
|
||||
sign_credential, webdid_from_controller_key,
|
||||
)
|
||||
from idhub_auth.models import User
|
||||
|
||||
|
@ -416,6 +416,7 @@ class DID(models.Model):
|
|||
related_name='dids',
|
||||
null=True,
|
||||
)
|
||||
didweb_document = models.TextField()
|
||||
|
||||
@property
|
||||
def is_organization_did(self):
|
||||
|
@ -423,9 +424,14 @@ class DID(models.Model):
|
|||
return True
|
||||
return False
|
||||
|
||||
def set_did(self):
|
||||
def set_did(self, type):
|
||||
self.key_material = generate_did_controller_key()
|
||||
self.did = keydid_from_controller_key(self.key_material)
|
||||
if type == "key":
|
||||
self.did = keydid_from_controller_key(self.key_material)
|
||||
elif type == "web":
|
||||
didurl, document = webdid_from_controller_key(self.key_material)
|
||||
self.did = didurl
|
||||
self.didweb_document = document
|
||||
|
||||
def get_key(self):
|
||||
return json.loads(self.key_material)
|
||||
|
|
|
@ -17,7 +17,7 @@ Including another URLconf
|
|||
from django.contrib.auth import views as auth_views
|
||||
from django.views.generic import RedirectView
|
||||
from django.urls import path, reverse_lazy
|
||||
from .views import LoginView
|
||||
from .views import LoginView, serve_did
|
||||
from .admin import views as views_admin
|
||||
from .user import views as views_user
|
||||
# from .verification_portal import views as views_verification_portal
|
||||
|
@ -173,6 +173,8 @@ urlpatterns = [
|
|||
path('admin/import/new', views_admin.ImportAddView.as_view(),
|
||||
name='admin_import_add'),
|
||||
|
||||
path('did-registry/<str:did_id>', serve_did)
|
||||
|
||||
# path('verification_portal/verify/', views_verification_portal.verify,
|
||||
# name="verification_portal_verify")
|
||||
]
|
||||
|
|
|
@ -205,7 +205,7 @@ class DidRegisterView(MyWallet, CreateView):
|
|||
|
||||
def form_valid(self, form):
|
||||
form.instance.user = self.request.user
|
||||
form.instance.set_did()
|
||||
form.instance.set_did(form.instance.type)
|
||||
form.save()
|
||||
messages.success(self.request, _('DID created successfully'))
|
||||
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
from django.shortcuts import get_object_or_404
|
||||
from django.urls import reverse_lazy
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.contrib.auth import views as auth_views
|
||||
from django.contrib.auth import login as auth_login
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.http import HttpResponseRedirect, HttpResponse
|
||||
|
||||
from idhub.models import DID
|
||||
from trustchain_idhub import settings
|
||||
|
||||
|
||||
class LoginView(auth_views.LoginView):
|
||||
|
@ -26,3 +30,10 @@ class LoginView(auth_views.LoginView):
|
|||
self.extra_context['success_url'] = admin_dashboard
|
||||
auth_login(self.request, user)
|
||||
return HttpResponseRedirect(self.extra_context['success_url'])
|
||||
|
||||
|
||||
def serve_did(request, did_id):
|
||||
document = get_object_or_404(DID, did=f'did:web:{settings.DOMAIN}:{did_id}').didweb_document
|
||||
retval = HttpResponse(document)
|
||||
retval.headers["Content-Type"] = "application/json"
|
||||
return retval
|
||||
|
|
|
@ -6,6 +6,8 @@ import jinja2
|
|||
from django.template.backends.django import Template
|
||||
from django.template.loader import get_template
|
||||
|
||||
from trustchain_idhub import settings
|
||||
|
||||
|
||||
def generate_did_controller_key():
|
||||
return didkit.generate_ed25519_key()
|
||||
|
@ -15,6 +17,30 @@ def keydid_from_controller_key(key):
|
|||
return didkit.key_to_did("key", key)
|
||||
|
||||
|
||||
async def resolve_keydid(keydid):
|
||||
return await didkit.resolve_did(keydid, "{}")
|
||||
|
||||
|
||||
def webdid_from_controller_key(key):
|
||||
"""
|
||||
Se siguen los pasos para generar un webdid a partir de un keydid.
|
||||
Documentado en la docu de spruceid.
|
||||
"""
|
||||
keydid = keydid_from_controller_key(key) # "did:key:<...>"
|
||||
pubkeyid = keydid.rsplit(":")[-1] # <...>
|
||||
document = json.loads(asyncio.run(resolve_keydid(keydid))) # Documento DID en terminos "key"
|
||||
webdid_url = f"did:web:{settings.DOMAIN}:{pubkeyid}" # nueva URL: "did:web:idhub.pangea.org:<...>"
|
||||
webdid_url_owner = webdid_url + "#owner"
|
||||
# Reemplazamos los campos del documento DID necesarios:
|
||||
document["id"] = webdid_url
|
||||
document["verificationMethod"]["id"] = webdid_url_owner
|
||||
document["verificationMethod"]["controller"] = webdid_url
|
||||
document["authentication"] = webdid_url_owner
|
||||
document["assertionMethod"] = webdid_url_owner
|
||||
document_fixed_serialized = json.dumps(document)
|
||||
return webdid_url, document_fixed_serialized
|
||||
|
||||
|
||||
def generate_generic_vc_id():
|
||||
# TODO agree on a system for Verifiable Credential IDs
|
||||
return "https://pangea.org/credentials/42"
|
||||
|
|
Loading…
Reference in New Issue