
    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&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        I/home/www/lekema-backend.kofcorporation.com/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   )queryr   filterr   r   first)r   r   s     r"   r   r   (   8    88D>  u!4dkkQ6FGMMOOr$   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>   0   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 r0   )
r4   r   r5   r   REFRESH_TOKEN_EXPIRE_MINUTESr7   r   r8   r   r9   r:   s        r"   create_refresh_tokenrA   :   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   r9   getr	   r   r(   r   r)   idr*   closerB   credentials_exceptionpayloaduser_idr   r!   s         r"   check_token_validityrT   E   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                  j                   t"        j$                  k7  r|| |j'                          y # t        $ r |w xY w# |j'                          w xY wwrD   )r   r   rK   r   rL   r   r9   rM   r	   r   r(   r   r)   rN   r*   roletyper   ADMINrO   rP   s         r"   check_user_is_adminrY   `   s     )00/#X.
$**UJI;G{{5)?'' 
 
Bxx~$$TWW%78>>@<''99>>X^^+'' 	
  $##$ 	
s5   D6C* D$A5C9 D*C66D9D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   r9   r6   r@   oauth2_schemestrr#   r   r   dictr>   rA   rT   rY    r$   r"   <module>ri      s	   	 ( * 1  ( "  ( +  H:&ARYY|$
	  + $.?@' S  C P' P# PP' P# Pd 9t3C t I4D  -4M,B c 6 ,3=+A S r$   