Use OAuth sessions for web API requests

This commit is contained in:
Edward Betts 2026-07-22 10:58:10 +01:00
parent e022872767
commit 118ec9fc9b
4 changed files with 125 additions and 7 deletions

View file

@ -85,14 +85,32 @@ webpage_error = (
)
def _get_request_oauth_session() -> requests.sessions.Session | None:
"""Return the logged-in user's OAuth session in a Flask request, if present."""
try:
from flask import g, has_request_context
if not has_request_context():
return None
oauth_session = getattr(g, "oauth_session", None)
if oauth_session is not None:
return typing.cast(requests.sessions.Session, oauth_session)
from . import mediawiki_oauth
return typing.cast(
requests.sessions.Session | None, mediawiki_oauth.get_oauth_session()
)
except RuntimeError:
return None
def _get_active_session() -> tuple[requests.sessions.Session, str]:
"""Return active session and auth mode."""
try:
from flask import g
if hasattr(g, "oauth_session") and g.oauth_session is not None:
return g.oauth_session, "oauth" # type: ignore[return-value]
except RuntimeError:
pass
if oauth_session := _get_request_oauth_session():
return oauth_session, "oauth"
print("WARNING: using unauthenticated session", file=sys.stderr)
return get_session(), "anon"