
    h(                     <   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 d dlmZmZ d dlmZ d d	lmZmZmZmZ d d
lmZmZmZmZ d dlZd dlZd dl mZmZmZ d dlm Z m!Z!m"Z" d dlm#Z#m$Z$ d dlm%Z% d dl&m'Z'm(Z(  e       Z)e)jU                  de+       e        ee      fdedefd       Z,e)jU                  de+       ee      fdedefd       Z-e)jU                  de       ee      fdedefd       Z.e)jU                  d       ee       ee      fdedefd       Z/e)jU                  de"       ee      fde defd       Z0e)jU                  d e"       ee      fde!defd!       Z1e)je                  d"       ee      fd#e3defd$       Z4y)%    )	APIRouterDependsHTTPExceptionHeader)OAuth2PasswordRequestForm)Session)datetime)get_db)create_access_token)UserSessionPasswordResetToken)User)LoginTokenRequestTokenRequestUserDetailsResponse
BranchInfo)verify_passwordget_current_useroauth2_schemedecode_access_tokenN)r   r   status)ForgotPasswordRequestPasswordResetPasswordResetResponse)forgot_passwordreset_password)hash_password)BranchStorez/login)response_modelcredentialsdbc           	         	 |j                  t              j                  t        j                  | j                  k(        j                         }|sdddi dS t        | j                  |j                        sdddi dS |j                  t              j                  t        j                  |j                  k(        j                          t        d|j                  i      }dd l}	 t        |j                  d
d            }|j                  t              j                  t        j                   |k(        j                         }|snbt        |j                  ||dt#        j$                               }|j'                  |       |j)                          d	dd|d||dddS # t*        $ rL}t-        dt        |             t-        t/        j0                                ddt        |      i dcY d }~S d }~ww xY w)NF  User not foundr   codemessagedata  zInvalid credentialssubr   Ti  i )user_idtoken
login_codeis_login_code_used
created_at   zLogin successfulbearer)access_tokenr.   
token_typer   r'   r(   r3   r4   r)   ERROR:  )queryr   filteremailusernamefirstr   passwordpassword_hashr   r,   deleter   randomstrrandintr.   r	   utcnowaddcommit	Exceptionprint	traceback
format_exc)	r!   r"   user	jwt_tokenr@   r.   existing_tokensessiones	            3/var/www/html/hubwallet-dev/src/apps/auth/router.pyloginrP      s   
@
xx~$$TZZ;3G3G%GHNNP+	  {33T5G5GH0	  	$$[%8%8DLL%HIPPR (

(;<	 	V^^D%89JXXk299+:P:PT^:^_eegN!	  LL!$(
 	w
		 )%" )(&
 	
  
hAi""$%1v	
 	

s,   AF$ &F$ ?D$F$ $	G9-AG4.G94G9z/use-login-coderequestc                    	 |j                  t              j                  t        j                  | j                  k(        j	                         }|sdddi dS |j
                  rdddi dS |j                  t              j                  t        j                  |j                  k(        j	                         }|sdddi dS d|_        |j                          dd	d
|j                  d|j                  dddS # t        $ rL}t        dt        |             t        t        j                                ddt        |      i dcY d }~S d }~ww xY w)NFr$   zInvalid login coder&   i  z Login code has already been usedr%   Tr1   zLogin via login code successfulr2   )r3   r4   r5   r6   r7   )r8   r   r9   r.   r<   r/   r   r,   rE   r-   rF   rG   rA   rH   rI   )rQ   r"   rM   rJ   rN   s        rO   use_login_coderS   d   sO   
6
((;'..""g&8&88

%' 	 /	  %%=	  xx~$$T\\W__%DEKKM+	  &*"
		 8#MM" '&

 
	
  
hAi""$%1v	
 	

s2   AC8 C8 +AC8 6C8 8	EAEEEz/user-detailsc                 $   t        | j                        }|st        dd      |j                  t              j                  t        j                  |d   k(        j                         }|st        dd      |j                  t              j                  t        j                  |j                  k(        j                         }d }d }g }|r|d   j                  }|j                  t              j                  t        j                  |k(        j                         }|r|j                  }|D 	cg c].  }	t        |	j                  |	j                   |	j"                        0 }}	t%        d	|j                  |j                  |||
      S c c}	w )Nr*   Invalid or expired tokenstatus_codedetailr+   r$   r%   r   )	branch_idbranch_namebranch_addressT)r   r,   	user_namestore_id
store_namebranches)r   r-   r   r8   r   r9   r:   r<   r   r,   allr]   r   namer   rY   rZ   addressr   )
rQ   r"   payloadrJ   r_   r]   r^   branch_datastorebranchs
             rO   get_user_details_from_tokenrg      s[   
 "'--0G4NOO 88D>  wu~!=>DDFD4DEE xx&&v~~'EFJJLH HJKA;''&&u~~'ABHHJJ #
   **"..%~~
 
 )) 
s   33Fz/logoutrJ   c                     |j                  t              j                  t        j                  | j                  k(        j	                          |j                          ddiS )z-Logout user by deleting their session tokens.r(   z User logged out, session removed)r8   r   r9   r,   r?   rE   )rJ   r"   s     rO   logoutri      sH     HH[  !4!4!DELLNIIK9::    z/forgot-passwordc                 6   K   t        | |       d {   S 7 w)N)r   )rQ   r"   s     rO   forgot_password_endpointrl      s      "----s   z/reset-passwordc                   K   | j                   }| j                  }t        |      }|st        dd      |j	                  t
              j                  t
        j                  |d   k(        j                         }|st        dd      t        |      }||_
        |j                          |j                  |       t        dd	      S w)
Nr*   rU   rV   r+   r$   r%   Tz%Password has been reset successfully.)successr(   )r-   new_passwordr   r   r8   r   r9   r:   r<   r   r>   rE   refreshr   )rQ   r"   r-   ro   current_userhashed_passwords         rO   reset_password_endpointrs      s      MME''L 'u-L4NOO 88D>((|E7J)JKQQSL4DEE $L1O "1LIIKJJ| !7 s   CC
z/latest-reset-tokenr:   c                   K   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      |j                  t              j                  t        j                  |j                  k(        j                  t        j                  j                               j	                         }|st        dd      d|j                  iS w)zf
    Fetch the latest reset token for a given email.
    Only for debugging and testing purposes.
    r$   r%   rV   zNo reset token foundr-   )r8   r   r9   r:   r<   r   r   r,   order_byr0   descr-   )r:   r"   rJ   reset_tokens       rO   get_latest_tokenrx   ?  s      88D>  u!45;;=D4DEE((-.55""dll2h!,,1134UUW  4JKK[&&''s   C(C*)5fastapir   r   r   r   fastapi.securityr   sqlalchemy.ormr   r	   src.utils.dbr
   src.apps.auth.servicesr   src.apps.auth.modelsr   r   src.apps.users.modelsr   src.apps.auth.schemasr   r   r   r   src.apps.auth.controllerr   r   r   r   rH   secretsr   r   r   r   r   r   r   src.apps.stores.modelsr   r   routerpostdictrP   rS   rg   ri   rl   rs   getrA   rx    rj   rO   <module>r      s   = = 6 "   6 ? & a a i i   - - ] ] D 0 0	
 Xd+-4Y&/D
*D
D
 ,D
P t4 &/:
:
:
 5:
z _-@A &/--- B-d Y 01 ; ;w ; ; 0EFQXY_Q` .,A .w . G. (   &/'''	'b !"5<V_ (# (7 ( #(rj   