
    mh7              
          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 d dlmZ d dl d dlmZ d dlmZ d d	lmZ  e       Zej-                  d
d      Zej1                  d       ee      fdedefd       Zej1                  d       ed       ed       ee      fdededefd       Zej1                  d       ee      fdedededefd       Zy)    )	APIRouterFile
UploadFile)
AdminLoginUserRegisterStudent)send_otp_email)send_otp_phone)*)get_db)
OTPContext)	UserState)RoleTypeFILE_STORAGE_PATHfilesz/logincredentialsdbc                    |j                  t              j                  t        j                  | j                  k(  t        j                  dk(        j                         }|st        dd      t        j                  | j                  |j                        st        dd      t               }||_        t        j                         t        d      z   |_        |j!                          |j#                  |       |j                  rt%        |j                  |	       n#|j&                  rt)        |j&                  |
       dd|j*                  d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       [/Users/theessential/Documents/Github/KofAcademy/kof-academy-backend/app/routers/auth_web.py	web_loginr:      s     88D>  {/@/@!@$**PXBXY__aD4MNN k22DMMB4LMM .CDH"//+i.BBDIIKJJt zz

4	

4 V77     z	/register.N	user_dataavatarc                   K   t        j                  |       }|j                  rn|j                  t              j                  t        j                  |j                  k(  t        j                  dk(        j                         }|rt        dd      |j                  rn|j                  t              j                  t        j                  |j                  k(  t        j                  dk(        j                         }|rt        dd      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        t	        |j                  ||j.                  |j0                  |j2                  |j                  |j4                  t6        j8                  d
d
|xs dt:        j<                        }
t?               }||
_         tB        jE                         tG        d      z   |
_$        |jK                  |
       |jM                          |jO                  |
       |j                  rtQ        |j                  |       ntS        |j                  |       d {    dd|
jT                  dS 7 @# 1 sw Y   <xY w7 $w)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   sG     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GK%__.11EEGFF7OIIKJJw zz

4djjc::: Z:: C (	) 	)@ 	;s=   F	K<K-*K*
+K-3D"K<K:K<*K--K72	K<z/verify-otpr$   r   contextc           
      ,  K   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      |j                  |k7  s!|j                  t        j                         k  rt        dd      |dk(  rS|j                  t        j                  k7  rt        dd      t        j                  |_
        |j                  rDd|_        n<|d	k(  r*|j                  t        j                  k7  rt        dd
      t        dd      d|_        d|_        |j!                          |j#                  |       t%        t&              }t)        |j                  |j*                  d|      }t%        t,              }t/        |j                  |j*                  d|      }dd|j                  |j0                  |j2                  |j                  |j4                  |j*                  |j6                  d||ddS w)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;   