2015-11-25 15:29:12 +00:00
|
|
|
from app import db
|
|
|
|
|
from flask import current_app
|
|
|
|
|
|
|
|
|
|
DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%fZ"
|
|
|
|
|
DATE_FORMAT = "%Y-%m-%d"
|
|
|
|
|
|
|
|
|
|
|
2015-12-10 14:48:01 +00:00
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
2015-11-25 15:29:12 +00:00
|
|
|
class Roles(db.Model):
|
|
|
|
|
__tablename__ = 'roles'
|
|
|
|
|
|
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
|
|
|
role = db.Column(db.String, nullable=False, unique=True)
|
|
|
|
|
|
|
|
|
|
|
2015-11-30 11:21:51 +00:00
|
|
|
class User(db.Model):
|
2015-11-25 15:29:12 +00:00
|
|
|
__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)
|
2015-11-25 15:29:12 +00:00
|
|
|
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)
|
|
|
|
|
|
2015-11-27 16:25:56 +00:00
|
|
|
def is_authenticated(self):
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def is_active(self):
|
2015-11-30 16:44:59 +00:00
|
|
|
if self.state == 'inactive':
|
|
|
|
|
return False
|
|
|
|
|
else:
|
|
|
|
|
return True
|
2015-11-27 16:25:56 +00:00
|
|
|
|
|
|
|
|
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):
|
2015-11-30 16:33:45 +00:00
|
|
|
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
|
2015-11-27 16:25:56 +00:00
|
|
|
|
2015-11-25 15:29:12 +00:00
|
|
|
|
2015-12-14 15:59:29 +00:00
|
|
|
user_to_service = db.Table(
|
|
|
|
|
'user_to_service',
|
|
|
|
|
db.Model.metadata,
|
|
|
|
|
db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
|
|
|
|
|
db.Column('service_id', db.Integer, db.ForeignKey('services.id'))
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Service(db.Model):
|
|
|
|
|
__tablename__ = 'services'
|
|
|
|
|
|
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
2015-12-14 17:12:28 +00:00
|
|
|
name = db.Column(db.String(255), nullable=False, unique=True)
|
2015-12-14 15:59:29 +00:00
|
|
|
|
|
|
|
|
token_id = db.Column(db.BigInteger, index=True, unique=True)
|
|
|
|
|
created_at = db.Column(db.DateTime, index=False, unique=False, nullable=False)
|
|
|
|
|
active = db.Column(db.Boolean, index=False, unique=False, nullable=False)
|
|
|
|
|
limit = db.Column(db.BigInteger, index=False, unique=False, nullable=False)
|
|
|
|
|
users = db.relationship('User', secondary=user_to_service, backref=db.backref('user_to_service', lazy='dynamic'))
|
|
|
|
|
restricted = db.Column(db.Boolean, index=False, unique=False, nullable=False)
|
|
|
|
|
|
|
|
|
|
def serialize(self):
|
|
|
|
|
serialized = {
|
|
|
|
|
'id': self.id,
|
|
|
|
|
'name': self.name,
|
|
|
|
|
'createdAt': self.created_at.strftime(DATETIME_FORMAT),
|
|
|
|
|
'active': self.active,
|
|
|
|
|
'restricted': self.restricted,
|
|
|
|
|
'limit': self.limit,
|
|
|
|
|
'user': self.users.serialize()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return filter_null_value_fields(serialized)
|
|
|
|
|
|
|
|
|
|
|
2015-11-25 15:29:12 +00:00
|
|
|
def filter_null_value_fields(obj):
|
|
|
|
|
return dict(
|
|
|
|
|
filter(lambda x: x[1] is not None, obj.items())
|
|
|
|
|
)
|