+
    kÀîiH	  ã                  ó²   € R t ^ RIHt ^ RIHtHtHt ^ RIHt ^ RIH	t	H
t
 ^ RIHt ^ RIHt R R ltR	 R
 ltR R ltR R ltR R ltR R ltR R ltR# )uE   
services/auth_service.py â€” Authentication & Access Key management
)Úannotations)ÚdatetimeÚ	timedeltaÚtimezone)ÚOptional)ÚJWTErrorÚjwt)Úsettings)Újson_dbc               ó(   € V ^8„  d   QhRRRRRRRR/# )é   Úcandidate_idÚstrÚnameÚstageÚintÚreturn© )Úformats   "Ú:D:\Python_Codes\gen_ai\people_hub\services\auth_service.pyÚ__annotate__r      s.   € ÷ Zñ Z˜sð Z¨#ð Z°cð Z¸cñ Zó    c                ó4  € \         P                  ! \        P                  4      \	        \
        P                  R 7      ,           pRV RVRVR\        VP                  4       4      /p\        P                  ! V\
        P                  \
        P                  R7      # ))ÚminutesÚsubr   r   Úexp)Ú	algorithm)r   Únowr   Úutcr   r	   ÚJWT_EXPIRE_MINUTESr   Ú	timestampr   ÚencodeÚJWT_SECRET_KEYÚJWT_ALGORITHM)r   r   r   ÚexpireÚpayloads   &&&  r   Úcreate_tokenr&      sn   € Ü�\Š\œ(Ÿ,™,Ó'¬)¼H×<WÑ<WÔ*XÕX€Fà�Ø�Ø�Ø”�V×%Ñ%Ó'Ó(ð	€Gô �:Š:�gœx×6Ñ6Ä(×BXÑBXÔYÐYr   c               ó    € V ^8„  d   QhRRRR/# )r   Útokenr   r   údict | Noner   )r   s   "r   r   r      s   € ÷ ñ ˜ð  ñ r   c                ó”   €  \         P                  ! V \        P                  \        P                  .R 7      #   \
         d     R# i ; i))Ú
algorithmsN)r   Údecoder	   r"   r#   r   )r(   s   &r   Údecode_tokenr-      s;   € ðÜ�zŠz˜%¤×!8Ñ!8Äh×F\ÑF\ÐE]Ô^Ð^øÜô Úðús   ‚58 ¸AÁAc               ó    € V ^8„  d   QhRRRR/# )r   Úraw_keyr   r   r)   r   )r   s   "r   r   r   "   s   € ÷ ñ  ð ¨ñ r   c                óV  € V P                  4       P                  4       p\        P                  ! \        P
                  VR7      pV'       g   R# \        P                  ! \        P
                  VR,          R\        P                  ! 4       /4       \        P                  ! 4       VR&   V# )zX
Look up a candidate by access_key in users.json.
Returns the candidate record or None.
)Ú
access_keyNÚidÚ
last_login)ÚstripÚupperÚdbÚfind_oner	   Ú
USERS_FILEÚupdateÚnow_iso)r/   ÚkeyÚ	candidates   &  r   Úvalidate_access_keyr=   "   sx   € ð
 �-‰-‹/×
Ñ
Ó
!€CÜ—’œH×/Ñ/¸CÔ@€IßÙô ‡I‚IŒh×!Ñ! 9¨T¥?Ø”b—j’j“lð5ô ô !Ÿjšj›l€IˆlÑØÐr   c               ó    € V ^8„  d   QhRRRR/# )r   r   r   r   r)   r   )r   s   "r   r   r   4   s   € ÷ <ñ < ð <¨ñ <r   c                óL   € \         P                  ! \        P                  V 4      # )N)r6   Ú
find_by_idr	   r8   )r   s   &r   Úget_candidaterA   4   s   € Ü�=Š=œ×,Ñ,¨lÓ;Ð;r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r   r   Ú	new_stager   r   r)   r   )r   s   "r   r   r   8   s!   € ÷ ñ  ð °ð ¸ñ r   c           	     ó|   € \         P                  ! \        P                  V RVR\         P                  ! 4       /4      # )z+Move candidate to the next interview stage.Úcurrent_stageÚstage_advanced_at)r6   r9   r	   r8   r:   )r   rC   s   &&r   Úadvance_stagerG   8   s2   € ä�9Š9”X×(Ñ(¨,Ø˜ØœRŸZšZ›\ð9ó ð r   c               ó    € V ^8„  d   QhRRRR/# ©r   r   r   r   r   r   )r   s   "r   r   r   @   s   € ÷ Eñ E˜Cð E Cñ Er   c                óB   € \         P                  P                  V R 4      # )z/interview/assessment)r	   ÚSTAGE_ROUTESÚget©r   s   &r   Úget_redirect_urlrN   @   s   € Ü× Ñ ×$Ñ$ UÐ,CÓDÐDr   c               ó    € V ^8„  d   QhRRRR/# rI   r   )r   s   "r   r   r   D   s   € ÷ 9ñ 9˜#ð 9 #ñ 9r   c                óB   € \         P                  P                  V R 4      # )Ú
Assessment)r	   ÚSTAGE_NAMESrL   rM   s   &r   Úget_stage_namerS   D   s   € Ü×Ñ×#Ñ# E¨<Ó8Ð8r   N)Ú__doc__Ú
__future__r   r   r   r   Útypingr   Újoser   r   Úconfigr	   Úutilsr
   r6   r&   r-   r=   rA   rG   rN   rS   r   r   r   Ú<module>rZ      sF   ðñõ #ß 2Ñ 2Ý ß Ý Ý õ
Zõõõ$<õõE÷9r   