Ë
    ˆuOjé  ã                   ó  — 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 d d	lmZ d d
lmZ d dlmZmZ dedefd„Zdedefd„Zdedefd„Zdededefd„Zdefd„Zd„ Z d„ Z!de"dedefd„Z#d„ Z$d„ Z%d„ Z&y)é    )ÚSession)ÚHTTPException)ÚUser)ÚRole)ÚOTPVerification)ÚAccount)ÚJWTError)Úcreate_token_pairÚdecode_refresh_tokenÚhash_passwordÚverify_password)Úcreate_and_send_otp)ÚEmailDeliveryError)Úauthenticate_accountÚaccount_auth_payloadÚuserÚreturnc           	      ó¢  — | j                   r$| j                   j                  j                  «       nd}|dvrd}| j                  r| j                  j	                  d«      ng }t        |«      dkD  r|d   nd}t        |«      dkD  rdj                  |dd  «      nd}t        | j                  «      | j                  | j                  xs d||d|ddœS )	NÚUSER)ÚADMINr   Ú r   Ú é   r   )ÚidÚemailÚnameÚ	firstNameÚlastNameÚbioÚroleÚ	auth_type)
r    Ú	role_nameÚupperÚ	full_nameÚsplitÚlenÚjoinÚstrr   r   )r   r"   Ú
name_partsÚ
first_nameÚ	last_names        ú@/var/www/html/sergio/sergio-backend/app/services/auth_service.pyÚuser_auth_payloadr-      s¼   € Ø/3¯yªy�—	‘	×#Ñ#×)Ñ)Ô+¸f€IØÐ)Ñ)Øˆ	à.2¯nªn�—‘×%Ñ% cÔ*À"€JÜ"% j£/°AÒ"5�˜A’¸2€JÜ,/°
«O¸aÒ,?�—‘˜ A B˜Ô(ÀR€Iô �$—'‘'‹lØ—‘Ø—‘Ò$ "ØØØØØñ	ð 	ó    c                 ó6   — | j                   | j                  ddœS )Nr   )Úuser_idr   r!   )r   r   )r   s    r,   Ú_token_data_for_userr1   +   s   € à—7‘7Ø—‘Øñð r.   Úaccountc                 ó6   — | j                   | j                  ddœS )Nr2   )Ú
account_idr   r!   )r   Ú
hudl_email)r2   s    r,   Ú_token_data_for_accountr6   3   s   € à—j‘jØ×#Ñ#Øñð r.   Ú
token_dataÚuser_payloadc                 ó   — t        | «      |dœS )N)Útokensr   )r
   )r7   r8   s     r,   Ú_login_responser;   ;   s   € ä# JÓ/Øñð r.   Údbc                 ó<  — |j                  t        «      j                  t        j                  | j                  k(  «      j	                  «       }|rt        dd«      ‚| j                  �%| j                  | j                  k7  rt        dd«      ‚|j                  t        «      j                  t        j                  dk(  «      j	                  «       }|st        dd«      ‚t        | j                  | j                  t        | j                  «      |j                  ¬«      }|j                  |«       |j                  «        |j                  |«       	 t!        ||j                  |j                  d«       d
diS # t"        $ r}t        d	t%        |«      «      |‚d }~ww xY w)Né�  zEmail already existsúPasswords do not matchr   iô  z Default user role not configured)r$   r   ÚpasswordÚrole_idÚsignupé÷  ÚmessageúOTP sent successfully)Úqueryr   Úfilterr   Úfirstr   Úconfirm_passwordr@   r   r"   r$   r   r   ÚaddÚcommitÚrefreshr   r   r(   )Údatar<   r   r    Úexcs        r,   Úsignup_servicerO   B   sT  € à�8‰8”D‹>× Ñ Ü�
‰
�d—j‘jÑ óç�eƒgð 	ñ Ü˜CÐ!7Ó8Ð8à×ÑÐ(¨T¯]©]¸d×>SÑ>SÒ-SÜ˜CÐ!9Ó:Ð:à�8‰8”D‹>× Ñ Ü�‰˜&Ñ óç�eƒgð 	ñ Ü˜CÐ!CÓDÐDäØ—.‘.Ø�j‰jÜ˜tŸ}™}Ó-Ø—‘ô	€Dð ‡F�Fˆ4„LØ‡I�I„KØ‡J�JˆtÔð4ÜØØ�G‰GØ�J‰JØô		
ð Ð.Ð/Ð/øô ò 4Ü˜C¤ S£Ó*°Ð3ûð4ús   Å"E7 Å7	FÆ FÆFc                 ó  — |j                  t        «      j                  t        j                  | j                  k(  «      j	                  «       }|j                  t
        «      j                  t
        j                  |j                  k(  t
        j                  | j                  k(  t
        j                  dk(  t
        j                  dk(  «      j	                  «       }|st        dd«      ‚d|_        d|_        |j                  «        ddiS )NrB   Fr>   úInvalid OTPTrD   zAccount verified successfully)rF   r   rG   r   rH   r   r0   r   Úotp_codeÚotpÚpurposeÚis_usedr   Úis_verifiedrK   ©rM   r<   r   rS   s       r,   Úverify_signup_otp_servicerX   m   sÑ   € à�8‰8”D‹>× Ñ Ü�
‰
�d—j‘jÑ óç�eƒgð 	ð �(‰(”?Ó
#×
*Ñ
*Ü×Ñ 4§7¡7Ñ*Ü× Ñ  D§H¡HÑ,Ü×Ñ 8Ñ+Ü×Ñ 5Ñ(ó	÷
 �eƒgð ñ Ü˜C Ó/Ð/à€C„Kà€DÔà‡I�I„KàÐ6Ð7Ð7r.   c                 óæ  — |j                  t        «      j                  t        j                  | j                  k(  «      j	                  «       }|rVt        | j                  |j                  «      r6|j                  st        dd«      ‚t        t        |«      t        |«      «      S t        || j                  | j                  «      }|rt        t        |«      t        |«      «      S t        dd«      ‚)Nr>   zAccount not verifiedzInvalid credentials)rF   r   rG   r   rH   r   r@   rV   r   r;   r1   r-   r   r6   r   )rM   r<   r   r2   s       r,   Úlogin_servicerZ   †   sÀ   € à�8‰8”D‹>× Ñ Ü�
‰
�d—j‘jÑ óç�eƒgð 	ñ ” §¡¨t¯}©}Ô=Ø×ÒÜ Ð%;Ó<Ð<äÔ3°DÓ9Ô;LÈTÓ;RÓSÐSä" 2 t§z¡z°4·=±=ÓA€GáÜÜ# GÓ,Ü  Ó)ó
ð 	
ô
 ˜Ð2Ó
3Ð3r.   Úrefresh_tokenc                 ó–  — 	 t        | «      }|j                  d«      }|dk(  r{|j                  d«      }|j	                  t
        «      j                  t
        j                  |k(  «      j                  «       }|r|j                  st        dd¬«      ‚t        |«      }n�|dk(  ro|j                  d«      }|j	                  t        «      j                  t        j                  |k(  «      j                  «       }	|	st        dd¬«      ‚t        |	«      }nt        dd¬«      ‚d	t        |«      iS # t        $ r}t        dd¬«      |‚d }~ww xY w)
Ni‘  z Invalid or expired refresh token)Ústatus_codeÚdetailr!   r   r0   r2   r4   r:   )r   r	   r   ÚgetrF   r   rG   r   rH   rV   r1   r   r6   r
   )
r[   r<   ÚpayloadrN   r!   r0   r   r7   r4   r2   s
             r,   Úrefresh_token_servicera   �   s?  € ðÜ& }Ó5ˆð —‘˜KÓ(€Ià�FÒØ—+‘+˜iÓ(ˆØ�x‰xœ‹~×$Ñ$¤T§W¡W°Ñ%7Ó8×>Ñ>Ó@ˆÙ˜4×+Ò+ÜØØ9ôð ô *¨$Ó/‰
Ø	�iÒ	Ø—[‘[ Ó.ˆ
Ø—(‘(œ7Ó#×*Ñ*¬7¯:©:¸Ñ+CÓD×JÑJÓLˆÙÜØØ9ôð ô -¨WÓ5‰
äØØ5ô
ð 	
ð
 Ô'¨
Ó3Ð4Ð4øôA ò ÜØØ5ô
ð ð	ûðús   ‚D, Ä,	EÄ5EÅEc                 ó†  — |j                  t        «      j                  t        j                  | j                  k(  «      j	                  «       }|st        dd«      ‚	 t        ||j                  |j                  d«      }d|| j                  | j                  dœdœS # t        $ r}t        dt        |«      «      |‚d }~ww xY w)Né”  úUser not foundÚforgot_passwordrC   rE   )Ú
resetTokenÚ
emailToken)rD   rS   rM   )
rF   r   rG   r   rH   r   r   r   r   r(   )rM   r<   r   rS   rN   s        r,   Úforgot_password_servicerh   Ã   s´   € à�8‰8”D‹>× Ñ Ü�
‰
�d—j‘jÑ óç�eƒgð 	ñ Ü˜CÐ!1Ó2Ð2ð4Ü!ØØ�G‰GØ�J‰JØó	
ˆð +ØàŸ*™*ØŸ*™*ñ
ñð øô ò 4Ü˜C¤ S£Ó*°Ð3ûð4ús   Á"B Â	C Â%B;Â;C c                 ó  — |j                  t        «      j                  t        j                  | j                  k(  «      j	                  «       }|j                  t
        «      j                  t
        j                  |j                  k(  t
        j                  | j                  k(  t
        j                  dk(  t
        j                  dk(  «      j	                  «       }|st        dd«      ‚d|_        |j                  «        ddiS )Nre   Fr>   rQ   TrD   zOTP verified successfully)rF   r   rG   r   rH   r   r0   r   rR   rS   rT   rU   r   rK   rW   s       r,   Úverify_forgot_otp_servicerj   à   sÊ   € à�8‰8”D‹>× Ñ Ü�
‰
�d—j‘jÑ óç�eƒgð 	ð �(‰(”?Ó
#×
*Ñ
*Ü×Ñ 4§7¡7Ñ*Ü× Ñ  D§H¡HÑ,Ü×ÑÐ#4Ñ4Ü×Ñ 5Ñ(ó	÷
 �eƒgð ñ Ü˜C Ó/Ð/à€C„Kà‡I�I„KàÐ2Ð3Ð3r.   c                 ó¶  — |j                  t        «      j                  t        j                  | j                  k(  «      j	                  «       }|st        dd«      ‚| j                  | j                  k7  rt        dd«      ‚t        | j                  |j                  «      rt        dd«      ‚t        | j                  «      |_	        |j                  «        ddiS )Nrc   rd   r>   r?   z3New password cannot be the same as the old passwordrD   zPassword reset successful)rF   r   rG   r   rH   r   Únew_passwordrI   r   r@   r   rK   )rM   r<   r   s      r,   Úreset_password_servicerm   ÷   s·   € à�8‰8”D‹>× Ñ Ü�
‰
�d—j‘jÑ óç�eƒgð 	ñ Ü˜CÐ!1Ó2Ð2à×Ñ˜D×1Ñ1Ò1Ü˜CÐ!9Ó:Ð:ä�t×(Ñ(¨$¯-©-Ô8Ü˜CÐ!VÓWÐWä!Ø×Ñó€D„Mð ‡I�I„KàÐ2Ð3Ð3r.   N)'Úsqlalchemy.ormr   Úfastapir   Úapp.models.user_modelr   Úapp.models.role_modelr   Úapp.models.otp_modelr   Úapp.models.account_modelr   Újoser	   Úapp.core.securityr
   r   r   r   Úapp.services.otp_servicer   Úapp.services.email_servicer   Úapp.services.account_servicer   r   Údictr-   r1   r6   r;   rO   rX   rZ   r(   ra   rh   rj   rm   © r.   r,   Ú<module>r{      sÃ   ðÝ "Ý !å &Ý &Ý 0Ý ,Ý ÷ó õ 9Ý 9ß Sð˜Dð  Tó ð*˜tð ¨ó ð Wð °ó ð ð °Dð ¸Tó ð(0˜Wó (0òV8ò24ð.#5¨ð #5°'ð #5¸dó #5òLò:4ó.4r.   