1+ from __future__ import annotations
2+
13import hmac
4+ from collections .abc import Generator
5+ from typing import TYPE_CHECKING , Any
26
37from plain .exceptions import ImproperlyConfigured
48from plain .models import models_registry
913
1014from .requests import get_request_user , set_request_user
1115
16+ if TYPE_CHECKING :
17+ from plain .http import Request
18+
1219USER_ID_SESSION_KEY = "_auth_user_id"
1320USER_HASH_SESSION_KEY = "_auth_user_hash"
1421
1522
16- def get_session_auth_hash (user ) :
23+ def get_session_auth_hash (user : Any ) -> str :
1724 """
1825 Return an HMAC of the password field.
1926 """
2027 return _get_session_auth_hash (user )
2128
2229
23- def update_session_auth_hash (request , user ) :
30+ def update_session_auth_hash (request : Request , user : Any ) -> None :
2431 """
2532 Updating a user's password (for example) logs out all sessions for the user.
2633
@@ -36,12 +43,12 @@ def update_session_auth_hash(request, user):
3643 session [USER_HASH_SESSION_KEY ] = get_session_auth_hash (user )
3744
3845
39- def get_session_auth_fallback_hash (user ) :
46+ def get_session_auth_fallback_hash (user : Any ) -> Generator [ str , None , None ] :
4047 for fallback_secret in settings .SECRET_KEY_FALLBACKS :
4148 yield _get_session_auth_hash (user , secret = fallback_secret )
4249
4350
44- def _get_session_auth_hash (user , secret = None ):
51+ def _get_session_auth_hash (user : Any , secret : str | None = None ) -> str :
4552 key_salt = "plain.auth.get_session_auth_hash"
4653 return salted_hmac (
4754 key_salt ,
@@ -51,7 +58,7 @@ def _get_session_auth_hash(user, secret=None):
5158 ).hexdigest ()
5259
5360
54- def login (request , user ) :
61+ def login (request : Request , user : Any ) -> None :
5562 """
5663 Persist a user id and a backend in the request. This way a user doesn't
5764 have to reauthenticate on every request. Note that data set during
@@ -87,7 +94,7 @@ def login(request, user):
8794 set_request_user (request , user )
8895
8996
90- def logout (request ) :
97+ def logout (request : Request ) -> None :
9198 """
9299 Remove the authenticated user's ID from the request and flush their session
93100 data.
@@ -99,7 +106,7 @@ def logout(request):
99106 set_request_user (request , None )
100107
101108
102- def get_user_model ():
109+ def get_user_model () -> type [ Any ] :
103110 """
104111 Return the User model that is active in this project.
105112 """
@@ -115,7 +122,7 @@ def get_user_model():
115122 )
116123
117124
118- def get_user (request ) :
125+ def get_user (request : Request ) -> Any | None :
119126 """
120127 Return the user model instance associated with the given request session.
121128 If no user is retrieved, return None.
0 commit comments