File size: 1,706 Bytes
136c0f7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 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