Plain is headed towards 1.0! Subscribe for development updates →

 1from __future__ import annotations
 2
 3from typing import TYPE_CHECKING, Any
 4
 5from jinja2 import pass_context
 6
 7from plain.sessions.exceptions import SessionNotAvailable
 8from plain.templates import register_template_global
 9
10from .requests import get_request_user
11
12if TYPE_CHECKING:
13    from jinja2.runtime import Context
14
15
16@register_template_global
17@pass_context
18def get_current_user(context: Context) -> Any | None:
19    """Get the authenticated user for the current request."""
20    request = context.get("request")
21    assert request is not None, "No request in template context"
22    try:
23        return get_request_user(request)
24    except SessionNotAvailable:
25        # Session not available (e.g., during error page rendering before middleware runs)
26        return None