This commit refactors the entire backend application into a more structured and maintainable Flask project. It introduces an application factory pattern, consolidates routes into a blueprint, and implements a robust authentication and database layer. - Introduces a Flask application factory (`create_app` in `main.py`) for better organization and testability. - Consolidates all API routes into a single blueprint (`routes/api.py`) for modularity. - Implements a new basic authentication system using a decorator (`@requires_basic_auth`) to secure all endpoints. - Refactors the database access layer with standardized query execution and connection handling. - Adds new modules for core logic, including an account checker (`checker.py`) and user retrieval (`get_users.py`). - Updates the VSCode launch configuration to support the new Flask application structure. BREAKING CHANGE: The application has been completely restructured. The old `server.py` entry point is removed. The application should now be run via the app factory in `main.py`. All API endpoints now require basic authentication.
20 lines
683 B
Python
20 lines
683 B
Python
from functools import wraps
|
|
from flask import request, jsonify, Blueprint
|
|
from ktvmanager.lib.get_users import get_users
|
|
|
|
auth_blueprint = Blueprint("auth", __name__)
|
|
|
|
def check_auth(username, password):
|
|
users = get_users()
|
|
stored_password = users.get(username)
|
|
return stored_password == password
|
|
|
|
def requires_basic_auth(f):
|
|
@wraps(f)
|
|
def decorated(*args, **kwargs):
|
|
auth = request.authorization
|
|
if not auth or not check_auth(auth.username, auth.password):
|
|
return jsonify({"message": "Could not verify"}), 401, {'WWW-Authenticate': 'Basic realm="Login Required"'}
|
|
return f(auth.username, *args, **kwargs)
|
|
return decorated
|