""" Simple admin blueprint that works without Redis/PostgreSQL """ from flask import Blueprint, request, jsonify, render_template, redirect, url_for, session from functools import wraps import os import logging logger = logging.getLogger(__name__) # Create admin blueprint admin_bp = Blueprint('admin', __name__, template_folder='admin/templates', static_folder='admin/static', static_url_path='/admin/static') def init_admin(app): """Initialize admin module with app configuration""" logger.info("Admin dashboard initialized (simple mode)") def admin_required(f): """Decorator to require admin authentication""" @wraps(f) def decorated_function(*args, **kwargs): # Check if user is logged in as admin if not session.get('admin_logged_in'): # Check for admin token in headers (for API access) auth_header = request.headers.get('Authorization', '') if auth_header.startswith('Bearer '): token = auth_header[7:] expected_token = os.environ.get('ADMIN_TOKEN', 'default-admin-token') if token == expected_token: return f(*args, **kwargs) # Redirect to login for web access return redirect(url_for('admin.login', next=request.url)) return f(*args, **kwargs) return decorated_function @admin_bp.route('/') @admin_required def dashboard(): """Main admin dashboard""" # Use simple dashboard template return render_template('dashboard_simple.html') @admin_bp.route('/login', methods=['GET', 'POST']) def login(): """Admin login page""" if request.method == 'POST': token = request.form.get('token', '') expected_token = os.environ.get('ADMIN_TOKEN', 'default-admin-token') if token == expected_token: session['admin_logged_in'] = True next_page = request.args.get('next', url_for('admin.dashboard')) return redirect(next_page) else: return render_template('login.html', error='Invalid admin token') return render_template('login.html') @admin_bp.route('/logout') def logout(): """Admin logout""" session.pop('admin_logged_in', None) return redirect(url_for('admin.login')) @admin_bp.route('/health') def health(): """Check admin dashboard health""" return jsonify({ 'status': 'ok', 'mode': 'simple', 'redis': 'not configured', 'postgresql': 'not configured' })