Funktionstrennung 1.0

This commit is contained in:
Nirodan
2025-06-17 11:28:06 +02:00
parent 97acda1d2b
commit 8ca650cf11
11 changed files with 199 additions and 48 deletions
+9
View File
@@ -0,0 +1,9 @@
from flask import Blueprint
from auth.login import login_route
from auth.logout import logout_route
auth_bp = Blueprint('auth', __name__)
# Endpunkte registrieren
auth_bp.add_url_rule('/api/login', view_func=login_route, methods=['POST'])
auth_bp.add_url_rule('/api/logout', view_func=logout_route, methods=['POST'])
+45
View File
@@ -0,0 +1,45 @@
from flask import request, jsonify
from mysql.connector import connect
from werkzeug.security import check_password_hash
from datetime import datetime, timedelta
import jwt
from util.logger import logger
from util.db_config import load_db_config
from auth.token import SECRET_KEY
def login_route():
data = request.get_json()
username = data.get('username')
password = data.get('password')
try:
config = load_db_config()
conn = connect(**config)
cursor = conn.cursor(dictionary=True)
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
user = cursor.fetchone()
cursor.close()
conn.close()
if user and check_password_hash(user['password'], password):
logger.info(f"✅ Login successful: {username}")
payload = {
"username": user['username'],
"role": user['role'],
"exp": datetime.utcnow() + timedelta(minutes=60)
}
token = jwt.encode(payload, SECRET_KEY, algorithm="HS256")
return jsonify({
"token": token,
"role": user['role']
})
logger.warning(f"⛔ Login failed: {username}")
return jsonify({"message": "Login failed"}), 401
except Exception as e:
logger.error(f"[Login Error] {e}")
return jsonify({"message": "Server error"}), 500
+6
View File
@@ -0,0 +1,6 @@
from flask import jsonify
from util.logger import logger
def logout_route():
logger.info("👋 Logout called")
return jsonify({"message": "Logout successful"})
+22
View File
@@ -0,0 +1,22 @@
from flask import request
from jwt import decode, ExpiredSignatureError, InvalidTokenError
from util.logger import logger
SECRET_KEY = "bitte_hier_dein_geheimes_passwort_setzen" # später .env verwenden
def verify_token():
auth_header = request.headers.get("Authorization", "")
if not auth_header.startswith("Bearer "):
logger.warning("🔐 Invalid Bearer header")
return None
token = auth_header.replace("Bearer ", "")
try:
decoded = decode(token, SECRET_KEY, algorithms=["HS256"])
return decoded
except ExpiredSignatureError:
logger.warning("🔐 Token expired")
return None
except InvalidTokenError:
logger.warning("🔐 Invalid token")
return None