Files
docupulse/app.py
2025-05-28 21:50:18 +02:00

96 lines
3.0 KiB
Python

from flask import Flask, send_from_directory
from flask_migrate import Migrate
from dotenv import load_dotenv
import os
from models import User
from flask_wtf.csrf import generate_csrf
from routes.room_files import room_files_bp
from routes.user import user_bp
from routes.room_members import room_members_bp
from routes.trash import trash_bp
from tasks import cleanup_trash
import click
from utils import timeago
from extensions import db, login_manager, csrf
# Load environment variables
load_dotenv()
def create_app():
app = Flask(__name__)
# Configure the database
app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL', 'postgresql://postgres:1253@localhost:5432/docupulse')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'your-secure-secret-key-here')
app.config['UPLOAD_FOLDER'] = os.path.join(app.root_path, 'static', 'uploads')
app.config['CSS_VERSION'] = os.getenv('CSS_VERSION', '1.0.0') # Add CSS version for cache busting
# Initialize extensions
db.init_app(app)
migrate = Migrate(app, db)
login_manager.init_app(app)
login_manager.login_view = 'auth.login'
csrf.init_app(app)
@app.context_processor
def inject_csrf_token():
return dict(csrf_token=generate_csrf())
@app.context_processor
def inject_config():
return dict(config=app.config)
# User loader for Flask-Login
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
# Initialize routes
from routes import init_app
init_app(app)
app.register_blueprint(room_files_bp, url_prefix='/api/rooms')
app.register_blueprint(room_members_bp, url_prefix='/api/rooms')
app.register_blueprint(trash_bp, url_prefix='/api/rooms')
app.register_blueprint(user_bp)
@app.cli.command("cleanup-trash")
def cleanup_trash_command():
"""Clean up files that have been in trash for more than 30 days."""
cleanup_trash()
click.echo("Trash cleanup completed.")
@app.cli.command("create-admin")
def create_admin():
"""Create the default administrator user."""
admin = User.query.filter_by(email='administrator@docupulse.com').first()
if admin:
click.echo("Admin user already exists.")
return
admin = User(
username='administrator',
email='administrator@docupulse.com',
last_name='None',
company='docupulse',
is_admin=True,
is_active=True
)
admin.set_password('q]H488h[8?.A')
db.session.add(admin)
db.session.commit()
click.echo("Default administrator user created successfully.")
# Register custom filters
app.jinja_env.filters['timeago'] = timeago
return app
app = create_app()
@app.route('/uploads/profile_pics/<filename>')
def profile_pic(filename):
return send_from_directory(os.path.join(os.getcwd(), 'uploads', 'profile_pics'), filename)
if __name__ == '__main__':
app.run(debug=True)