
    _gD	                        d dl Z d dlmZmZ d dlmZmZ d dl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mZ d d
l d dlmZ  e         e j,                  d      ZdZdZ ed      ZddedefdZdefdZ eej>                         ee      fdedefdZ  eej>                         ee      fdedefdZ!defdZ"y)    N)datetime	timedelta)JWTErrorjwt)DependsHTTPExceptionstatus)OAuth2PasswordBearer)JSONResponse)Session   )modelsdatabase)*)load_dotenv
SECRET_KEYHS256i  token)tokenUrldataexpires_deltac                    | j                         }|rt        j                         |z   }n!t        j                         t        d      z   }|j	                  d|i       t        j                  |t        t              }|S )N   )minutesexp)	algorithm)	copyr   utcnowr   updater   encoder   	ALGORITHM)r   r   	to_encodeexpireencoded_jwts        )/var/www/html/answerous/db_config/auth.pycreate_access_tokenr&      sa    		I"]2"Yr%::eV_%**Y
iHK    c                     	 t        j                  | t        t        g      }|j	                  d      }|||S # t
        $ r}t        ddt        |             d }~ww xY w)N
algorithmssub  zInvalid token: status_codedetail)r   decoder   r!   getr   r   str)r   credentials_exceptionpayloademailes        r%   verify_tokenr7      sd    P**UJI;G[['='' Poc!fX4NOOPs   7: 	A!AA!dbc                    t        t        j                  dddi      }t        ||      }| j	                  t
        j                        j                  t
        j                  j                  |k(        j                         }|||S )NzCould not validate credentialszWWW-AuthenticateBearer)r.   r/   headers)
r   r	   HTTP_401_UNAUTHORIZEDr7   queryr   Userfilterr5   first)r8   r   r3   r5   users        r%   __get_current_userrB   )   su    )00/#X.
  56E88FKK ''(9(9U(BCIIKD|##Kr'   c                     | j                  t        j                        j                  t        j                  j                  |k(        j                         }|st        dd      |S )Nr,   zInvalid tokenr-   )r=   r   r>   r?   r   r@   r   )r8   r   rA   s      r%   get_current_userrD   5   sL    88FKK ''(9(9U(BCIIKDODDKr'   c                 j    t        j                  | t        t        g      }|j	                  d      }|S )Nr)   user_id)r   r0   r   r!   r1   )r   r4   rF   s      r%   get_user_id_from_tokenrG   <   s)    jj
	{CGkk)$GNr'   )N)#osr   r   joser   r   fastapir   r   r	   fastapi.securityr
   fastapi.responsesr   sqlalchemy.ormr    r   r   dependencies.helperdotenvr   getenvr   r!   ACCESS_TOKEN_EXPIRE_MINUTESoauth2_schemedictr&   r2   r7   get_dbrB   rD   rG    r'   r%   <module>rW      s    	 (  2 2 1 * "  !   RYY|$
	" $g6d 9 	P 	P &-X__%=GTaLb 
7 
c 
 $+8??#;Q^I_  3 # r'   