
    bjg                     X   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            e j        dd          Z e j        d	d
          Z e e j        dd                    Zd ZdedefdZdededefdZdedededefdZdedefdZdefdZdedededefdZdS )    N)datetime	timedelta)RequestHTTPException)load_dotenvT)override
JWT_SECRETnihf38rn28rhf8nr3JWT_ALGORITHMHS256JWT_EXPIRATION_MINUTES1440c            
          t          j        t          j        dd          t          j        dd          t          j        dd          t          j        dd          t          j        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     AC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\auth.pyget_connectionr&      sg    Yy+..Yy&))9g..Yy*--="--   r$   r   returnc                     t          j        |                                 t          j                                                              S N)bcrypthashpwencodegensaltdecode)r   s    r%   hash_passwordr/   "   s2    =**FN,<,<==DDFFFr$   hashedc                 t    t          j        |                                 |                                          S r)   )r*   checkpwr,   )r   r0   s     r%   verify_passwordr3   &   s&    >(//++V]]__===r$   user_idemailnamec                     | ||t          j                    t          t                    z   t          j                    d}t	          j        |t          t                    S )N)minutes)idr5   r6   expiat)	algorithm)r   utcnowr   r   jwtr,   r	   r   )r4   r5   r6   payloads       r%   create_tokenr@   .   sW      95K#L#L#LL   G :gz]CCCCr$   requestc                 v   | j                             d          }t          d|           |r|                    d          st	          dd          |                    d          d         }t          d	|           	 t          j        |t          t          g
          }n_# t          j
        $ r t	          dd          t          $ r3}t          dt          |                     t	          dd          d }~ww xY w|                    d          }t          d|           |st	          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 tokenr9   zDecoded user_id:  zInvalid token payload)headersgetprint
startswithr   splitr>   r.   r	   r   ExpiredSignatureError	Exceptionstr)rA   authorizationtokenr?   er4   s         r%   get_user_from_tokenrV   =   sa   O''88M	.-((( _ 8 8 C C _4]^^^^$$Q'E	
e$$$E*UJM?KKK$ Z Z Z4XYYYY E E Eos1vv&&&ODDDDE kk$G	
g&&& M4KLLLLNs   ?"B" ")C>.C99C>c                 Z   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   rH            )r9   r6   r5   password_hash
created_at)r&   cursorexecutefetchonecloserR   )r5   conncurrows       r%   get_user_by_emailrd   \   s    D
++--CKKW	   ,,..CIIKKKJJLLL t!fAQQ#a&kk  r$   c                 d   t                      }|                                }t          |          }	 |                    d| ||f           |                                }|                                 |d         |d         |d         t          |d                   d|                                 |                                 S # t          j	        j
        $ r& |                                 t          dd	          w xY w# |                                 |                                 w xY w)
Nz
            INSERT INTO users (name, email, password_hash)
            VALUES (%s, %s, %s)
            RETURNING id, name, email, created_at
            r   rH   rX   rY   )r9   r6   r5   r\   rJ   zEmail already registered.rD   )r&   r]   r/   r^   r_   commitrR   r`   r   errorsUniqueViolationrollbackr   )r6   r5   r   ra   rb   r[   rc   s          r%   register_userrj   q   s"   D
++--C!(++M
 5-(	
 	
 	
 llnna&FVc!f++	
 
 			

 ?* Q Q Q4OPPPPQ 			

s   A,C :DD *D/)r!   r>   r*   r   r   r   fastapir   r   dotenvr   r"   r	   r   intr   r&   rR   r/   boolr3   r@   rV   rd   dictrj   r#   r$   r%   <module>rp      s   				 



   ( ( ( ( ( ( ( ( * * * * * * * *       T    RY|%899
	/733YRY'?HHII   GC GC G G G G>c >3 >4 > > > >D# Dc D D D D D D S    >S    * C 3 4      r$   