WebPass / webpass /models.py
ag235772's picture
Initial Release: WebPass V2 with Steganography, Crypto Vault, and Cloud Toggle
136c0f7
# 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