Files
notifications-admin/app/models.py

85 lines
2.9 KiB
Python
Raw Normal View History

from app import db
from flask import current_app
DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
DATE_FORMAT = "%Y-%m-%d"
class VerifyCodes(db.Model):
__tablename__ = 'verify_codes'
code_types = ['email', 'sms']
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), index=True, unique=False, nullable=False)
code = db.Column(db.String, nullable=False)
code_type = db.Column(db.Enum(code_types, name='verify_code_types'), index=False, unique=False, nullable=False)
expiry_datetime = db.Column(db.DateTime, nullable=False)
code_used = db.Column(db.Boolean, default=False)
class Roles(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
role = db.Column(db.String, nullable=False, unique=True)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
2015-12-09 13:20:00 +00:00
name = db.Column(db.String, nullable=False, index=True, unique=False)
email_address = db.Column(db.String(255), nullable=False, index=True)
password = db.Column(db.String, index=False, unique=False, nullable=False)
mobile_number = db.Column(db.String, index=False, unique=False, nullable=False)
created_at = db.Column(db.DateTime, index=False, unique=False, nullable=False)
updated_at = db.Column(db.DateTime, index=False, unique=False, nullable=True)
password_changed_at = db.Column(db.DateTime, index=False, unique=False, nullable=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'), index=True, unique=False, nullable=False)
logged_in_at = db.Column(db.DateTime, nullable=True)
failed_login_count = db.Column(db.Integer, nullable=False, default=0)
state = db.Column(db.String, nullable=False, default='pending')
def serialize(self):
serialized = {
'id': self.id,
'name': self.name,
'emailAddress': self.email_address,
'locked': self.failed_login_count > current_app.config['MAX_FAILED_LOGIN_COUNT'],
'createdAt': self.created_at.strftime(DATETIME_FORMAT),
'updatedAt': self.updated_at.strftime(DATETIME_FORMAT),
'role': self.role,
'passwordChangedAt': self.password_changed_at.strftime(DATETIME_FORMAT),
'failedLoginCount': self.failed_login_count
}
return filter_null_value_fields(serialized)
def is_authenticated(self):
return True
def is_active(self):
if self.state == 'inactive':
return False
else:
return True
def is_anonymous(self):
return False
def get_id(self):
return self.id
2015-11-30 14:32:58 +00:00
def is_locked(self):
if self.failed_login_count < current_app.config['MAX_FAILED_LOGIN_COUNT']:
2015-11-30 14:32:58 +00:00
return False
else:
return True
def filter_null_value_fields(obj):
return dict(
filter(lambda x: x[1] is not None, obj.items())
)