102 lines
2.6 KiB
Python
102 lines
2.6 KiB
Python
from flask import Flask
|
|
from flask_login import LoginManager, UserMixin
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
from flask_talisman import Talisman
|
|
|
|
from get_mysql import get_mysql
|
|
import atexit
|
|
from flask_apscheduler import APScheduler
|
|
|
|
def create():
|
|
"""
|
|
Erstellt die Flask-App inkl. Datenbank und Login-Manager.
|
|
:return app:
|
|
"""
|
|
app = Flask(__name__)
|
|
dbpw = get_mysql()[1]
|
|
dbun = get_mysql()[0]
|
|
|
|
app.config['SECRET_KEY'] = 'SECRET_KEY_GOES_HERE'
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://' + dbun + ':' + dbpw + '@localhost/paulmrtn_DUALHUB'
|
|
db.init_app(app)
|
|
|
|
login_manager = LoginManager()
|
|
login_manager.init_app(app)
|
|
login_manager.login_view = "login"
|
|
|
|
# Shut down the scheduler when exiting the app
|
|
atexit.register(lambda: scheduler.shutdown())
|
|
|
|
@login_manager.user_loader
|
|
def load_user(uid: int):
|
|
return User.query.filter_by(id=uid).first()
|
|
|
|
return app
|
|
|
|
|
|
db = SQLAlchemy()
|
|
|
|
|
|
class User(UserMixin, db.Model):
|
|
"""
|
|
Datenbank-Modell für User.
|
|
"""
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
email = db.Column(db.String(255), unique=True)
|
|
name = db.Column(db.String(255))
|
|
kurs = db.Column(db.String(15))
|
|
|
|
|
|
class Dualis(db.Model):
|
|
"""
|
|
Datenbank-Modell für Dualis.
|
|
"""
|
|
token = db.Column(db.String(255), unique=True)
|
|
uid = db.Column(db.Integer, primary_key=True)
|
|
token_created = db.Column(db.Integer)
|
|
semester = db.Column(db.String(15))
|
|
|
|
|
|
class Semesterlist(db.Model):
|
|
"""
|
|
Datenbank-Modell für Semester-Liste.
|
|
"""
|
|
uid = db.Column(db.Integer)
|
|
semestername = db.Column(db.String(25))
|
|
semesterid = db.Column(db.String(15))
|
|
itemid = db.Column(db.Integer, primary_key=True)
|
|
|
|
|
|
class Rapla(db.Model):
|
|
"""
|
|
Datenbank-Modell für Rapla.
|
|
"""
|
|
name = db.Column(db.String(15), primary_key=True)
|
|
file = db.Column(db.String(20), unique=True)
|
|
link = db.Column(db.String(255), unique=True)
|
|
|
|
|
|
class Meals(db.Model):
|
|
"""
|
|
Datenbank-Modell für Meals.
|
|
"""
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
date = db.Column(db.Date)
|
|
name = db.Column(db.String(200))
|
|
vegetarian = db.Column(db.Boolean)
|
|
vegan = db.Column(db.Boolean)
|
|
schwein = db.Column(db.Boolean)
|
|
|
|
|
|
scheduler = APScheduler()
|
|
app = create()
|
|
with app.app_context():
|
|
print("Creating Tables....")
|
|
db.create_all()
|
|
def_src = ["*.paulmartin.cloud", '\'self\'']
|
|
Talisman(app, content_security_policy={"default-src": def_src, "script-src": def_src # + ["'unsafe-inline'"]
|
|
})
|
|
scheduler.init_app(app)
|
|
scheduler.start()
|
|
scheduler.api_enabled = True
|