o
    Xh                     @   sL  d dl mZ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 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Zd dlmZ d dlmZmZ d dl m!Z!m"Z" e  e Z#edgddZ$e#%dee
fdedefddZ&e#%dee
fdedefddZ'e#%dee fdefddZ(dS )    )	APIRouterHTTPExceptionDependsstatus)AsyncSession)select)get_db)User)SignupRequestLoginRequest)create_access_tokencreate_refresh_tokenverify_access_token)logger)CryptContext)	timedeltaN)load_dotenv)
HTTPBearerHTTPAuthorizationCredentials)validate_signup_requestvalidate_login_requestbcryptauto)schemes
deprecatedz/signup/userdbc              
      s  zXt d| j  t|  |tttj| jkI d H }| }|r-t	t
jddt| j}t| j| j| j|| jd}|| | I d H  t d| j  ddiW S  t	ya     ty } zt d| j d	t|  t	t
jd
t| dd }~ww )NzSignup attempt for email: zUser already existsstatus_codedetail)emailnameusernamepasswordorganizationzUser registered: msgzUser created successfullyzError during signup for email : Error: )r   infor    r   executer   r	   wherescalar_one_or_noner   r   HTTP_400_BAD_REQUESTpwd_contexthashr#   r!   r"   r$   addcommit	Exceptionerrorstr)r   r   resultexisting_userhashed_passwordnew_usere r9   B/var/www/html/construction_image-detection-poc/src/routers/auth.pysignup_user   sB   "

r;   z/login/credentialsc              
      sR  zzt d| j  t|  |tttj| jkI d H }| }|r.t	
| j|js>t d| j  ttjddt d| j  t|j|jdtttddd	d
I d H }t|j|jdtttdddd
I d H }||ddW S  ty     ty } zt d| j dt|  ttjdt| dd }~ww )NzLogin attempt for email: zLogin failed for zInvalid email or passwordr   zLogin successful for subuser_idACCESS_TOKEN_EXPIRE_MINUTES   )minutes)dataexpires_deltaREFRESH_TOKEN_EXPIRE_DAYS   )daysbearer)access_tokenrefresh_token
token_typezError during login for email r&   r'   )r   r(   r    r   r)   r   r	   r*   r+   r-   verifyr#   warningr   r   HTTP_401_UNAUTHORIZEDr   r?   r   intosgetenvr   r1   r2   r3   r,   )r<   r   r4   r   rI   rJ   r8   r9   r9   r:   
login_user@   sF   "rR   z	/refresh/c                    sN   t | jI d H }|d u rtdddt|d |d ddI d H }|dd	S )
Ni  z Invalid or expired refresh tokenr   r>   r?   r=   )rC   rH   )rI   rK   )r   r<   r   r   )r<   payloadnew_access_tokenr9   r9   r:   rJ   p   s   
rJ   ))fastapir   r   r   r   sqlalchemy.ext.asyncior   sqlalchemy.futurer   src.config.databaser   src.models.predictionr	   src.schemas.auth_schemar
   r   src.utils.authr   r   r   src.common.loggerr   passlib.contextr   datetimer   rP   dotenvr   fastapi.securityr   r   src.utils.validater   r   routerr-   postr;   rR   rJ   r9   r9   r9   r:   <module>   s.    +/