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