"""Hash implementation and save in database """ import hashlib from citext import CIText from sqlalchemy import Column from sqlalchemy.dialects.postgresql import UUID from uuid import uuid4 from ereuse_devicehub.db import db class ReportHash(db.Model): """Save the hash than is create when one report is download. """ id = Column(UUID(as_uuid=True), primary_key=True, default=uuid4) id.comment = """The identifier of the device for this database. Used only internally for software; users should not use this. """ created = db.Column(db.TIMESTAMP(timezone=True), nullable=False, index=True, server_default=db.text('CURRENT_TIMESTAMP')) created.comment = """When Devicehub created this.""" hash3 = db.Column(CIText(), nullable=False) hash3.comment = """The normalized name of the hash.""" def insert_hash(bfile, commit=True): hash3 = hashlib.sha3_256(bfile).hexdigest() db_hash = ReportHash(hash3=hash3) db.session.add(db_hash) if commit: db.session.commit() db.session.flush() return hash3 def verify_hash(bfile): hash3 = hashlib.sha3_256(bfile.read()).hexdigest() return ReportHash.query.filter(ReportHash.hash3 == hash3).count()