add proof

This commit is contained in:
Cayo Puigdefabregas 2023-02-20 19:16:43 +01:00
parent 599f15d5ae
commit ef8825568f
4 changed files with 54 additions and 2 deletions

View File

@ -487,6 +487,46 @@ class EraseBasic(JoinedWithOneDeviceMixin, ActionWithOneDevice):
return self.snapshot.device.phid() return self.snapshot.device.phid()
return '' return ''
def register_proof(self):
"""This method is used for register a proof of erasure en dlt"""
if 'trublo' not in app.blueprints.keys() or not self.snapshot:
return
if not session.get('token_dlt'):
return
token_dlt = session.get('token_dlt')
api_dlt = app.config.get('API_DLT')
if not token_dlt or not api_dlt:
return
api = API(api_dlt, token_dlt, "ethereum")
from ereuse_devicehub.resources.did.models import PROOF_ENUM, Proof
deviceCHID = self.device.chid
docSig = hashlib.sha3_256(self.snapshot.json_wb.encode('utf-8')).hexdigest()
docID = "{}".format(self.snapshot.uuid or '')
issuerID = "dh1:{user}".format(user=g.user.id)
proof_type = PROOF_ENUM['Erase']
result = api.generate_proof(deviceCHID, docID, docSig, issuerID, proof_type)
from ereuse_devicehub.resources.enums import StatusCode
if result['Status'] == StatusCode.Success:
timestamp = (
result.get('Data', {}).get('data', {}).get('timestamp', time.time())
)
d = {
"type": PROOF_ENUM['Register'],
"device": self.device,
"snapshot": self.snapshot,
"timestamp": timestamp,
"issuer_id": g.user.id,
}
proof = Proof(**d)
db.session.add(proof)
def __str__(self) -> str: def __str__(self) -> str:
return '{} on {}.'.format(self.severity, self.date_str) return '{} on {}.'.format(self.severity, self.date_str)
@ -780,7 +820,6 @@ class Snapshot(JoinedWithOneDeviceMixin, ActionWithOneDevice):
docID = "{}".format(self.uuid or '') docID = "{}".format(self.uuid or '')
issuerID = "dh1:{user}".format(user=g.user.id) issuerID = "dh1:{user}".format(user=g.user.id)
result = api.issue_passport(dpp, docID, docSig, issuerID) result = api.issue_passport(dpp, docID, docSig, issuerID)
# import pdb;pdb.set_trace()
if result['Status'] is not StatusCode.Success: if result['Status'] is not StatusCode.Success:
return return
timestamp = result['Data'].get('timestamp', time.time()) timestamp = result['Data'].get('timestamp', time.time())

View File

@ -12,7 +12,7 @@ from flask import g
from sqlalchemy.util import OrderedSet from sqlalchemy.util import OrderedSet
from ereuse_devicehub.db import db from ereuse_devicehub.db import db
from ereuse_devicehub.resources.action.models import Snapshot from ereuse_devicehub.resources.action.models import EraseBasic, Snapshot
from ereuse_devicehub.resources.device.models import Computer from ereuse_devicehub.resources.device.models import Computer
from ereuse_devicehub.resources.device.sync import Sync from ereuse_devicehub.resources.device.sync import Sync
from ereuse_devicehub.resources.enums import Severity, SnapshotSoftware from ereuse_devicehub.resources.enums import Severity, SnapshotSoftware
@ -126,6 +126,11 @@ class SnapshotMixin:
snapshot.device.register_dlt() snapshot.device.register_dlt()
snapshot.register_passport_dlt() snapshot.register_passport_dlt()
for ac in snapshot.actions:
if not isinstance(ac, EraseBasic):
continue
ac.register_proof()
return snapshot return snapshot
def is_server_erase(self, snapshot): def is_server_erase(self, snapshot):

View File

@ -915,6 +915,13 @@ class Device(Thing):
proof = Proof(**d) proof = Proof(**d)
db.session.add(proof) db.session.add(proof)
if not hasattr(self, 'components'):
return
for c in self.components:
if isinstance(c, DataStorage):
c.register_dlt()
def unreliable(self): def unreliable(self):
self.user_trusts = False self.user_trusts = False
i = 0 i = 0

View File

@ -15,6 +15,7 @@ PROOF_ENUM = {
'Register': 'Register', 'Register': 'Register',
'IssueDPP': 'IssueDPP', 'IssueDPP': 'IssueDPP',
'proof_of_recycling': 'proof_of_recycling', 'proof_of_recycling': 'proof_of_recycling',
'Erase': 'Erase',
} }
_sorted_proofs = {'order_by': lambda: Proof.created, 'collection_class': SortedSet} _sorted_proofs = {'order_by': lambda: Proof.created, 'collection_class': SortedSet}