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