__init__.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from flask import Flask
  2. from flask_sqlalchemy import SQLAlchemy
  3. from flask_login import LoginManager # Flask Login
  4. from os import path
  5. # Talisman
  6. from flask_talisman import Talisman
  7. db = SQLAlchemy()
  8. DB_NAME = "database.db"
  9. def create_app():
  10. app = Flask(__name__)
  11. app.config['SECRET_KEY'] = 'Th15_iS-M1!S3cre4' # used to encrypt session cookies
  12. app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
  13. db.init_app(app)
  14. # import blueprints
  15. from .accounts import accounts
  16. from .dashboards import dashboards
  17. # register blueprints
  18. app.register_blueprint(accounts, url_prefix = '/') # allows the setting of prefixes for pages
  19. app.register_blueprint(dashboards, url_prefix = '/')
  20. # import Database models
  21. from .models import User
  22. create_database(app)
  23. login_manager = LoginManager()
  24. # redirect here if not logged in
  25. login_manager.login_view = 'accounts.login'
  26. login_manager.init_app(app)
  27. # Cookie Protections
  28. app.config.update(
  29. SESSION_COOKIE_SECURE=True,
  30. SESSION_COOKIE_HTTPONLY=True,
  31. SESSION_COOKIE_SAMESITE='Lax',
  32. )
  33. @login_manager.user_loader
  34. # tells flask how to load a user from the db
  35. def load_user(id):
  36. return User.query.get(int(id)) # by default get() looks for the primary key
  37. # Talisman
  38. csp = {
  39. 'default-src': [
  40. '\'self\'',
  41. '*.stripe.com'
  42. ]
  43. }
  44. Talisman(app, content_security_policy=csp)
  45. return app
  46. def create_database(app):
  47. if not path.exists('app/' + DB_NAME):
  48. db.create_all(app=app)
  49. print('Created Database!')