o
    bjg                     @   s  d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZmZ d dl	m
Z
 e
dd e ddZe d	d
Zee ddZdd ZdedefddZdededefddZdedededefddZdedefddZdefddZdedededefd d!ZdS )"    N)datetime	timedelta)RequestHTTPException)load_dotenvT)override
JWT_SECRETnihf38rn28rhf8nr3JWT_ALGORITHMHS256JWT_EXPIRATION_MINUTES1440c                	   C   s<   t jtddtddtddtddtd	d
dS )NDB_HOST	localhostDB_PORT5432DB_NAMEfyndoDB_USERpostgresDB_PASSWORD )hostportdatabaseuserpassword)psycopg2connectosgetenv r!   r!   (/var/www/html/fyndo/pharma/fyndo/auth.pyget_connection   s   




r#   r   returnc                 C   s   t |  t   S N)bcrypthashpwencodegensaltdecode)r   r!   r!   r"   hash_password"   s   r+   hashedc                 C   s   t |  | S r%   )r&   checkpwr(   )r   r,   r!   r!   r"   verify_password&   s   r.   user_idemailnamec                 C   s2   | ||t  ttd t  d}tj|ttdS )N)minutes)idr0   r1   expiat)	algorithm)r   utcnowr   r   jwtr(   r   r
   )r/   r0   r1   payloadr!   r!   r"   create_token.   s   r:   requestc              
   C   s   | j d}td| |r|dstddd|dd }td	| ztj|tt	gd
}W n& tj
y=   tddd tyU } ztdt| tdddd }~ww |d}td| |shtddd|S )NAuthorizationzAuth header:zBearer i  z'Missing or invalid Authorization headerstatus_codedetail    zExtracted token:)
algorithmsz"Token expired. Please login again.zDecode error:zInvalid tokenr3   zDecoded user_id:  zInvalid token payload)headersgetprint
startswithr   splitr8   r*   r   r
   ExpiredSignatureError	Exceptionstr)r;   authorizationtokenr9   er/   r!   r!   r"   get_user_from_token=   s(   



rO   c                 C   sd   t  }| }|d| f | }|  |  |sd S |d |d |d |d t|d dS )NzMSELECT id, name, email, password_hash, created_at FROM users WHERE email = %sr   rA            )r3   r1   r0   password_hash
created_at)r#   cursorexecutefetchonecloserK   )r0   conncurrowr!   r!   r"   get_user_by_email\   s"   
r\   c                 C   s   t  }| }t|}z@z,|d| ||f | }|  |d |d |d t|d dW W |  |  S  tj	j
yK   |  tddd	w |  |  w )
Nz
            INSERT INTO users (name, email, password_hash)
            VALUES (%s, %s, %s)
            RETURNING id, name, email, created_at
            r   rA   rP   rQ   )r3   r1   r0   rT   rC   zEmail already registered.r=   )r#   rU   r+   rV   rW   commitrK   rX   r   errorsUniqueViolationrollbackr   )r1   r0   r   rY   rZ   rS   r[   r!   r!   r"   register_userq   s.   



ra   )r   r8   r&   r   r   r   fastapir   r   dotenvr   r    r   r
   intr   r#   rK   r+   boolr.   r:   rO   r\   dictra   r!   r!   r!   r"   <module>   s$    
