o
    ¿Ôi:  ã                   @   s„   d dl mZmZ 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 e
eƒZdd„ Zd	d
„ Zdd„ Zdd„ ZdS )é    )ÚrequestÚjsonify)Úgenerate_otpÚsend_otp_emailÚsave_otp_to_dbÚgenerate_token)Údatetime)ÚBcrypt)Úapp)Úconnect_to_databasec               
   C   s¨  t ƒ } | stdddœƒdfS | jdd}tj}| d¡}|s'tdddœƒd	fS z£z{| d
|f¡ | ¡ }|sItdddœƒdfW W | ¡  |  ¡  S | d|f¡ | ¡ }|r}|d }|t	 
¡  }td| d¡t|ƒ|d ddœƒdfW W | ¡  |  ¡  S tƒ }tƒ }	t|||	|| ƒ t||ƒ td|	ddœƒdfW W | ¡  |  ¡  S  tyÊ }
 ztd|
› ddœƒdfW  Y d }
~
W | ¡  |  ¡  S d }
~
ww | ¡  |  ¡  w )NúDatabase connection errorÚtrue©ÚmessageÚerroréô  T©Ú
dictionaryÚemailzEmail is requiredé  ú%SELECT id FROM users WHERE email = %súEmail not foundé”  zŸ
            SELECT otp, otp_expiry, token 
            FROM password_reset_tokens
            WHERE email = %s AND otp_expiry > NOW() AND is_used = 0
        Ú
otp_expiryz9OTP already sent. Please try again after the expiry time.z%Y-%m-%d %H:%M:%SÚtokenÚfalse)r   r   Útime_remainingr   r   éÈ   zOTP sent to your email)r   r   r   úAn unexpected error occurred: )r   r   Úcursorr   ÚjsonÚgetÚexecuteÚfetchoneÚcloser   ÚnowÚstrftimeÚstrr   r   r   r   Ú	Exception)Ú
connectionr   Údatar   ÚuserZexisting_otp_recordZotp_expiry_timer   Úotpr   Úe© r.   úK/Users/harjaapdhillon/Desktop/newidea/medvista_backend/Services/Password.pyÚforgot_password   s`   
%
Ýüûú
ñ

û$
€û
r0   c            
   
   C   sö  t ƒ } | stdddœƒdfS | jdd}tj}g }d|vr"| d¡ d|vr+| d¡ d	|vr4| d	¡ |rEtd
d |¡› ddœƒdfS | d¡}| d¡}| d	¡}zzu| d|f¡ | 	¡ }|svtdddœƒdfW W | 
¡  |  
¡  S | d||f¡ | 	¡ }|s—tdddœƒdfW W | 
¡  |  
¡  S |d |kr¸t ¡ |d k r¸tdddœƒdfW W | 
¡  |  
¡  S tdddœƒdfW W | 
¡  |  
¡  S  tyñ }	 ztd|	› ddœƒdfW  Y d }	~	W | 
¡  |  
¡  S d }	~	ww | 
¡  |  
¡  w )Nr   r   r   r   Tr   r   r,   r   úMissing required fields: ú, r   r   r   r   z®
            SELECT otp, otp_expiry, is_used 
            FROM password_reset_tokens
            WHERE email = %s AND token = %s
            ORDER BY id DESC LIMIT 1
        zInvalid or expired OTP or tokenr   zOTP verified successfullyr   r   zInvalid OTP or OTP expiredr   )r   r   r   r   r    ÚappendÚjoinr!   r"   r#   r$   r   r%   r(   )
r)   r   r*   Úmissing_fieldsr   r,   r   r+   Úrecordr-   r.   r.   r/   Ú
verify_otpF   s^   






êû
÷
ú
û$
€û
r7   c            
   
   C   s²  t ƒ } | stdddœƒdfS | jdd}tj}g }d|vr"| d¡ d|vr+| d¡ d	|vr4| d	¡ |rEtd
d |¡› ddœƒdfS | d¡}| d¡}| d	¡}z{zS| d||f¡ | 	¡ }|swtdddœƒdfW W | 
¡  |  
¡  S t |¡ d¡}| d||f¡ |  ¡  | d|f¡ |  ¡  tdddœƒdfW W | 
¡  |  
¡  S  tyÏ }	 ztd|	› ddœƒdfW  Y d }	~	W | 
¡  |  
¡  S d }	~	ww | 
¡  |  
¡  w )Nr   r   r   r   Tr   r   Únew_passwordr   r1   r2   r   zˆ
            SELECT otp, otp_expiry, is_used
            FROM password_reset_tokens
            WHERE email = %s AND token = %s
        zInvalid email or tokenúutf-8ú/UPDATE users SET password = %s WHERE email = %sz2DELETE FROM password_reset_tokens WHERE token = %súPassword updated successfullyr   r   r   )r   r   r   r   r    r3   r4   r!   r"   r#   r$   ÚbcryptÚgenerate_password_hashÚdecodeÚcommitr(   )
r)   r   r*   r5   r   r8   r   r6   Úhashed_new_passwordr-   r.   r.   r/   Úreset_password   sd   





ü
îÿÿÿÿ
û$
€û
rA   c                  C   sø   t  ¡ } |  d¡}|  d¡}|  d¡}|r|r|s"tdddœƒdfS tƒ }|s0tdddœƒd	fS | ¡ }| d
|f¡ | ¡ }|sJtdddœƒdfS t 	|d |¡s[tdddœƒdfS t 
|¡ d¡}| d||f¡ | ¡  | ¡  tdddœƒdfS )Nr   Úold_passwordr8   zMissing required fieldsr   r   r   r   r   z+SELECT password FROM users WHERE email = %szUser not foundr   r   zOld password is incorrectr9   r:   r;   r   r   )r   Úget_jsonr!   r   r   r   r"   r#   r<   Úcheck_password_hashr=   r>   r?   r$   )r*   r   rB   r8   r)   r   r+   r@   r.   r.   r/   Úchange_passwordº   s6   


ÿÿÿrE   N)Úflaskr   r   ZServices.SendEmailr   r   r   r   r   Úflask_bcryptr	   r
   Úconfr   r<   r0   r7   rA   rE   r.   r.   r.   r/   Ú<module>   s   ;9;