
    ˈ9h                     H   d dl mZmZmZ d dlmZ d dlmZ d dl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mZ d d	lmZmZmZ d d
lmZ d dlmZ  ed      Z ee       ee      fdedefdZ ee      fdefdZ ee      fdededefdZ ee      fdededefdZy)    )DependsHTTPExceptionSecurity)Session)get_db)verify_passworddecode_access_token)User)OAuth2PasswordBearer)validate_reset_token_entry)ForgotPasswordRequestPasswordResetResponsePasswordReset)generate_reset_token_entrysend_reset_emailverify_reset_token)hash_password)UserSessionz/auth/login)tokenUrltokendbc                    t        |       }|st        ddddd      |j                  t              j	                  t        j
                  | k(        j                         }|st        ddddd      |j                  t              j	                  t        j                  |d   k(        j                         }|st        ddddd      |S )	z1Retrieve the current user based on the JWT token.i  FzInvalid token)statuscodemessagestatus_codedetailzInvalid or expired sessionsubUser not found)	r	   r   queryr   filterr   firstr
   email)r   r   payloadsession_existsusers        7/var/www/html/hubwallet-dev/src/apps/auth/controller.pyget_current_userr)      s     "%(G#S_M
 	
 XXk*11+2C2Cu2LMSSUN#S=YZ
 	

 88D>  wu~!=>DDFD#S=MN
 	

 K    r'   c                 >    | j                   dk7  rt        dd      | S )z!Ensure that the user is an admin.admini  zAdmins onlyr   )roler   )r'   s    r(   get_current_adminr.   /   s     yyGMBBKr*   requestreturnc                   K   |j                  t              j                  t        j                  | j                  k(        j	                         }|st        dd      t        |j                  |      }t        d|j                          d|j                   }t        d|        	 t        |j                  |       t        d	
      S # t        $ r}t        dd      d }~ww xY ww)N  r    r   zGenerated reset token: z+http://localhost:8000/reset-password?token=zPassword Reset Link: i  zFailed to send reset emailz0Password reset link has been sent to your email.r   )r!   r
   r"   r$   r#   r   r   user_idprintr   r   	Exceptionr   )r/   r   r'   reset_token
reset_linkes         r(   forgot_passwordr:   =   s     88D>  w}}!<=CCED4DEE -T\\2>K 
#K$5$5#6
78 ?{?P?P>QRJ	!*
./RZ0 !)[\\  R4PQQRs*   B(C++C C+	C(C##C((C+c                 |  K   t        | j                  |      }|st        dd      |j                  t              j                  t        j                  | j                  k(        j                         }|st        dd      t        | j                        }||_        |j                          t        d      S w)Ni  zInvalid or expired reset tokenr   r2   r    z*Your password has been reset successfully.r3   )r   r   r   r!   r
   r"   idr4   r#   r   new_passwordpasswordcommitr   )r/   r   r7   r'   hashed_passwords        r(   reset_passwordrA   X   s     ,W]]B?K4TUU 88D>  GOO!;<BBDD4DEE $G$8$89O#DMIIK !)UVVs   B:B<N) fastapir   r   r   sqlalchemy.ormr   src.utils.dbr   src.apps.auth.servicesr   r	   src.apps.users.modelsr
   fastapi.securityr   r   src.apps.auth.schemasr   r   r   r   r   r   r   src.apps.auth.modelsr   oauth2_schemestrr)   r.   r:   rA    r*   r(   <module>rM      s    4 4 "  G & 1 = ] ] c c 0 , %m< #+="9QW C w : $++;#< D  IPPV ]#8 ]g ]\q ]6 @Gv W- WW WSh Wr*   