Spaces:
Sleeping
Sleeping
Update admin_module.py
Browse files- admin_module.py +42 -4
admin_module.py
CHANGED
|
@@ -58,7 +58,25 @@ class AdminManager:
|
|
| 58 |
|
| 59 |
def is_admin_logged_in(self):
|
| 60 |
"""Check if admin is logged in"""
|
| 61 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
|
| 63 |
def login_admin(self, username, password):
|
| 64 |
"""Admin login"""
|
|
@@ -66,8 +84,13 @@ class AdminManager:
|
|
| 66 |
session['admin_authenticated'] = True
|
| 67 |
session['admin_username'] = username
|
| 68 |
session['admin_login_time'] = datetime.now().isoformat()
|
|
|
|
|
|
|
|
|
|
| 69 |
return True
|
| 70 |
-
|
|
|
|
|
|
|
| 71 |
|
| 72 |
def logout_admin(self):
|
| 73 |
"""Admin logout"""
|
|
@@ -515,8 +538,23 @@ class AdminManager:
|
|
| 515 |
def admin_required(f):
|
| 516 |
@wraps(f)
|
| 517 |
def decorated_function(*args, **kwargs):
|
| 518 |
-
|
| 519 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 520 |
return f(*args, **kwargs)
|
| 521 |
return decorated_function
|
| 522 |
|
|
|
|
| 58 |
|
| 59 |
def is_admin_logged_in(self):
|
| 60 |
"""Check if admin is logged in"""
|
| 61 |
+
authenticated = session.get('admin_authenticated', False)
|
| 62 |
+
username = session.get('admin_username')
|
| 63 |
+
login_time = session.get('admin_login_time')
|
| 64 |
+
|
| 65 |
+
# Debug logging
|
| 66 |
+
logger.info(f"Admin auth check: authenticated={authenticated}, username={username}, login_time={login_time}")
|
| 67 |
+
|
| 68 |
+
# Check if session has expired (24 hours)
|
| 69 |
+
if authenticated and login_time:
|
| 70 |
+
try:
|
| 71 |
+
login_datetime = datetime.fromisoformat(login_time)
|
| 72 |
+
if datetime.now() - login_datetime > timedelta(hours=24):
|
| 73 |
+
logger.info("Admin session expired, logging out")
|
| 74 |
+
self.logout_admin()
|
| 75 |
+
return False
|
| 76 |
+
except Exception as e:
|
| 77 |
+
logger.error(f"Error checking session expiry: {e}")
|
| 78 |
+
|
| 79 |
+
return authenticated
|
| 80 |
|
| 81 |
def login_admin(self, username, password):
|
| 82 |
"""Admin login"""
|
|
|
|
| 84 |
session['admin_authenticated'] = True
|
| 85 |
session['admin_username'] = username
|
| 86 |
session['admin_login_time'] = datetime.now().isoformat()
|
| 87 |
+
session.permanent = True # Make session permanent
|
| 88 |
+
|
| 89 |
+
logger.info(f"Admin login successful: {username}")
|
| 90 |
return True
|
| 91 |
+
else:
|
| 92 |
+
logger.warning(f"Admin login failed for username: {username}")
|
| 93 |
+
return False
|
| 94 |
|
| 95 |
def logout_admin(self):
|
| 96 |
"""Admin logout"""
|
|
|
|
| 538 |
def admin_required(f):
|
| 539 |
@wraps(f)
|
| 540 |
def decorated_function(*args, **kwargs):
|
| 541 |
+
is_authenticated = admin_manager.is_admin_logged_in()
|
| 542 |
+
|
| 543 |
+
# Enhanced logging for debugging
|
| 544 |
+
from flask import session, request
|
| 545 |
+
logger.info(f"Admin required check for {f.__name__}: authenticated={is_authenticated}")
|
| 546 |
+
logger.info(f"Session keys: {list(session.keys())}")
|
| 547 |
+
logger.info(f"Request URL: {request.url}")
|
| 548 |
+
|
| 549 |
+
if not is_authenticated:
|
| 550 |
+
logger.warning(f"Admin authentication failed for {f.__name__}")
|
| 551 |
+
return jsonify({
|
| 552 |
+
'error': 'Admin authentication required',
|
| 553 |
+
'authenticated': False,
|
| 554 |
+
'endpoint': f.__name__
|
| 555 |
+
}), 401
|
| 556 |
+
|
| 557 |
+
logger.info(f"Admin access granted to {f.__name__}")
|
| 558 |
return f(*args, **kwargs)
|
| 559 |
return decorated_function
|
| 560 |
|