feat: add OAuth debug route and template for URL generation verification
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
"""
|
||||
Debug route for OAuth URL generation
|
||||
"""
|
||||
from flask import Blueprint, render_template, jsonify, current_app, request, url_for
|
||||
from flask_login import login_required
|
||||
from musicround.helpers.auth_helpers import get_oauth_redirect_uri
|
||||
|
||||
# Create blueprint
|
||||
oauth_debug_bp = Blueprint('oauth_debug', __name__)
|
||||
|
||||
@oauth_debug_bp.route('/debug/oauth-urls')
|
||||
@login_required
|
||||
def debug_oauth_urls():
|
||||
"""
|
||||
Debug endpoint to show OAuth URL generation with current configuration
|
||||
This is useful for verifying proper HTTPS handling when behind a reverse proxy
|
||||
|
||||
Formats:
|
||||
- HTML: Default view with pretty UI
|
||||
- JSON: Add ?format=json or use Accept: application/json header
|
||||
"""
|
||||
# Get config settings
|
||||
use_https = current_app.config.get('USE_HTTPS', False)
|
||||
preferred_scheme = current_app.config.get('PREFERRED_URL_SCHEME', 'http')
|
||||
|
||||
# Generate all OAuth callback URLs using the helper function
|
||||
oauth_urls = {
|
||||
'spotify_auth': get_oauth_redirect_uri('auth.callback'),
|
||||
'spotify_link': get_oauth_redirect_uri('users.spotify_link_callback'),
|
||||
'google_login': get_oauth_redirect_uri('users.google_callback'),
|
||||
'authentik_login': get_oauth_redirect_uri('users.authentik_callback'),
|
||||
'dropbox_link': get_oauth_redirect_uri('users.dropbox_callback')
|
||||
}
|
||||
|
||||
# Generate the same URLs directly with url_for for comparison
|
||||
direct_urls = {
|
||||
'spotify_auth': url_for('auth.callback', _external=True),
|
||||
'spotify_link': url_for('users.spotify_link_callback', _external=True),
|
||||
'google_login': url_for('users.google_callback', _external=True),
|
||||
'authentik_login': url_for('users.authentik_callback', _external=True),
|
||||
'dropbox_link': url_for('users.dropbox_callback', _external=True)
|
||||
}
|
||||
|
||||
# Get request info
|
||||
request_info = {
|
||||
'url': request.url,
|
||||
'host': request.host,
|
||||
'scheme': request.scheme,
|
||||
'headers': {
|
||||
key: value for key, value in request.headers.items()
|
||||
if key.lower() in ('x-forwarded-for', 'x-forwarded-proto',
|
||||
'x-forwarded-host', 'host', 'origin', 'referer')
|
||||
}
|
||||
}
|
||||
|
||||
# Compile data for both JSON and HTML response
|
||||
result = {
|
||||
'config': {
|
||||
'USE_HTTPS': use_https,
|
||||
'PREFERRED_URL_SCHEME': preferred_scheme
|
||||
},
|
||||
'helper_generated_urls': oauth_urls,
|
||||
'direct_url_for_urls': direct_urls,
|
||||
'request_info': request_info
|
||||
}
|
||||
|
||||
current_app.logger.info(f"OAuth Debug URLs generated")
|
||||
|
||||
# Check if JSON format is requested
|
||||
wants_json = (request.args.get('format', '').lower() == 'json' or
|
||||
request.headers.get('Accept', '').lower().find('application/json') >= 0)
|
||||
|
||||
if wants_json:
|
||||
return jsonify(result)
|
||||
else:
|
||||
# Return HTML view
|
||||
return render_template('oauth_debug.html',
|
||||
config=result['config'],
|
||||
helper_generated_urls=result['helper_generated_urls'],
|
||||
direct_url_for_urls=result['direct_url_for_urls'],
|
||||
request_info=result['request_info'])
|
||||
Reference in New Issue
Block a user