university-final-iot-backend/app/accounts/models.py

132 lines
3.2 KiB
Python
Raw Normal View History

2018-05-04 13:44:17 +00:00
import jwt
import datetime
from app import db, app
2018-05-03 07:48:24 +00:00
2018-05-03 13:28:57 +00:00
class Account(db.Model):
2018-05-03 07:48:24 +00:00
__tablename__ = 'accounts'
2018-05-03 14:58:44 +00:00
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String, index=True, unique=True)
password = db.Column(db.String)
email = db.Column(db.String, index=True, unique=True)
role_id = db.Column(db.Integer, db.ForeignKey("roles.id"))
2018-05-03 14:40:30 +00:00
role = db.relationship("Role", foreign_keys=[role_id])
2018-05-03 07:48:24 +00:00
2018-05-04 13:44:17 +00:00
def __init__(self, username, password, email, role=2):
2018-05-03 07:48:24 +00:00
self.username = str(username)
self.password = str(password)
2018-05-03 14:58:44 +00:00
self.email = str(email)
2018-05-03 07:48:24 +00:00
if isinstance(role, Role):
self.role_id = role.id
else:
self.role_id = int(role)
2018-05-03 14:58:44 +00:00
def save(self):
2018-05-04 13:44:17 +00:00
"""
2018-05-06 19:42:21 +00:00
Stores this user to database
2018-05-04 13:44:17 +00:00
This may raise errors
"""
2018-05-03 14:58:44 +00:00
db.session.add(self)
db.session.commit()
2018-05-04 13:44:17 +00:00
@staticmethod
def exists_with_any_of(**kwargs):
"""
Checks if user with any of the given arguments exists
"""
for key, value in kwargs.items():
args = {key: value}
if Account.query.filter_by(**args).first():
return True
return False
@staticmethod
def exists(**kwargs):
"""
Checks if user with all of the given arguments exists
"""
if Account.query.filter_by(**kwargs).first():
return True
return False
2018-05-03 14:58:44 +00:00
@staticmethod
def get_all():
2018-05-06 19:42:21 +00:00
"""
Get all stored accounts
"""
2018-05-03 14:58:44 +00:00
return Account.query.all()
@staticmethod
2018-05-04 13:44:17 +00:00
def get(**kwargs):
2018-05-06 19:42:21 +00:00
"""
Get accounts with given filters
Available filters:
* username
* email
* role_id
* id
* password (useless, but not forbidden)
"""
2018-05-04 13:44:17 +00:00
return Account.query.filter_by(**kwargs).first()
def create_auth_token(self):
"""
Generates the Auth Token
:return: string
"""
try:
current_time = datetime.datetime.utcnow()
payload = {
'exp': current_time + datetime.timedelta(days=0, hours=1),
'iat': current_time,
'sub': self.id
}
return jwt.encode(
payload,
app.config.get('SECRET_KEY'),
algorithm='HS256'
).decode('utf-8')
except Exception as e:
return e
2018-05-03 14:58:44 +00:00
2018-05-03 07:48:24 +00:00
def __repr__(self):
return '<Account (name=%s, role=%s)>' % self.username, self.role
2018-05-03 13:28:57 +00:00
class Role(db.Model):
2018-05-03 07:48:24 +00:00
__tablename__ = 'roles'
2018-05-03 14:58:44 +00:00
id = db.Column(db.Integer, primary_key=True)
display_name = db.Column(db.String)
2018-05-03 07:48:24 +00:00
def __init__(self, name):
self.display_name = str(name)
2018-05-03 14:58:44 +00:00
def save(self):
2018-05-06 19:42:21 +00:00
"""
Stores this role to database
This may raise errors
"""
2018-05-03 14:58:44 +00:00
db.session.add(self)
db.session.commit()
@staticmethod
def get_all():
2018-05-06 19:42:21 +00:00
"""
Get all stored roles
"""
2018-05-03 14:58:44 +00:00
return Role.query.all()
@staticmethod
def get(roleId):
2018-05-06 19:42:21 +00:00
"""
Get role with id = roleId
"""
2018-05-04 13:44:17 +00:00
return Role.query.filter_by(id=roleId)
2018-05-03 14:58:44 +00:00
2018-05-03 07:48:24 +00:00
def __repr__(self):
return '<Role %s>' % self.name