
    Glh              
          S SK JrJrJr  S SKJrJr  S SKJr  S SK	J
r
  S SK7  S SKJr  S SK7  S SKJr  S SKJr  S S	KJr  \" 5       r\R-                  S
S5      r\R1                  S5      \" \5      4S\S\4S jj5       r\R1                  S5      \" S5      \" S5      \" \5      4S\S\S\4S jj5       r\R1                  S5      \" \5      4S\S\S\S\4S jj5       rg)    )	APIRouterFile
UploadFile)
AdminLoginUserRegisterStudent)send_otp_email)send_otp_phone)*)get_db)
OTPContext)	UserState)RoleTypeFILE_STORAGE_PATHfilesz/logincredentialsdbc                    UR                  [        5      R                  [        R                  U R                  :H  [        R                  S:H  5      R                  5       nU(       d
  [        SSS9e[        R                  U R                  UR                  5      (       d
  [        SSS9e[        5       nX2l        [        R                  5       [        SS9-   Ul        UR!                  5         UR#                  U5        UR                  (       a  [%        UR                  US	9  O%UR&                  (       a  [)        UR&                  US
9  SSUR*                  S.$ )NACTIVE  zUtilisateur introuvablestatus_codedetaili  zMot de passe incorrect   minutesto_emailotpto_phoner   TuA   OTP envoyé. Vérifiez votre email ou téléphone pour continuer.statusmessageuser_id)queryUserfilteremailstatefirstHTTPExceptionpwd_contextverifypasswordgenerate_otpr   datetimeutcnow	timedeltaotp_expirationcommitrefreshr   phoner	   id)r   r   userr   s       =D:\kofCorporation\kof-academy-backend\app\routers\auth_web.py	web_loginr:      s     88D>  {/@/@!@$**PXBXY__aD4MNN k22DMMBB4LMM .CH"//+i.BBDIIKJJt zz

4	

4 V77     z	/register.N	user_dataavatarc                 (  #    [         R                  " U 5      nUR                  (       ap  UR                  [        5      R                  [        R                  UR                  :H  [        R                  S:H  5      R                  5       nU(       a
  [        SSS9eUR                  (       ap  UR                  [        5      R                  [        R                  UR                  :H  [        R                  S:H  5      R                  5       nU(       a
  [        SSS9e[        R                  UR                  5      nS nU(       a  UR                  R                  S5      S   n[        R                   R#                  [$        ['        S5       SU 35      n[)        US	5       n	U	R+                  UR-                  5       I S h  vN 5        S S S 5        [	        UR                  UUR.                  UR0                  UR2                  UR                  UR4                  [6        R8                  S
S
U=(       d    S[:        R<                  S9n
[?        5       nXl         [B        RE                  5       [G        SS9-   U
l$        URK                  U
5        URM                  5         URO                  U
5        UR                  (       a  [Q        UR                  US9  O[S        UR                  US9I S h  vN   SSU
RT                  S.$  GN=! , (       d  f       GN>= f N)7f)Nr     u.   Ce numéro de téléphone est déjà utilisé.r   u)   Cette adresse email est déjà utilisée..
   wbFzfiles/default_avatar.png)r(   r.   	firstnamelastnameaddressr6   country_coderoleemail_verifyphone_verifyr=   r)   r   r   r   r   TuE   Compte étudiant créé avec succès. OTP envoyé pour vérification.r!   )+r   model_validate_jsonr6   r%   r&   r'   r)   r*   r+   r(   r,   hashr.   filenamesplitospathjoinr   get_random_intopenwritereadrD   rE   rF   rG   r   STUDENTr   INACTIVEr/   r   r0   r1   r2   r3   addr4   r5   r   r	   r7   )r<   r=   r   r8   existing_phoneexisting_emailhashed_passwordavatar_pathextfdb_userr   s               r9   register_studentr`   2   s<     229=D zz$..tzzTZZ/GW_I_`ffhC8hiizz$..tzzTZZ/GW_I_`ffhC8cdd!&&t}}5O Koo##C(,ggll#49K8LAcU6ST+t$GG&++-'( % jj ..jj&&88  G  .CK%__.11EEGFF7OIIKJJw zz

4djjc::: Z:: C ( %$@ 	;s=   FLK>>K;
?K>DL&L'L;K>>
L	Lz/verify-otpr$   r   contextc           
        #    UR                  [        5      R                  [        R                  U :H  5      R	                  5       nU(       d
  [        SSS9eUR                  U:w  d"  UR                  [        R                  5       :  a
  [        SSS9eUS:X  aV  UR                  [        R                  :w  a
  [        SSS9e[        R                  Ul
        UR                  (       a  SUl        O9US	:X  a)  UR                  [        R                  :w  a
  [        SS
S9eO
[        SSS9eSUl        SUl        UR!                  5         UR#                  U5        [%        [&        S9n[)        UR                  UR*                  S.US9n[%        [,        S9n[/        UR                  UR*                  S.US9nSSUR                  UR0                  UR2                  UR                  UR4                  UR*                  UR6                  S.UUSS.$ 7f)u   
Vérifie l'OTP pour deux contextes :
  - register : activation du compte après inscription
  - login    : validation OTP pour connexion
r   u   Utilisateur non trouvé.r   r?   u   OTP invalide ou expiré.registeru   Ce compte est déjà actif.Tloginu-   Le compte doit être actif pour se connecter.z2Contexte invalide. Utiliser 'register' ou 'login'.Nr   )subrH   )dataexpires_deltau   Vérification OTP réussie.)r7   rD   rE   r(   r6   rH   r=   bearer)r"   r#   r8   access_tokenrefresh_token
token_type)r%   r&   r'   r7   r*   r+   r   r3   r0   r1   r)   r   rW   r   r(   rI   r4   r5   r2   ACCESS_TOKEN_EXPIRE_MINUTEScreate_access_tokenrH   REFRESH_TOKEN_EXPIRE_MINUTEScreate_refresh_tokenrD   rE   r6   r=   )	r$   r   ra   r   r_   access_token_expiresri   refresh_token_expiresrj   s	            r9   
verify_otprr   t   s     hhtn##DGGw$67==?G4NOO {{cW33hoo6GG4NOO *==I...C8UVV!((==#'G  
G	==I,,,C8ghh - 4hii GK!GIIKJJw %-HI&ZZ6*L
 &.JK(ZZ6+M 0** **((]]]]LLnn
 %& s   HH
)fastapir   r   r   app.schemas.userr   r   app.services.emailr   app.services.smsr	   app.utils.authentificationapp.utils.databaser   app.utils.helpersr   app.enums.user_stater   app.enums.role_typer   routerrO   getenvr   postDependsSessionr:   strr`   rr    r;   r9   <module>r      s   / / < - + ( %  ( * (	II17;  X5<V_ : 7  < [#Yd&/>>> 	> >B ]PWX^P_ Cc C Cj Cg C Cr;   