
    h              	          d dl 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	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 d dlmZ  edgd      Z e j0                  d      ZdZdZdZ ed      Zd$dedededefdZdedefdZ dedefdZ!d%de"dedz  fdZ#d%de"dedz  fdZ$ ee      fd efd!Z% ee      fd efd"Z& ee      fd efd#Z'y)&    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                     d }|t        | |      }n|t        | |      }|syt        j                  ||j                        sy|S )NF)get_user_by_emailget_user_by_phonepwd_contextverifyr   )r   r   r   r   users        a/Users/theessential/Documents/Github/KofAcademy/kof-academy-backend/app/utils/authentification.pyauthenticate_userr#      sM    D U+		 U+h6K    c                     | j                  t              j                  t        j                  |k(  t        j                  dk(        j                         S NACTIVE)queryr   filterr   statefirst)r   r   s     r"   r   r   (   8    88D>  u!4djjH6LMSSUUr$   c                     | j                  t              j                  t        j                  |k(  t        j                  dk(        j                         S r&   )r(   r   r)   r   r*   r+   )r   r   s     r"   r   r   -   r,   r$   dataexpires_deltac                 
   | j                         }|rt        j                         |z   }n%t        j                         t        t              z   }|j                  d|i       t        j                  |t        t              }|S 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                 
   | j                         }|rt        j                         |z   }n%t        j                         t        t              z   }|j                  d|i       t        j                  |t        t              }|S 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                   K   t        t        j                  dddi      }	 t        j                  | t
        t        g      }|j                  d      }||	 t               }	 |j                  t              j                  t        j                  |k(        j                         }||||f|j                          S # t        $ r |w xY w# |j                          w xY ww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>>@<''4x 	
  $##$ 	
s5   C#6B? C#$A
C .C#?CC#C  C#c                  K   t        t        j                  dddi      }	 t        j                  | t
        t        g      }|j                  d      }||	 t               }	 |j                  t              j                  t        j                  |k(        j                         }|||j                  t         j"                  k7  r|||f |j%                          y # t        $ r |w xY w# |j%                          w xY ww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6C" D$A-C1 D"C..D1DDc                   K   t        t        j                  dddi      }	 t        j                  | t
        t        g      }|j                  d      }||	 t               }	 |j                  t              j                  t        j                  |k(        j                         }||j                  t         j"                  k7  r|||f|j%                          S # t        $ r |w xY w# |j%                          w xY ww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'' 4x 	
  $##$ 	
s5   D 6C D $A'C+ D C((D +C==D )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RYY|$
	  + $.?@' S  C V' V# V
V' V# Vd 9t3C t I4D  -4M,B c 6 ,3=+A S : .5]-C s r$   