04/16 Upload codebase

This commit is contained in:
2026-04-16 08:27:07 -04:00
parent 91be5c1f5c
commit 457016b8d4
43 changed files with 6241 additions and 0 deletions
+77
View File
@@ -0,0 +1,77 @@
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
from flask_wtf.csrf import CSRFProtect
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
from flask_cors import CORS
from .config import config
db = SQLAlchemy()
migrate = Migrate()
login_manager = LoginManager()
csrf = CSRFProtect()
limiter = Limiter(key_func=get_remote_address)
def create_app(config_name: str = 'development') -> Flask:
app = Flask(__name__)
app.config.from_object(config[config_name])
# Extensions
db.init_app(app)
migrate.init_app(app, db)
login_manager.init_app(app)
csrf.init_app(app)
limiter.init_app(app)
CORS(app, resources={r'/api/*': {'origins': '*'}})
# Ensure all models are imported so SQLAlchemy knows about them
from .models.user import User
from .models.folder import Folder
from .models.vault_item import VaultItem
from .models.token_blacklist import TokenBlacklist
from .models.shared_item import SharedItem
from .models.emergency_access import EmergencyAccess
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
# Blueprints
from .routes.auth import auth_bp
from .routes.vault import vault_bp
from .routes.folders import folders_bp
from .routes.sharing import sharing_bp
from .routes.emergency import emergency_bp
app.register_blueprint(auth_bp, url_prefix='/api/auth')
app.register_blueprint(vault_bp, url_prefix='/api/vault')
app.register_blueprint(folders_bp, url_prefix='/api/folders')
app.register_blueprint(sharing_bp, url_prefix='/api/sharing')
app.register_blueprint(emergency_bp, url_prefix='/api/emergency')
# Exempt all API blueprints from CSRF — JWT bearer tokens make CSRF irrelevant
csrf.exempt(auth_bp)
csrf.exempt(vault_bp)
csrf.exempt(folders_bp)
csrf.exempt(sharing_bp)
csrf.exempt(emergency_bp)
# Page-serving routes
@app.route('/')
@app.route('/login')
def login_page():
return render_template('auth/login.html')
@app.route('/register')
def register_page():
return render_template('auth/register.html')
@app.route('/vault')
def vault_page():
return render_template('vault/index.html')
return app