backend/models/postgis/application.py (52 lines of code) (raw):
from backend import db
from backend.models.dtos.application_dto import ApplicationDTO, ApplicationsDTO
from backend.models.postgis.utils import timestamp
from backend.services.users.authentication_service import AuthenticationService
class Application(db.Model):
""" Describes an application that is authorized to access the TM """
__tablename__ = "application_keys"
id = db.Column(db.BigInteger, primary_key=True)
user = db.Column(
db.BigInteger, db.ForeignKey("users.id", name="fk_users"), nullable=False
)
app_key = db.Column(db.String, nullable=False)
created = db.Column(db.DateTime, default=timestamp)
def generate_application_key(self, user_id):
"""
Creates a key for use with an application.
"""
token = AuthenticationService.generate_session_token_for_user(user_id)
return token
def create(self, user_id):
application = Application()
application.app_key = self.generate_application_key(user_id)
application.user = user_id
db.session.add(application)
db.session.commit()
return application
def save(self):
db.session.commit()
def delete(self):
db.session.delete(self)
db.session.commit()
@staticmethod
def get_token(appkey: str):
return (
db.session.query(Application)
.filter(Application.app_key == appkey)
.one_or_none()
)
@staticmethod
def get_all_for_user(user: int):
query = db.session.query(Application).filter(Application.user == user)
applications_dto = ApplicationsDTO()
for r in query:
application_dto = ApplicationDTO()
application_dto.id = r.id
application_dto.user = r.user
application_dto.app_key = r.app_key
application_dto.created = r.created
applications_dto.applications.append(application_dto)
return applications_dto
def as_dto(self):
app_dto = ApplicationDTO()
app_dto.user = self.user
app_dto.app_key = self.app_key
app_dto.created = self.created
return app_dto