§
    �åi6  ã                   ó„  — d dl mZmZmZmZmZmZ d dlmZ d dl	m	Z	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 dd
lmZ ddlmZmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z(  eddg¬¦  «        Z) ee¬¦  «        Z*e) +                    deej,        ¬¦  «        e* -                    d¦  «         ee¦  «        fdededefd„¦   «         ¦   «         Z.e) +                    d¦  «        e* -                    d¦  «         ee¦  «        fdedededefd„¦   «         ¦   «         Z/e) +                    d¦  «         ee¦  «        fdededefd„¦   «         Z0e) +                    d¦  «         ee¦  «        fdededefd„¦   «         Z1e) 2                    d ed!z  ¬"¦  «         ee&¦  «        fd#ee         fd$„¦   «         Z3d!S )%é    )Ú	APIRouterÚDependsÚHTTPExceptionÚstatusÚRequestÚResponse)ÚSession)ÚdatetimeÚ	timedeltaÚtimezone)ÚOptional)ÚLimiter)Úget_remote_addressé   )Úget_db)ÚUser)ÚRole)Ú
UserCreateÚ	UserLoginÚUserResponseÚTokenÚTokenRefresh)Úverify_passwordÚget_password_hashÚcreate_access_tokenÚcreate_refresh_tokenÚget_current_active_userÚget_current_user_optional)Úsettingsz	/api/authÚauth)ÚprefixÚtags)Úkey_funcz	/register)Úresponse_modelÚstatus_codez5/minuteÚrequestÚ	user_dataÚdbc              ƒ   ó´  K  — |                      t          ¦  «                             t          j        |j        k    t          j        |j        k    z  ¦  «                             ¦   «         }|rt          t          j        d¬¦  «        ‚|                      t          ¦  «         	                    ¦   «         }|dk    rY|                      t          ¦  «                             t          j        dk    ¦  «                             ¦   «         }|r|j        nd }nX|                      t          ¦  «                             t          j        dk    ¦  «                             ¦   «         }|r|j        nd }t          |j        |j        t          |j        ¦  «        |¬¦  «        }|                     |¦  «         |                     ¦   «          |                     |¦  «         |S )Nz-Registration failed. Please check your input.©r%   Údetailr   ÚadminÚviewer)ÚusernameÚemailÚpassword_hashÚrole_id)Úqueryr   Úfilterr.   r/   Úfirstr   r   ÚHTTP_400_BAD_REQUESTÚcountr   ÚnameÚidr   ÚpasswordÚaddÚcommitÚrefresh)	r&   r'   r(   Úexisting_userÚ
user_countÚ
admin_roler1   Úviewer_roleÚnew_users	            ú/app/app/api/auth.pyÚregisterrC      sŒ  è è € ð —H’H�T‘N”N×)Ò)Ý	Œ˜)Ô,Ò	,µ´¸y¼Ò1NÑOñô ç‚e�g„gð ð ð 
ÝÝÔ3ØBð
ñ 
ô 
ð 	
ð —’�$‘”×%Ò%Ñ'Ô'€JØ�Q‚€à—X’X�d‘^”^×*Ò*­4¬9¸Ò+?Ñ@Ô@×FÒFÑHÔHˆ
Ø#-Ð7�*”-�-°4ˆˆð —h’h�t‘n”n×+Ò+­D¬I¸Ò,AÑBÔB×HÒHÑJÔJˆØ$/Ð9�+”.�.°Tˆõ ØÔ#ØŒoÝ'¨	Ô(:Ñ;Ô;Øð	ñ ô €Hð ‡F‚Fˆ8ÑÔÐØ‡I‚I�K„K€KØ‡J‚JˆxÑÔÐà€Oó    z/loginÚresponsec           	   ƒ   ó  K  — |                      t          ¦  «                             t          j        |j        k    ¦  «                             ¦   «         }|rt          |j        |j        ¦  «        st          t          j
        d¬¦  «        ‚|j        st          t          j        d¬¦  «        ‚t          dt          |j        ¦  «        i¬¦  «        }t!          dt          |j        ¦  «        i¬¦  «        }t#          j        t&          j        ¦  «        t+          t,          j        ¬¦  «        z   }t1          |j        ||| j        r| j        j        nd | j                             d¦  «        ¬¦  «        }|                     |¦  «         |                     ¦   «          |                     d|d	d	d
t,          j         dz  d¬¦  «         |                     d|d	d	d
t,          j        dz  dz  dz  d¬¦  «         tC          j"        |¦  «        |dœS )NúAuthentication failedr*   Úsub©Údata©Údaysz
user-agent)Úuser_idÚrefresh_tokenÚ
expires_atÚ
ip_addressÚ
user_agentÚaccess_tokenTÚlaxé<   ú/©ÚkeyÚvalueÚhttponlyÚsecureÚsamesiteÚmax_ageÚpathrN   é   ©ÚuserrR   )#r2   r   r3   r.   r4   r   r9   r0   r   r   ÚHTTP_401_UNAUTHORIZEDÚ	is_activer5   r   Ústrr8   r   r
   Únowr   Úutcr   r   ÚJWT_REFRESH_TOKEN_EXPIRE_DAYSÚSessionModelÚclientÚhostÚheadersÚgetr:   r;   Ú
set_cookieÚJWT_ACCESS_TOKEN_EXPIRE_MINUTESr   Úfrom_orm_with_role)	r&   rE   r'   r(   r`   rR   rN   rO   Úsessions	            rB   Úloginrp   A   s	  è è € ð �8Š8•D‰>Œ>× Ò ¥¤°)Ô2DÒ!DÑEÔE×KÒKÑMÔM€Dàð 
• yÔ'9¸4Ô;MÑNÔNð 
ÝÝÔ4Ø*ð
ñ 
ô 
ð 	
ð
 Œ>ð 
ÝÝÔ3Ø*ð
ñ 
ô 
ð 	
õ '¨UµC¸¼±L´LÐ,AÐBÑBÔB€LÝ(¨uµc¸$¼'±l´lÐ.CÐDÑDÔD€Mõ ”�hœlÑ+Ô+­i½XÔ=cÐ.dÑ.dÔ.dÑd€JÝØ”Ø#ØØ*1¬.ÐB�7”>Ô&Ð&¸dØ”?×&Ò& |Ñ4Ô4ðñ ô €Gð ‡F‚Fˆ7�O„O€OØ‡I‚I�K„K€Kð ×ÒØØØØØÝÔ8¸2Ñ=Øð ñ ô ð ð ×ÒØØØØØÝÔ6¸Ñ;¸bÑ@À2ÑEØð ñ ô ð õ !Ô3°DÑ9Ô9È<ÐXÐXÐXrD   z/refreshc           	   ƒ   ó¢  K  — | j                              d¦  «        }|st          t          j        d¬¦  «        ‚|                     t          ¦  «                             t          j        |k    ¦  «         	                    ¦   «         }|r'|j
        t          j        t          j        ¦  «        k     rt          t          j        d¬¦  «        ‚|                     t          ¦  «                             t          j        |j        k    ¦  «         	                    ¦   «         }|r|j        st          t          j        d¬¦  «        ‚t'          dt)          |j        ¦  «        i¬¦  «        }t+          dt)          |j        ¦  «        i¬¦  «        }||_        t          j        t          j        ¦  «        t-          t.          j        ¬¦  «        z   |_
        |                     ¦   «          |                     d|ddd	t.          j        d
z  d¬¦  «         |                     d|ddd	t.          j        dz  d
z  d
z  d¬¦  «         t9          j        |¦  «        |dœS )NrN   rG   r*   rH   rI   rK   rR   TrS   rT   rU   rV   r^   r_   )Úcookiesrk   r   r   ra   r2   rg   r3   rN   r4   rO   r
   rd   r   re   r   r8   rM   rb   r   rc   r   r   r   rf   r;   rl   rm   r   rn   )r&   rE   r(   rN   ro   r`   rR   Únew_refresh_tokens           rB   r<   r<      s?  è è € ð ”O×'Ò'¨Ñ8Ô8€MØð 
ÝÝÔ4Ø*ð
ñ 
ô 
ð 	
ð �hŠh•|Ñ$Ô$×+Ò+ÝÔ" mÒ3ñô ç‚e�g„gð ð ð 
�gÔ(­8¬<½¼Ñ+EÔ+EÒEÐEÝÝÔ4Ø*ð
ñ 
ô 
ð 	
ð
 �8Š8•D‰>Œ>× Ò ¥¤¨G¬OÒ!;Ñ<Ô<×BÒBÑDÔD€DØð 
�t”~ð 
ÝÝÔ4Ø*ð
ñ 
ô 
ð 	
õ '¨UµC¸¼±L´LÐ,AÐBÑBÔB€LÝ,°5½#¸d¼g¹,¼,Ð2GÐHÑHÔHÐð .€GÔÝ!œ¥h¤lÑ3Ô3µiÅXÔEkÐ6lÑ6lÔ6lÑl€GÔØ‡I‚I�K„K€Kð ×ÒØØØØØÝÔ8¸2Ñ=Øð ñ ô ð ð ×ÒØØØØØÝÔ6¸Ñ;¸bÑ@À2ÑEØð ñ ô ð õ !Ô3°DÑ9Ô9È<ÐXÐXÐXrD   z/logoutc              ƒ   ó  K  — 	 t          |¦  «        }|r¼	 t                               |t          j        t          j        g¬¦  «        }|                     d¦  «        }|ra|                     t          ¦  «         	                    t          j
        |k    ¦  «                             ¦   «          |                     ¦   «          n# t          $ r Y nw xY wn#  Y nxY w|                      dd¬¦  «         |                      dd¬¦  «         ddiS )	N)Ú
algorithmsrH   rR   rU   )rW   r]   rN   ÚmessagezSuccessfully logged out)Úget_token_from_cookieÚjwtÚdecoder   ÚJWT_SECRET_KEYÚJWT_ALGORITHMrk   r2   rg   r3   rM   Údeleter;   ÚJWTErrorÚdelete_cookie)rE   r&   r(   ÚtokenÚpayloadrM   s         rB   Úlogoutr�   ¿   s  è è € ðÝ% gÑ.Ô.ˆØð 	ð
ÝŸ*š* U­HÔ,CÕQYÔQgÐPh˜*ÑiÔi�Ø!Ÿ+š+ eÑ,Ô,�Øð  à—H’H�\Ñ*Ô*×1Ò1Ý$Ô,°Ò7ñô ç’f‘h”h�hØ—I’I‘K”K�KøøÝð ð ð Ø�ðøøøøøðØˆøøøð ×Ò˜~°CÐÑ8Ô8Ð8Ø×Ò˜°SÐÑ9Ô9Ð9àÐ0Ð1Ð1s/   „C –B*C Ã C Ã
CÃC ÃCÃC ÃCz/meN)r$   Úcurrent_userc              ƒ   ó6   K  — | sd S t          j        | ¦  «        S )N)r   rn   )r‚   s    rB   Úget_mer„   Þ   s$   è è € àð ØˆtÝÔ*¨<Ñ8Ô8Ð8rD   )4Úfastapir   r   r   r   r   r   Úsqlalchemy.ormr	   r
   r   r   Útypingr   Úslowapir   Úslowapi.utilr   Údatabaser   Úmodels.userr   Úmodels.sessionrg   Úmodels.permissionr   Úschemas.userr   r   r   r   r   r    r   r   r   r   r   r   Úconfigr   ÚrouterÚlimiterÚpostÚHTTP_201_CREATEDÚlimitrC   rp   r<   r�   rk   r„   © rD   rB   ú<module>r–      s¬  ðØ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ "Ð "Ð "Ð "Ð "Ð "Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø $Ð $Ð $Ð $Ð $Ð $Ø SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ Sðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð à	ˆ˜+¨V¨HÐ	5Ñ	5Ô	5€Ø
ˆ'Ð-Ð
.Ñ
.Ô
.€ð ‡‚ˆ[¨À6ÔCZ€Ñ[Ô[Ø‡‚ˆzÑÔØJQÈ'ÐRXÉ/Ì/ð "ð "˜Gð "°
ð "Àð "ð "ð "ñ Ôñ \Ô[ð"ðJ ‡‚ˆXÑÔØ‡‚ˆzÑÔð
 �'˜&‘/”/ð	9Yð 9YØð9Yàð9Yð ð9Yð 	ð	9Yð 9Yð 9Yñ Ôñ Ôð9Yðx ‡‚ˆZÑÔð �'˜&‘/”/ð<Yð <YØð<Yàð<Yð 	ð<Yð <Yð <Yñ Ôð<Yð~ ‡‚ˆYÑÔð �'˜&‘/”/ð2ð 2Øð2àð2ð 	ð2ð 2ð 2ñ Ôð2ð< ‡‚ˆE ,°Ñ"5€Ñ6Ô6Ø07°Ð8QÑ0RÔ0Rð 9ð 9˜x¨œ~ð 9ð 9ð 9ñ 7Ô6ð9ð 9ð 9rD   