class User(UserMixin, db.Model, RBACUserMixin): """ Used by Flask-Security and Flask-Login. Represents a user of Security Monkey. """ id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime()) daily_audit_email = Column(Boolean()) change_reports = Column(String(32)) # All, OnlyWithIssues, None # Flask-Security SECURITY_TRACKABLE last_login_at = Column(DateTime()) current_login_at = Column(DateTime()) login_count = Column(Integer) # Why 45 characters for IP Address ? # See http://stackoverflow.com/questions/166132/maximum-length-of-the-textual-representation-of-an-ipv6-address/166157#166157 last_login_ip = Column(db.String(45)) current_login_ip = Column(db.String(45)) accounts = relationship("Account", secondary=association_table) item_audits = relationship("ItemAudit", uselist=False, backref="user") revision_comments = relationship("ItemRevisionComment", backref="user") item_comments = relationship("ItemComment", backref="user") roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) role = db.Column(db.String(30), default="View") def __str__(self): return '<User id=%s email=%s>' % (self.id, self.email)
class Role(db.Model, RoleMixin): """ Used by Flask-Login / the auth system to check user permissions. """ id = db.Column(db.Integer(), primary_key=True) name = db.Column(db.String(80), unique=True) description = db.Column(db.String(255))
class Role(db.Model, RoleMixin): """ Currently unused. Will soon have roles for limited users and admin users. """ id = db.Column(db.Integer(), primary_key=True) name = db.Column(db.String(80), unique=True) description = db.Column(db.String(255))
class AccountTypeCustomValues(db.Model): """ Defines the values for custom fields defined in AccountTypeCustomFields. """ __tablename__ = "account_type_values" id = Column(Integer, primary_key=True) name = Column(db.String(64)) value = db.Column(db.String(256)) account_id = Column(Integer, ForeignKey("account.id"), nullable=False) unique_const = UniqueConstraint('account_id', 'name')
class AccountType(db.Model): """ Defines the type of account based on where the data lives, e.g. AWS. """ __tablename__ = "account_type" id = Column(Integer, primary_key=True) name = db.Column(db.String(80), unique=True) accounts = relationship("Account", backref="account_type")
class WatcherConfig(db.Model): """ Defines watcher configurations for interval and active """ __tablename__ = "watcher_config" id = Column(Integer, primary_key=True) index = Column(db.String(80), unique=True) interval = Column(Integer, nullable=False) active = Column(Boolean(), nullable=False)
class User(db.Model, UserMixin): """ Used by Flask-Security and Flask-Login. Represents a user of Security Monkey. """ id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime()) daily_audit_email = Column(Boolean()) change_reports = Column(String(32)) # All, OnlyWithIssues, None accounts = relationship("Account", secondary=association_table) item_audits = relationship("ItemAudit", uselist=False, backref="user") revision_comments = relationship("ItemRevisionComment", backref="user") item_comments = relationship("ItemComment", backref="user") roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) def __str__(self): return '<User id=%s email=%s>' % (self.id, self.email)