Ë
    Ô!OjÕ  ã                   ój  — d dl mZ d dlmZmZmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ  ed
¬«      Ze G d„ d«      «       Zdededefd„Zdededefd„Z ee«       ee«      fdededefd„Z ee«       ee«      fdededefd„Z ee«       ee«      fdededefd„Zy)é    )Ú	dataclass)ÚDependsÚHTTPExceptionÚstatus)ÚHTTPAuthorizationCredentialsÚ
HTTPBearer)ÚJWTError)ÚSession)Úget_db)Údecode_access_token)ÚAccount)ÚUserT)Ú
auto_errorc                   óL   — e Zd ZU dZedz  ed<   dZedz  ed<   ede	fd„«       Z
y)ÚAuthContextNÚuserÚaccountÚreturnc                 óL   — | j                   �y| j                  �yt        d«      ‚)Nr   r   z"AuthContext has no user or account)r   r   Ú
ValueError)Úselfs    ú9/var/www/html/sergio/sergio-backend/app/core/auth_deps.pyÚ	auth_typezAuthContext.auth_type   s(   € à�9‰9Ð ØØ�<‰<Ð#ØÜÐ=Ó>Ð>ó    )Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__r   r   ÚpropertyÚstrr   © r   r   r   r      s7   … à€Dˆ$�‰+ÓØ"€GˆW�t‰^Ó"àð?˜3ò ?ó ñ?r   r   ÚtokenÚdbr   c                 óú  — 	 t        | «      }|j                  d«      }|�“|j                  t        «      j                  t        j                  |k(  «      j                  «       }|st        t        j                  d¬«      ‚|j                  st        t        j                  d¬«      ‚t        |¬	«      S |j                  d
«      }|�l|j                  t        «      j                  t        j                  |k(  «      j                  «       }|st        t        j                  d¬«      ‚t        |¬«      S t        t        j                  d¬«      ‚# t        $ r$}t        t        j                  dddi¬«      |‚d }~ww xY w)NzInvalid or expired tokenzWWW-AuthenticateÚBearer)Ústatus_codeÚdetailÚheadersÚuser_idzUser not found©r&   r'   zAccount not verified)r   Ú
account_idzAccount not found)r   zInvalid token payload)r   r	   r   r   ÚHTTP_401_UNAUTHORIZEDÚgetÚqueryr   ÚfilterÚidÚfirstÚis_verifiedÚHTTP_403_FORBIDDENr   r   )r"   r#   ÚpayloadÚexcr)   r   r+   r   s           r   Úresolve_auth_from_tokenr6      sX  € ðÜ% eÓ,ˆð �k‰k˜)Ó$€GØÐØ�x‰xœ‹~×$Ñ$¤T§W¡W°Ñ%7Ó8×>Ñ>Ó@ˆÙÜÜ"×8Ñ8Ø'ôð ð ×ÒÜÜ"×5Ñ5Ø-ôð ô  Ô%Ð%à—‘˜\Ó*€JØÐØ—(‘(œ7Ó#×*Ñ*¬7¯:©:¸Ñ+CÓD×JÑJÓLˆÙÜÜ"×8Ñ8Ø*ôð ô  7Ô+Ð+ä
Ü×0Ñ0Ø&ôð øôA ò ÜÜ×4Ñ4Ø-Ø'¨Ð2ô
ð ð		ûðús   ‚E Å	E:ÅE5Å5E:c                 ó€   — t        | |«      }|j                  €t        t        j                  d¬«      ‚|j                  S ©NzAccount token requiredr*   )r6   r   r   r   r,   )r"   r#   Úauths      r   Úresolve_account_from_tokenr:   G   s=   € Ü" 5¨"Ó-€DØ‡|�|ÐÜÜ×4Ñ4Ø+ô
ð 	
ð �<‰<Ðr   Úcredentialsc              ƒ   ó6   K  — t        | j                  |«      S ­w)zL
    Accepts JWT from either users table login or accounts table login.
    )r6   r;   )r;   r#   s     r   Úrequire_authr=   Q   s   è ø€ ô # ;×#:Ñ#:¸BÓ?Ð?ùs   ‚c              ƒ   óœ   K  — t        | j                  |«      }|j                  €t        t        j
                  d¬«      ‚|j                  S ­w)NzUser token requiredr*   )r6   r;   r   r   r   r,   ©r;   r#   r9   s      r   Úget_current_userr@   [   sI   è ø€ ô # ;×#:Ñ#:¸BÓ?€DØ‡y�yÐÜÜ×4Ñ4Ø(ô
ð 	
ð �9‰9Ðùó   ‚A
Ac              ƒ   óœ   K  — t        | j                  |«      }|j                  €t        t        j
                  d¬«      ‚|j                  S ­wr8   )r6   r;   r   r   r   r,   r?   s      r   Úget_current_accountrC   h   sI   è ø€ ô # ;×#:Ñ#:¸BÓ?€DØ‡|�|ÐÜÜ×4Ñ4Ø+ô
ð 	
ð �<‰<ÐùrA   N)Údataclassesr   Úfastapir   r   r   Úfastapi.securityr   r   Újoser	   Úsqlalchemy.ormr
   Úapp.core.databaser   Úapp.core.securityr   Úapp.models.account_modelr   Úapp.models.user_modelr   Úbearer_schemer   r    r6   r:   r=   r@   rC   r!   r   r   Ú<module>rN      s  ðÝ !ç 2Ñ 2ß EÝ Ý "å $Ý 1Ý ,Ý &á dÔ+€ð ÷
?ð 
?ó ð
?ð& 3ð &¨Gð &¸ó &ðR cð ¨wð ¸7ó ñ 18¸Ó0FÙ˜&“/ñ@Ø-ð@àð@ð ó@ñ 18¸Ó0FÙ˜&“/ñ
Ø-ð
àð
ð 
ó
ñ 18¸Ó0FÙ˜&“/ñ
Ø-ð
àð
ð ô
r   