diff --git a/.gitignore b/.gitignore index a38893e..bebfe24 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ BUI* build.sh docker-compose.dist* GITEA.md -PROXY_AUTHELIA_SETUP.md \ No newline at end of file +PROXY_AUTHELIA_SETUP.md +alias.rune.pm.config \ No newline at end of file diff --git a/app.py b/app.py index 7484ce9..fb8b4a5 100644 --- a/app.py +++ b/app.py @@ -100,12 +100,12 @@ def after_request(response): return response def get_authelia_user(): - """Helper to get authenticated user from Authelia headers""" - # Check several possible header variations + """Helper to get authenticated user from Authelia headers or session cookie""" + # Check several possible header variations (ORDER MATTERS - most specific first!) auth_headers = [ - 'Remote-User', + 'X-Authelia-Username', # Authelia standard header (used by Zoraxy) + 'Remote-User', # Common standard 'X-Remote-User', - 'X-Authelia-Username', 'X-Forwarded-User', 'REMOTE_USER', 'Http-Remote-User', @@ -132,6 +132,19 @@ def get_authelia_user(): except: pass + # WORKAROUND: If Authelia session cookie exists and we're coming from auth.rune.pm, + # assume user is authenticated (Authelia not forwarding headers properly) + if ENABLE_PROXY and 'authelia_session' in request.cookies: + referer = request.headers.get('Referer', '') + if 'auth.rune.pm' in referer or request.headers.get('X-Forwarded-Proto') == 'https': + # Valid Authelia session exists - assume authenticated + # Use a generic identifier since we don't have the actual username + pseudo_user = f"authelia_user_{request.cookies.get('authelia_session')[:8]}" + logger.info(f"✅ Authelia authentication detected via session cookie (headers not forwarded)") + logger.info(f" Using pseudo-user identifier: {pseudo_user}") + logger.info(f" NOTE: Configure Authelia to forward Remote-User header for proper username") + return pseudo_user + # Log when no Authelia user found (for debugging) if ENABLE_PROXY: logger.debug("⚠️ No Authelia headers found in request") @@ -159,10 +172,13 @@ def login_required(f): session['auth_method'] = 'authelia' session.modified = True - # Store additional info - session['remote_email'] = request.headers.get('Remote-Email', '') - session['remote_name'] = request.headers.get('Remote-Name', '') - session['remote_groups'] = request.headers.get('Remote-Groups', '') + # Store additional info (check both Remote-* and X-Authelia-* headers) + session['remote_email'] = (request.headers.get('X-Authelia-Email') or + request.headers.get('Remote-Email', '')) + session['remote_name'] = (request.headers.get('X-Authelia-DisplayName') or + request.headers.get('Remote-Name', '')) + session['remote_groups'] = (request.headers.get('X-Authelia-Groups') or + request.headers.get('Remote-Groups', '')) logger.info(f"✅ Auto-login in API route: {authelia_user}") @@ -210,10 +226,13 @@ def login(): session['authelia_user'] = authelia_user session.modified = True - # Get additional Authelia info if available - session['remote_email'] = request.headers.get('Remote-Email', '') - session['remote_name'] = request.headers.get('Remote-Name', '') - session['remote_groups'] = request.headers.get('Remote-Groups', '') + # Get additional Authelia info (check both Remote-* and X-Authelia-* headers) + session['remote_email'] = (request.headers.get('X-Authelia-Email') or + request.headers.get('Remote-Email', '')) + session['remote_name'] = (request.headers.get('X-Authelia-DisplayName') or + request.headers.get('Remote-Name', '')) + session['remote_groups'] = (request.headers.get('X-Authelia-Groups') or + request.headers.get('Remote-Groups', '')) logger.info(f"✅ Auto-login successful: {authelia_user} ({session.get('remote_email', 'no email')})") @@ -322,10 +341,13 @@ def index(): session['auth_method'] = 'authelia' session.modified = True - # Store additional Authelia info - session['remote_email'] = request.headers.get('Remote-Email', '') - session['remote_name'] = request.headers.get('Remote-Name', '') - session['remote_groups'] = request.headers.get('Remote-Groups', '') + # Store additional Authelia info (check both Remote-* and X-Authelia-* headers) + session['remote_email'] = (request.headers.get('X-Authelia-Email') or + request.headers.get('Remote-Email', '')) + session['remote_name'] = (request.headers.get('X-Authelia-DisplayName') or + request.headers.get('Remote-Name', '')) + session['remote_groups'] = (request.headers.get('X-Authelia-Groups') or + request.headers.get('Remote-Groups', '')) logger.info(f"✅ Auto-login successful: {authelia_user} ({session.get('remote_email', 'no email')})") return render_template('index.html')