
    xh              	          S SK r S SKJrJr  S SKJrJr  S SKJr  S SKJ	r	J
r
  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  \" S/SS9r\ R0                  " S5      rSrSrSr\" SS9rS$S\S\S\S\4S jjrS\S\4S jr S\S\4S jr!S%S\"S\S-  4S jjr#S%S\"S\S-  4S jjr$\" \5      4S \4S! jjr%\" \5      4S \4S" jjr&\" \5      4S \4S# jjr'g)&    N)	timedeltadatetime)DependsHTTPException)OAuth2PasswordBearer)jwtJWTError)CryptContext)Session)status)RoleType)SessionLocal)Userbcryptauto)schemes
deprecated
SECRET_KEYHS256   i  z/api/auth/login)tokenUrldbpasswordemailphonec                     S nUb  [        X5      nOUb  [        X5      nU(       d  g[        R                  XR                  5      (       d  gU$ )NF)get_user_by_emailget_user_by_phonepwd_contextverifyr   )r   r   r   r   users        CD:\kofCorporation\kof-academy-backend\app\utils\authentification.pyauthenticate_userr#      sJ    D +		 +h66K    c                     U R                  [        5      R                  [        R                  U:H  [        R                  S:H  5      R                  5       $ NACTIVE)queryr   filterr   statefirst)r   r   s     r"   r   r   (   8    88D>  u!4djjH6LMSSUUr$   c                     U R                  [        5      R                  [        R                  U:H  [        R                  S:H  5      R                  5       $ r&   )r(   r   r)   r   r*   r+   )r   r   s     r"   r   r   -   r,   r$   dataexpires_deltac                    U R                  5       nU(       a  [        R                  " 5       U-   nO#[        R                  " 5       [        [        S9-   nUR                  SU05        [        R                  " U[        [        S9nU$ N)minutesexp)	algorithm)
copyr   utcnowr   ACCESS_TOKEN_EXPIRE_MINUTESupdater   encoder   	ALGORITHMr.   r/   	to_encodeexpireencoded_jwts        r"   create_access_tokenr?   1   sb    		I"]2"Y7R%SSeV_%**Y
iHKr$   c                    U R                  5       nU(       a  [        R                  " 5       U-   nO#[        R                  " 5       [        [        S9-   nUR                  SU05        [        R                  " U[        [        S9nU$ r1   )
r5   r   r6   r   REFRESH_TOKEN_EXPIRE_MINUTESr8   r   r9   r   r:   r;   s        r"   create_refresh_tokenrB   ;   sb    		I"]2"Y7S%TTeV_%**Y
iHKr$   tokenc                   #    [        [        R                  SSS0S9n [        R                  " U [
        [        /S9nUR                  S5      nUc  Ue [        5       n UR                  [        5      R                  [        R                  U:H  5      R                  5       nUc  UeXE4UR                  5         $ ! [         a    Uef = f! UR                  5         f = f7fNzCould not validate credentialszWWW-AuthenticateBearer)status_codedetailheaders)
algorithmssub)r   r   HTTP_401_UNAUTHORIZEDr   decoder   r:   getr	   r   r(   r   r)   idr+   closerC   credentials_exceptionpayloaduser_idr   r!   s         r"   check_token_validityrU   F   s     )00/#X.
$**UJI;G{{5)?'' 
 
B	xx~$$TWW%78>>@<''x 	
  $##$ 	
s5   C 5B; C  A
C *C ;CC CC c                  #    [        [        R                  SSS0S9n [        R                  " U [
        [        /S9nUR                  S5      nUc  Ue [        5       n UR                  [        5      R                  [        R                  U:H  5      R                  5       nUc  UeUR                  [         R"                  :w  a  UeXE47v   UR%                  5         g ! [         a    Uef = f! UR%                  5         f = f7frE   )r   r   rL   r   rM   r   r:   rN   r	   r   r(   r   r)   rO   r+   roler   ADMINrP   rQ   s         r"   check_user_is_adminrY   a   s     )00/#X.
$**UJI;G{{5)?'' 
 
Bxx~$$TWW%78>>@<''99&''h 	
  $##$ 	
s5   D5C D A.C/ DC,,D/DDc                    #    [        [        R                  SSS0S9n [        R                  " U [
        [        /S9nUR                  S5      nUc  Ue [        5       n UR                  [        5      R                  [        R                  U:H  5      R                  5       nUb  UR                  [         R"                  :w  a  UeXE4UR%                  5         $ ! [         a    Uef = f! UR%                  5         f = f7frE   )r   r   rL   r   rM   r   r:   rN   r	   r   r(   r   r)   rO   r+   rW   r   TRAINERrP   rQ   s         r"   check_user_is_trainerr\   ~   s     )00/#X.
$**UJI;G{{5)?'' 
 
B	xx~$$TWW%78>>@<499(8(88'' x 	
  $##$ 	
s5   C>5C C> A(C) C>C&&C>)C;;C>)NN)N)(osr   r   fastapir   r   fastapi.securityr   joser   r	   passlib.contextr
   sqlalchemy.ormr   	starletter   app.enums.role_typer   app.utils.databaser   app.models.userr   r   getenvr   r:   r7   rA   oauth2_schemestrr#   r   r   dictr?   rB   rU   rY   r\    r$   r"   <module>rl      s   	 ( * 1  ( "  ( +  H:&AYY|$
	  + $.?@' S  C V' V# V
V' V# Vd 9t3C t I4D  -4M,B c 6 ,3=+A S : .5]-C s r$   