40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""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):
|
|
hash3 = hashlib.sha3_256(bfile).hexdigest()
|
|
db_hash = ReportHash(hash3=hash3)
|
|
db.session.add(db_hash)
|
|
db.session.commit()
|
|
db.session.flush()
|
|
|
|
|
|
def verify_hash(bfile):
|
|
hash3 = hashlib.sha3_256(bfile.read()).hexdigest()
|
|
return ReportHash.query.filter(ReportHash.hash3 == hash3).count()
|