
    yxh/                        d dl mZmZmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlmZ d dl d dlmZ d dl d dlmZ  e       Zej5                  d	d
      Zej9                  d       ee      fdedefd       Zej9                  d       ee      fde	defd       Z ej9                  d       ee      fde!defd       Z"ej9                  d       ee      fdedefd       Z#ej9                  d       ed       ed       ee      fde!dedefd       Z$ej9                  d       ed       ed       ee      fde!dedefd       Z%ej9                  d       ee      fdedefd        Z&ejO                  d!       ee      fd"e!defd#       Z(ejS                  d$       ee      fd%ed&e*fd'       Z+ej9                  d(       ee      fd)edefd*       Zy)+    )	APIRouterFile
UploadFile)Role)
AdminLogin	UserLoginUserCheckPasswordUserRegisterPersonalUserRegisterCompanyUserSendOtpUserTokenDataUserSetPassword)send_otp_email)send_otp_phone)*)get_db)check_token_validityFILE_STORAGE_PATHfilesz/loginuserdbc                    | j                   `|j                  t              j                  t        j                   | j                   k(  t        j                  dk(        j                         }n_|j                  t              j                  t        j                  | j                  k(  t        j                  dk(        j                         }|sKt               }| j                   t        | j                   |       nt        | j                  |       d|ddS | j                   |j                  sdddS |j                  sdd	dS |d
ddS )N   to_emailotpto_phoner   F   Otp envoyé avec succès!statusr   messageur   Cette adresse mail est reliée à un compte mais n'est pas verifiée. Veuillez utiliser le numéro de téléphone.r!   r"   ul   Ce numéro de téléphone est relié à un compte mais n'est pas verifié. Veuillez utiliser l'adresse mail.TzUser's infos got successfully)r   r!   r"   )emailqueryUserfilterr!   firstphonegenerate_otpr   r   email_verifyphone_verify)r   r   
user_checkr   s       G/Users/theessential/Documents/Github/Lekema-Backend/app/routers/auth.pyloginr/      s   zzXXd^**4::+CT[[TUEUV\\^
XXd^**4::+CT[[TUEUV\\^
n::!DJJC8DJJC8 2
 	
 ::!**# <  **# :  2     z/check-passwordc                    |j                  t              j                  t        j                  | j                  k(  t        j                  dk(        j                         }t        ||j                  |j                  | j                        }|sdddS t        t              }t        d|j                  i|      }t        t              }t        d|j                  i|      }|j                  t              j                  t        j                  |j                   k(        j                         }||_        d	|||d
dS )Nr   )r$   r)   passwordFzMot de passe incorrectr#   minutessubdataexpires_deltaTbearer)r!   r   access_tokenrefresh_token
token_type)r%   r&   r'   idr!   r(   authenticate_userr$   r)   r2   	timedeltaACCESS_TOKEN_EXPIRE_MINUTEScreate_access_tokenREFRESH_TOKEN_EXPIRE_MINUTEScreate_refresh_tokenr   role_idrole)	r   r   user_searchr-   access_token_expiresr:   refresh_token_expiresr;   	role_users	            r.   check_passwordrJ   <   s   ((4.''477(:DKK1<LMSSUK"2[->->kFWFWbfbobopJ/
 	
 %-HI&Z]]#3GL &.JK(Z]]#3HM %%dgg1C1C&CDJJLIJOJ_l  }E  F  Fr0   z/refresh-tokenr;   c                    	 t         j                  | t        t        g      }|j	                  d      }|t        dd      	 |j                  t              j                  t        j                  |k(        j                         }|t        dd      t        t              }t        d|j                  i|      }t        t              }t!        d|j                  i|      } || dd	S # t        $ r t        dd      w xY w)
N)
algorithmsr5   i  zInvalid refresh tokenstatus_codedetailr3   r6   r9   )r:   r;   r<   )jwtdecode
SECRET_KEY	ALGORITHMgetHTTPExceptionJWTErrorr%   r&   r'   r=   r(   r?   r@   rA   rB   rC   )r;   r   payloaduser_idr   rG   r:   rH   s           r.   r;   r;   S   s    M**]JI;*O{{5)?C8OPP 
 88D>  G!34::<D|4KLL$-HI&TWW-AL &.JK(TWW-BM )=X`aa#  M4KLLMs   AC. .Dz	/send-otpc                 B  K   t               }	 | j                  r| j                  )| j                  |j	                  t
              j                  t
        j                  | j                  k(  t
        j                  dk(  t
        j                  | j                  k7  t
        j                  dk(        j                         }n\|j	                  t
              j                  t
        j                  | j                  k(  t
        j                  dk(  t
        j                  | j                  k7  t
        j                  dk(        j                         }n| j                  `|j	                  t
              j                  t
        j                  | j                  k(  t
        j                  dk(        j                         }nb|j	                  t
              j                  t
        j                  | j                  k(  t
        j                  dk(        j                         }nd }|r|| j                  dddS dddS | j                  t        | j                  |       nt        | j                  |       d {    d|d	d
S 7 
# t        $ r}dddcY d }~S d }~ww xY ww)NTr   Fu(   Cette adresse mail est déjà utilisée!r#   u.   Ce numéro de téléphone est déjà utilisé!r   r   r   r    u?   Erreur survenue lors de l'envoi, veuillez réessayer plus tard!)r*   is_newrX   r$   r%   r&   r'   r+   r=   r!   r(   r)   r,   r   r   	Exception)r   r   r   r-   es        r.   send_otpr]   n   s    
.C+
;;||'::)!#$!6!6tzzTZZ7OQUQbQbfjQj7;ww$,,7NPTP[P[_`P`"bbgbgbi  "$$!6!6tzzTZZ7OQUQbQbfjQj7;ww$,,7NPTP[P[_`P`"bbgbgbi  ::)!#$!6!6tzzTZZ7OQUQ\Q\`aQa!b!h!h!jJ!#$!6!6tzzTZZ7OQUQ\Q\`aQa!b!h!h!jJJ*0zz%#I  $O 
 ::!DJJC8 $**#>>> 2
 	
 ?  
X
 	

s_   JH%J 3J4J 8J9>J 7J8	J JJ 	JJJJJJz/register-personal.N	user_dataavatarc                 p  K   t        j                  |       }|j                  t        ||j                        }|rdddS |j                  t        ||j                        }|rdddS t        j                  |j                        }d }|r|j                  j                  d      d   }t        j                  j                  t        t        d       d|       }t!        |d      5 }	|	j#                  |j%                          d {          d d d        |j'                  t(              j+                  t(        j,                  |j.                  k(        j1                         }
d }|j2                  Y|j'                  t4              j+                  t4        j2                  |j2                  k(        j1                         }|j6                  }t5        |j                  ||j8                  |j:                  |j                  |j<                  |j>                  |
j6                  |j@                  |jB                  |t        d	      |d
      }|jE                  |       |jG                          |jI                  |       tK        tM        |j6                  |j                        |      S 7 # 1 sw Y   xY ww)NF,   Ce numéro de téléphone est déja utilisér#   '   Cette adresse mail est déjà utilisée.
   wb   r   )r$   r2   	firstnamelastnamer)   countrycountry_coderD   r+   r,   r_   sponsor_code
sponsor_idr!   r=   r2   )'r
   model_validate_jsonr)   get_user_by_phoner$   get_user_by_emailpwd_contexthashr2   filenamesplitospathjoinr   get_random_intopenwritereadr%   r   r'   labelrE   r(   rl   r&   r=   rh   ri   rj   rk   r+   r,   addcommitrefreshrJ   r	   )r^   r_   r   r   r-   user_check2hashed_passwordavatar_pathfile_extensionfdb_rolerm   sponsor_userdb_users                 r.   register_personalr      s)    33I>Dzz&r4::6
I 
 zz'DJJ7D 
 "&&t}}5OK..s3B7ggll#49K8LAnM]6^_+t$ 	)GG&++-'(	) hhtn##DJJ$))$;<BBDGJ$xx~,,T->->$BSBS-STZZ\!__
+!^^ MM<< $ 1 1":: $ 1 1 $ 1 1% .q 1(G FF7OIIKJJw+wzzDMMRTVWW7 (	) 	)s1   C'J6)J)J&
	J)FJ6&J))J3.J6z/register-companyc                   K   t        j                  |       }|j                  t        ||j                        }|rdddS |j                  t        ||j                        }|rdddS t        j                  |j                        }d }|r|j                  j                  d      d   }t        j                  j                  t        t        d       d|       }t!        |d      5 }	|	j#                  |j%                          d {          d d d        |j'                  t(              j+                  t(        j,                  |j.                  k(        j1                         }
t3        |j                  ||j4                  |j                  |j6                  |j8                  |j:                  |
j<                  |j>                  |j@                  |jB                  |tE        |j4                  |j8                        d	
      }|jG                  |       |jI                          |jK                  |       tM        tO        |j<                  |j                        |      S 7 V# 1 sw Y   RxY ww)NFra   r#   rb   rc   rd   re   rf   r   )r$   r2   namer)   rj   rk   cityrD   addressr+   r,   r_   qr_coder!   rn   )(r   ro   r)   rp   r$   rq   rr   rs   r2   rt   ru   rv   rw   rx   r   ry   rz   r{   r|   r%   r   r'   r}   rE   r(   r&   r   rj   rk   r   r=   r   r+   r,   generate_qr_coder~   r   r   rJ   r	   )r^   r_   r   r   r-   r   r   r   r   r   r   r   s               r.   register_companyr      s    229=Dzz&r4::6
I  zz'DJJ7D 
 "&&t}}5OK..s3B7ggll#49K8LAnM]6^_+t$ 	)GG&++-'(	) hhtn##DJJ$))$;<BBDG+		<< $ 1 1		"::<< $ 1 1 $ 1 1%+DIIt7H7HIG FF7OIIKJJw+wzzDMMRTVWW- (	) 	)s1   C'I.)I!I
	I!EI.I!!I+&I.z/set-passworduser_set_passwordc                   K   	 | j                   `|j                  t              j                  t        j                   | j                   k(  t        j                  dk(        j                         }n_|j                  t              j                  t        j                  | j                  k(  t        j                  dk(        j                         }|t        dd      t        j                  | j                        }||_        |j                          |j                  |       dddS # t        $ r}dt        |      dcY d }~S d }~ww xY ww)	Nr     User not foundrM   Tu)   Mot de passe réinitialisé avec succès!r#   F)r$   r%   r&   r'   r!   r(   r)   rU   rr   rs   new_passwordr2   r   r   r[   str)r   r   r   r   r\   s        r.   set_passwordr     s    
"".hhtn++DJJ:K:Q:Q,QSWS^S^bcScdjjlGhhtn++DJJ:K:Q:Q,QSWS^S^bcScdjjlG?C8HII%**+<+I+IJ*
		


7 B
 	

  
1v
 	

s5   ED%D* )E*	E3E EEEEz/check-sponsorship-code/{code}codec                     |j                  t              j                  t        j                  | k(        j	                         }|sdddS dddS )NFzCode invalide!r#   TzCode valide!)r%   r&   r'   rl   r(   )r   r   r   s      r.   check_sponsorship_coder   (  sN    hhtn##D$5$5$=>DDFG,<== >3 3r0   z/set-fcm-token
token_datadependenciesc                 2   |\  }}|j                  t              j                  t        j                  |j                  k(        j	                         }|t        dd      | j                  |_        |j                          |j                  |       dddS )Nr   r   rM   Fu   Token assigné avec succès!r#   )	r%   r&   r'   r=   r(   rU   device_tokenr   r   )r   r   r   r   r   s        r.   set_fcm_tokenr   2  s    HBhhtn##DGGtww$67==?G4DEE%22GIIKJJw 1 r0   z/login-adminadminc                 $   |j                  t              j                  t        j                  | j                  k(  t        j                  dk(        j                         }|sdddS t        t        |j                  | j                        |      S )Nr   Fu   Adresse mail non trouvée!r#   rn   )
r%   r&   r'   r$   r!   r(   rJ   r	   r=   r2   )r   r   admin_checks      r.   r/   r/   D  so    ((4.''

ekk(A4;;RSCSTZZ\K3
 	

 -%..Y[]^^r0   ),fastapir   r   r   app.models.roler   app.schemas.userr   r   r	   r
   r   r   r   r   app.services.emailr   app.services.smsr   app.utils.authentificationapp.utils.databaser   app.utils.helpersr   routerrv   getenvr   postDependsSessionr/   rJ   r   r;   r]   r   r   r   rT   r   puttupler    r0   r.   <module>r      s   / /  # # # - + ( %  ;	II17;  X)0 &	 &w & &R :A&/ F* F F  F, 4;FO b b' b b4 [4;FO -
 -
' -
 -
` !"-1#YTRVZgnougv 5Xs 5X
 5X]d 5X #5Xp  !,0IDQUJfmntfu /Xc /Xz /X\c /X "/Xd _IPQW 
/ 
w 
 
8 ,-4;FO 3 3' 3 .3 CJK_C` m 5  " ^+26? 	` 	` 	` 	`r0   