
    o>iV                     2   d dl mZmZ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mZmZmZ d dlmZmZ d dlmZmZ d d	lmZ d d	lmZ d d
lmZm Z  d dl!m"Z"  e       Z#e#jI                  dejJ                         e        ee      fdede	fd       Z&e#jI                  dejN                         ee      fdejP                  de	fd       Z)e#jI                  dejJ                         e        ee      fdede	fd       Z*e#jI                  dejJ                         e        ee      fdede	fd       Z+e#jI                  d      d        Z,e#jI                  dejJ                         ee      fdejZ                  de	fd       Z.e#jI                  d       ee      fdej^                  de	fd       Z0e#jI                  d       ee      fdejb                  de	fd        Z2e#jg                  d!       ed"       ee      fd#e4de	fd$       Z5y%)&    )	APIRouterDependsHTTPExceptionstatusQuery)OAuth2PasswordRequestForm)Session)get_db)settings)verify_passwordcreate_access_tokencreate_refresh_tokenget_password_hash)send_verification_emailsend_reset_password_email)CompanyAdmin)schemas)jwtJWTError)	timedeltaz/admin/login)response_model	form_datadbc                 T   |j                  t              j                  t        j                  | j                  k(        j                         }|r t        | j                  |j                        st        t        j                  dddi      t        |j                  d      }|ddS )	NEmail ou mot de passe incorrectWWW-AuthenticateBearerstatus_codedetailheadersadminsubjectrolebearer)access_token
token_type)queryr   filteremailusernamefirstr   passwordhashed_passwordr   r   HTTP_401_UNAUTHORIZEDr   id)r   r   r#   r(   s       2/home/www/utuvibe.miabetepe.com/app/auth/router.pylogin_adminr4      s    HHUO""5;;)2D2D#DEKKME	(:(:E<Q<QR444'2
 	

 'uxxgFL(AA    z	/registercompanyc                    |j                  t              j                  t        j                  | j                  k(        j	                         }|rt        dd      t        | j                        }t        | j                  | j                  | j                  |d      }|j                  |       |j                          |j                  |       t        |j                  dt        d      	      }t!        |j                  |       |S )
N  u   Email déjà enregistrér    r!   F)company_namer,   phone_numberr0   is_verifiedverify_email   )hoursr%   r&   expires_delta)r*   r   r+   r,   r.   r   r   r/   r:   r;   addcommitrefreshr   r2   r   r   )r6   r   
db_companyr0   new_companytokens         r3   registerrH      s    '"))'--7==*HIOOQJ4NOO'(8(89O))mm))'K FF;IIKJJ{^[dkm[noEK--u5r5   z/loginc                    |j                  t              j                  t        j                  | j                  k(        j                         }|rmt        | j                  |j                        rM|j                  st        dd      t        |j                  d      }t        |j                  d      }||ddS t        t        j                  dd	d
i      )Ni  uC   Email non vérifié. Veuillez vérifier votre boîte de réception.r9   r6   r$   r'   r(   refresh_tokenr)   r   r   r   r   )r*   r   r+   r,   r-   r.   r   r/   r0   r<   r   r   r2   r   r   r1   )r   r   r6   r(   rK   s        r3   loginrL   5   s    hhw&&w}}	8J8J'JKQQSG?9#5#5w7N7NO##C8}~~+GJJYO-gjjyQ!-]ef	f
000#X. r5   z/company/loginc                     t        | |      S )N)rL   )r   r   s     r3   login_company_specificrN   F   s    Br5   z/logoutc                  
    ddiS )Nmessageu   Déconnexion réussie rQ   r5   r3   logoutrR   J   s    .//r5   z/refreshrequestc                 2   	 t        j                  | j                  t        j                  t        j
                  g      }|j                  d      dk7  rt        dd      |j                  d      }|j                  d      }|d	k(  rY|j                  t              j                  t        j                  t        |      k(        j                         st        dd
      t        ||      }|| j                  ddS # t        $ r t        dd      w xY w)N
algorithmstyperD   i  Type de token invalider9   subr&   r6      Utilisateur non trouvér$   r'   rJ   u#   Token de rafraîchissement invalide)r   decoderK   r   
SECRET_KEY	ALGORITHMgetr   r*   r   r+   r2   intr.   r   r   )rS   r   payloadrY   r&   new_access_tokens         r3   rK   rK   N   s    [**W22H4G4GU]UgUgThi;;v)+ S9QRRkk% {{6"9HHW%,,WZZ3s8-CDJJL%#>WXX.sF 07CXCXhpqq [4YZZ[s   C<C? ?Dz/forgot-passwordc                    |j                  t              j                  t        j                  | j                  k(        j	                         }|r8t        |j                  dt        d            }t        |j                  |       ddiS )Nreset   )minutesr@   rP   u@   Si l'email existe, un lien de réinitialisation a été envoyé.)	r*   r   r+   r,   r.   r   r2   r   r   )rS   r   r6   reset_tokens       r3   forgot_passwordrg   `   sg    hhw&&w}}'EFLLNG)'**7ZclnZop!'--=YZZr5   z/reset-passwordc                 ,   	 t        j                  | j                  t        j                  t        j
                  g      }|j                  d      dk7  rt        dd      |j                  d      }|j                  t              j                  t        j                  t        |      k(        j                         }|st        dd	      t        | j                        |_        |j#                          d
diS # t$        $ r t        dd      w xY w)NrU   r&   rc   r8   zUtilisation de token invalider9   rY     rZ   rP   u%   Mot de passe mis à jour avec succès   Token invalide ou expiré)r   r[   rG   r   r\   r]   r^   r   r*   r   r+   r2   r_   r.   r   new_passwordr0   rC   r   )rS   r   r`   rY   r6   s        r3   reset_passwordrl   i   s    Q**W]]H,?,?XM_M_L`a;;v') S9XYYkk% ((7#**7::S+ABHHJC8QRR"3G4H4H"I
		BCC Q4OPPQs   C9C< <Dz/verify-email.rG   c                    	 t        j                  | t        j                  t        j                  g      }|j                  d      }|j                  d      }|dk7  rt        dd      |j                  t              j                  t        j                  t        |      k(        j                         }|st        dd	      |j                  rd
diS d|_        |j                          d
diS # t        $ r t        dd      w xY w)NrU   r&   rY   r=   r8   rX   r9   ri   rZ   rP   u   Email déjà vérifiéTu   Email vérifié avec succèsrj   )r   r[   r   r\   r]   r^   r   r*   r   r+   r2   r_   r.   r<   rC   r   )rG   r   r`   r&   rY   r6   s         r3   r=   r=   {   s    Q**UH$7$7XEWEWDXY{{6"kk% >!C8PQQ((7#**7::S+ABHHJC8QRR788"
		9:: Q4OPPQs   CC1 C1 1DN)6fastapir   r   r   r   r   fastapi.securityr   sqlalchemy.ormr	   app.core.databaser
   app.core.configr   app.core.securityr   r   r   r   app.core.emailr   r   
app.modelsr   r   app.authr   auth_schemasapp.companiescompany_schemasjoser   r   datetimer   routerpostTokenr4   CompanyResponseCompanyCreaterH   rL   rN   rR   RefreshTokenRequestrK   PasswordResetRequestrg   PasswordResetConfirmrl   r^   strr=   rQ   r5   r3   <module>r      sg   D D 6 " $ $ k k M % , 4  	 ^L,>,>?7>yPWX^P_ 	B4 	Bg 	B @	B [)H)HICJ6? o33   J, Xl&8&8918'RX/ .   :  l.@.@ABI)[bci[j  &?  QX   B  Y0 0 Z(:(:;KRSY? [<;; [ [ <["  NUV\o [\>> [G [ ![ MTU[_ QL== Q7 Q  Q" O#Cj Q Qg Q Qr5   