32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
# dashboard/callbacks/auth_callbacks.py
|
||
import dash
|
||
from dash import Input, Output, State, dcc
|
||
from flask import session
|
||
from utils.auth import check_password, get_user_role
|
||
from config import ENV
|
||
from utils.db import execute_query
|
||
|
||
@dash.callback(
|
||
Output("login-feedback", "children"),
|
||
Output("header-right", "children"),
|
||
Input("btn-login", "n_clicks"),
|
||
State("input-user", "value"),
|
||
State("input-pass", "value"),
|
||
prevent_initial_call=True
|
||
)
|
||
def login_user(n_clicks, username, password):
|
||
if ENV == "development":
|
||
# Dev‐Bypass: setze immer Admin‐Session und leite weiter
|
||
session["username"] = "dev_admin"
|
||
session["role"] = "admin"
|
||
return dcc.Location(href="/overview", id="redirect-dev"), None
|
||
|
||
# Produktions‐Login: User in DB suchen
|
||
user = execute_query("SELECT username, pwd_hash, role FROM users WHERE username=%s", (username,), fetch_one=True)
|
||
if user and check_password(password, user["pwd_hash"]):
|
||
session["username"] = user["username"]
|
||
session["role"] = user["role"]
|
||
return dcc.Location(href="/overview", id="redirect-ok"), None
|
||
else:
|
||
return "Ungültige Zugangsdaten.", None
|