Role management, login logic, and debug improvements. MariaDB login now uses correct syntax.
This commit is contained in:
@@ -9,9 +9,17 @@ from reportlab.pdfgen import canvas
|
||||
from flask import Blueprint, render_template, request, redirect, url_for, flash
|
||||
import csv
|
||||
from .warehouse import add_location
|
||||
from .settings import settings_handler, edit_access_roles_handler
|
||||
|
||||
bp = Blueprint('main', __name__)
|
||||
warehouse_bp = Blueprint('warehouse', __name__)
|
||||
bp = Blueprint('main', __name__)
|
||||
warehouse_bp = Blueprint('warehouse', __name__)
|
||||
|
||||
@bp.route('/update_role_access/<role>', methods=['POST'])
|
||||
def update_role_access(role):
|
||||
from .settings import update_role_access_handler
|
||||
return update_role_access_handler(role)
|
||||
|
||||
@bp.route('/store_articles')
|
||||
def store_articles():
|
||||
@@ -48,40 +56,47 @@ def login():
|
||||
if request.method == 'POST':
|
||||
username = request.form['username']
|
||||
password = request.form['password']
|
||||
user = User.query.filter_by(username=username, password=password).first()
|
||||
user = None
|
||||
print("Raw form input:", repr(username), repr(password))
|
||||
# Only check external MariaDB for user authentication
|
||||
try:
|
||||
conn = get_db_connection()
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("SHOW TABLES LIKE 'users'")
|
||||
if cursor.fetchone():
|
||||
cursor.execute("SELECT username, password, role FROM users WHERE username=%s AND password=%s", (username.strip(), password.strip()))
|
||||
row = cursor.fetchone()
|
||||
print("External DB query result:", row)
|
||||
if row:
|
||||
user = {'username': row[0], 'password': row[1], 'role': row[2]}
|
||||
conn.close()
|
||||
except Exception as e:
|
||||
print("External DB error:", e)
|
||||
if user:
|
||||
session['user'] = user.username
|
||||
session['role'] = user.role
|
||||
session['user'] = user['username']
|
||||
session['role'] = user['role']
|
||||
print("Logged in as:", session.get('user'), session.get('role'))
|
||||
return redirect(url_for('main.dashboard'))
|
||||
else:
|
||||
print("Login failed for:", username, password)
|
||||
flash('Invalid credentials. Please try again.')
|
||||
return render_template('login.html')
|
||||
|
||||
@bp.route('/dashboard')
|
||||
def dashboard():
|
||||
print("Session user:", session.get('user'), session.get('role'))
|
||||
if 'user' not in session:
|
||||
return redirect(url_for('main.login'))
|
||||
return render_template('dashboard.html')
|
||||
|
||||
@bp.route('/settings')
|
||||
def settings():
|
||||
if 'role' not in session or session['role'] != 'superadmin':
|
||||
flash('Access denied: Superadmin only.')
|
||||
return redirect(url_for('main.dashboard'))
|
||||
|
||||
# Fetch all users from the database
|
||||
users = User.query.all()
|
||||
return settings_handler()
|
||||
|
||||
# Load external database settings from the instance folder
|
||||
external_settings = {}
|
||||
settings_file = os.path.join(current_app.instance_path, 'external_server.conf')
|
||||
if (os.path.exists(settings_file)):
|
||||
with open(settings_file, 'r') as f:
|
||||
for line in f:
|
||||
key, value = line.strip().split('=', 1)
|
||||
external_settings[key] = value
|
||||
|
||||
return render_template('settings.html', users=users, external_settings=external_settings)
|
||||
# Route for editing access roles (superadmin only)
|
||||
@bp.route('/edit_access_roles')
|
||||
def edit_access_roles():
|
||||
return edit_access_roles_handler()
|
||||
|
||||
@bp.route('/quality')
|
||||
def quality():
|
||||
|
||||
Reference in New Issue
Block a user