# webpass/models.py from flask_login import UserMixin from . import db class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(150), unique=True) password = db.Column(db.String(150)) first_name = db.Column(db.String(150)) google_id = db.Column(db.String(150)) # --- THE FIX: Change these to db.Text --- profile_image = db.Column(db.Text) # <--- Was likely db.String(something) orig_profile_image = db.Column(db.Text) # <--- Was likely db.String(something) # Relationship to biometric keys biometric_devices = db.relationship("BiometricDevice", backref="user", lazy=True) class BiometricDevice(db.Model): """ Stores the Public Key for WebAuthn/FIDO2 Authentication. """ __tablename__ = "biometric_device" id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) credential_id = db.Column(db.String(255), unique=True, nullable=False) # The ID of the key on the phone public_key = db.Column(db.LargeBinary, nullable=False) # The actual public key sign_count = db.Column(db.Integer, default=0) # Replay protection class DeadDrop(db.Model): __tablename__ = "dead_drop" id = db.Column(db.String(36), primary_key=True) ciphertext = db.Column(db.Text, nullable=False) iv = db.Column(db.String(64), nullable=False) salt = db.Column(db.String(64), nullable=False) expires_at = db.Column(db.DateTime, nullable=False) created_at = db.Column(db.DateTime) view_time = db.Column(db.Integer, default=30) # NEW: Time in seconds