1
0
Fork 0
mirror of https://codeberg.org/Mo8it/AdvLabDB.git synced 2024-09-19 18:31:16 +00:00
AdvLabDB/advlabdb/__init__.py
2022-05-29 19:41:46 +02:00

93 lines
2.5 KiB
Python

from os import environ, makedirs
from flask import Flask
from flask_admin import Admin
from flask_security import Security, SQLAlchemyUserDatastore
from flask_security.models import fsqla_v2 as fsqla
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from dotenv import load_dotenv
from .advlabdb_independent_funs import parse_bool
def set_from_env(app, var):
app.config[var] = environ[var]
load_dotenv(".env")
app = Flask(__name__)
set_from_env(app, "SERVER_NAME")
set_from_env(app, "SECRET_KEY")
# Setup Flask-SQLAlchemy
app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///../{environ['RELATIVE_DB_DIR']}/advlab.db"
makedirs(environ["RELATIVE_DB_DIR"], exist_ok=True)
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)
fsqla.FsModels.set_db_info(db)
# Setup Flask-Migrate
migrate = Migrate(app, db)
from . import customClasses
# Setup Flask-Admin
app.config["FLASK_ADMIN_FLUID_LAYOUT"] = True
adminSpace = Admin(
app,
name="Admin@AdvLabDB",
url="/admin",
endpoint="adminSpace",
template_mode="bootstrap3",
index_view=customClasses.SecureAdminIndexView(name="Admin", url="/admin", endpoint="adminSpace"),
)
assistantSpace = Admin(
app,
name="Assistant@AdvLabDB",
url="/assistant",
endpoint="assistantSpace",
template_mode="bootstrap3",
index_view=customClasses.SecureAssistantIndexView(name="Assistant", url="/assistant", endpoint="assistantSpace"),
)
from . import models
# Setup Flask-Security
# Enable features
app.config["SECURITY_TRACKABLE"] = True
# Explicitly disable features
app.config["SECURITY_CONFIRMABLE"] = False
app.config["SECURITY_REGISTERABLE"] = False
app.config["SECURITY_RECOVERABLE"] = False
app.config["SECURITY_PASSWORDLESS"] = False
app.config["SECURITY_CHANGEABLE"] = False
app.config["SECURITY_TWO_FACTOR"] = False
app.config["SECURITY_UNIFIED_SIGNIN"] = False
app.config["SECURITY_EMAIL_VALIDATOR_ARGS"] = {
"check_deliverability": parse_bool(environ["CHECK_EMAIL_DELIVERABILITY"])
}
set_from_env(app, "SECURITY_PASSWORD_SALT")
app.config["SECURITY_PASSWORD_LENGTH_MIN"] = 15
# TODO: app.config["SECURITY_LOGIN_USER_TEMPLATE"] =
user_datastore = SQLAlchemyUserDatastore(db, models.User, models.Role)
Security(app, user_datastore)
try:
from . import routes, adminModelViews, assistantModelViews
except Exception as ex:
print(
"\nYou are probably initializing the database with a script. If not, then you have to worry about not being able to import in __init__.py!\n"
)
print(str(ex))