o
    ǂgD	                     @   s  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T d dlmZ e  e dZdZdZeddZddedefddZdefddZeejeefdedefddZ eejeefdedefddZ!defddZ"dS )    N)datetime	timedelta)JWTErrorjwt)DependsHTTPExceptionstatus)OAuth2PasswordBearer)JSONResponse)Session   )modelsdatabase)*)load_dotenv
SECRET_KEYHS256i  token)tokenUrldataexpires_deltac                 C   sN   |   }|rt | }n	t tdd }|d|i tj|ttd}|S )N   )minutesexp)	algorithm)	copyr   utcnowr   updater   encoder   	ALGORITHM)r   r   	to_encodeexpireencoded_jwt r#   -/var/www/html/answerous_api/db_config/auth.pycreate_access_token   s   r%   c              
   C   s^   zt j| ttgd}|d}|d u r||W S  ty. } ztddt| dd }~ww )N
algorithmssub  zInvalid token: status_codedetail)r   decoder   r   getr   r   str)r   credentials_exceptionpayloademailer#   r#   r$   verify_token   s   
r4   dbc                 C   sL   t tjdddid}t||}| tjtjj|k	 }|d u r$||S )NzCould not validate credentialszWWW-AuthenticateBearer)r+   r,   headers)
r   r   HTTP_401_UNAUTHORIZEDr4   queryr   Userfilterr2   first)r5   r   r0   r2   userr#   r#   r$   __get_current_user)   s   
r>   c                 C   s2   |  tjtjj|k }|stddd|S )Nr)   zInvalid tokenr*   )r9   r   r:   r;   r   r<   r   )r5   r   r=   r#   r#   r$   get_current_user5   s   r?   c                 C   s    t j| ttgd}|d}|S )Nr&   user_id)r   r-   r   r   r.   )r   r1   r@   r#   r#   r$   get_user_id_from_token<   s   
rA   )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%   r/   r4   get_dbr>   r?   rA   r#   r#   r#   r$   <module>   s(    


""