
    @h               
       l   d dl m Z  d dlZd dlZd dl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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 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'm(Z(m)Z) d dl*Z*d dl+Z+d dl,m-Z-  e       Z.e.j_                  dd       ee       eej`                        fde(dede1fd       Z2e.jg                  dd       ee       eej`                        fde)dede1fd       Z4e.j_                  d       ee      fdee
 e       f   defd        Z5e.j_                  d!d       ee       eej`                        fde&dede1fd"       Z6e.jo                  d#d       ee       eej`                        fdede1fd$       Z8e.jg                  d%d       ee       eej`                        fde'dede1fd&       Z9e.j_                  d'       ee      fdefd(       Z:e.j_                  d)       ee      fdefd*       Z;e.j_                  d+       ee      fdefd,       Z< e-d-gd./      Z=d0e>d1e>fd2Z?d3e>d4e>d1e@fd5ZAe.j_                  d6       ee      fd7e>d8e>d9e>defd:       ZBd?d;eCd1e>fd<ZDe.j_                  d=       ee      fd7e>defd>       ZEy)@    )datetimeN)	Annotated)	APIRouterDependsHTTPException)OAuth2PasswordRequestForm)Session)service)get_db)
JWTManager)TblAdmin)TblRole)TblSeafarers)TblSeafarerIdType)TblSeafarerRole)
TblUserOTP)TblUsers)
send_email)CustomResponse   )SeafarerRoleCreateSeafarererRoleUpdate
UserCreate
UserUpdate)CryptContextz/authT)response_model_exclude_nonerequestdbtokenc                 h   K   t        j                  ||      j                  |        d {   S 7 wN)r
   AuthServicecreate_userr   r   r   s      //var/www/html/beacon-api/app/api/auth/router.pycreate_adminr&      *     $$R.::7CCCC   )202c                 h   K   t        j                  ||      j                  |        d {   S 7 wr!   )r
   r"   update_userr$   s      r%   update_adminr+      r'   r(   z/user/logincredentialsc                 j   K   t        j                  |i       j                  |        d {   S 7 w)N)r   )r
   r"   
user_login)r,   r   s     r%   
login_userr/   #   s*     $$Rr2==kJJJJs   *313z/Seafarer-rolec                 h   K   t        j                  ||      j                  |        d {   S 7 wr!   )r
   r"   create_roler$   s      r%   r1   r1   '   r'   r(   z/Seafarer-rolesc                 f   K   t        j                  | |      j                          d {   S 7 wr!   )r
   r"   get_all_roles)r   r   s     r%   r3   r3   +   s(     $$R/==????s   (1/1z/Seafarer-role/{sf_role_id}c                 h   K   t        j                  ||      j                  |        d {   S 7 wr!   )r
   r"   update_roler$   s      r%   r5   r5   /   s*     $$R/;;GDDDDr(   z/load-roles-from-file/c                    t        j                  d      }|j                         st        dd      t	        |d      5 }t        j                  |      }d d d        D ]&  }t        |d   |d         }| j                  |       ( 	 | j                          d
diS # 1 sw Y   IxY w# t        $ r+}| j                          t        d	t        |            d }~ww xY w)Nzdata/roles.json  zroles.json not foundstatus_codedetailrrole_id	role_name)r<   r=     messagez1Roles loaded from JSON and inserted successfully.)pathlibPathexistsr   openjsonloadr   addcommit	Exceptionrollbackstrr   	file_pathfile
roles_dataroledb_rolees          r%   load_roles_from_filerR   3   s    ./I4JKK	i	YYt_
 
$y/T+=NO
w <
		 JKK 
	  <
CF;;<#   B	B) B&)	C2&CCz/load-seafarer-roles-from-file/c                    t        j                  d      }|j                         st        dd      t	        |d      5 }t        j                  |      }d d d        D ]&  }t        |d   |d         }| j                  |       ( 	 | j                          d
diS # 1 sw Y   IxY w# t        $ r+}| j                          t        d	t        |            d }~ww xY w)Nzdata/sf_roles.jsonr7   zsf_roles.json not foundr8   r;   
sf_role_idsf_role_name)rU   rV   r>   r?   :Seafarer Roles loaded from JSON and inserted successfully.)r@   rA   rB   r   rC   rD   rE   r   rF   rG   rH   rI   rJ   rK   s          r%   load_seafarer_roles_from_filerX   D   s    12I4MNN	i	YYt_
 
!T,-?dSaNbc
w <
		 STT 
	  <
CF;;<rS   z!/load-seafarer-id-type-from-file/c                    t        j                  d      }|j                         st        dd      t	        |d      5 }t        j                  |      }d d d        D ]&  }t        |d   |d         }| j                  |       ( 	 | j                          d
diS # 1 sw Y   IxY w# t        $ r+}| j                          t        d	t        |            d }~ww xY w)Nzdata/sf_id_type.jsonr7   zsf_id_type.json not foundr8   r;   id_type
sf_id_type)rZ   r[   r>   r?   rW   )r@   rA   rB   r   rC   rD   rE   r   rF   rG   rH   rI   rJ   rK   s          r%   load_seafarer_ID_type_from_filer\   U   s    34I4OPP	i	YYt_
 
#DO\HZ[
w <
		 STT 
	  <
CF;;<rS   bcryptauto)schemes
deprecatedpasswordreturnc                 ,    t         j                  |       S r!   )pwd_contexthash)ra   s    r%   hash_passwordrf   v   s    H%%    plain_passwordhashed_passwordc                 .    t         j                  | |      S r!   )rd   verify)rh   ri   s     r%   verify_passwordrl   y   s    no>>rg   z/reset-passwordusernameotpnew_passwordc                   K   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      S |j                  t              j                  t        j                  |j                  k(  t        j                  |k(  t        j                  t        j                         k\        j	                         }|st        dd      S ||_        |j                  dv rW|j                  t              j                  t        j                  |j                   k(        j	                         }|rm||_        ne|j                  dk(  rV|j                  t$              j                  t$        j&                  |j                   k(        j	                         }|r||_        |j)                          t        dd      S w)	N0User not foundstatusr?   zInvalid or expired OTP   r            1zPassword reset successfully)queryr   filter	user_namefirstr   r   usr_idrn   expiryr   utcnowra   r<   r   admin_id	entity_id	pass_wordr   seafarer_idrG   )rm   rn   ro   r   user	otp_entryadminseafarers           r%   reset_passwordr   }   s\    88H$$X%7%78%CDJJLDS2BCC
##,NNc!!22	

 
  S2JKK DM||y "))(*;*;t~~*MNTTV*EO		88L)001I1IT^^1[\bbd ,HIIK.KLLs   GGlengthc                     t         j                  t         j                  z   dj                  fdt	        |       D              S )N c              3   H   K   | ]  }t        j                          y wr!   )secretschoice).0_charss     r%   	<genexpr>z+generate_random_password.<locals>.<genexpr>   s     @-Q7>>%(-s   ")stringascii_lettersdigitsjoinrange)r   r   s    @r%   generate_random_passwordr      s0      6==0E77@%-@@@rg   z/forgot-password11c                 ^  K   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      S t        d      }||_        |j                  dv rp|j                  t              j                  t        j                  |j                  k(        j	                         }|r||_        |j                  }n|j                  }n|j                  dk(  r~|j                  t              j                  t        j                  |j                  k(        j	                         }|r"||_        |j                   xs |j                  }n|j                  }n|j                  }|j#                          t%        |dd| d	
       t        dd      S w)Nrq   rr   rs      ru   rx   zYour New PasswordzCHello,

Your password has been reset automatically.

New Password: z*

Please log in and change it immediately.)tosubjectbodyry   z*A new password has been sent to your email)rz   r   r{   r|   r}   r   r   ra   r<   r   r   r   r   email_idr   r   emailrG   r   )rm   r   r   ro   r   email_tor   s          r%   forgot_password1r      sW    88H$$X%7%78%CDJJLDS2BCC+B/L DM||y "))(*;*;t~~*MNTTV*EO~~H~~H		88L)001I1IT^^1[\bbd ,H~~7H~~H>>IIK#VWcVd  eQ  R
 .Z[[s   F+F-)
   )Fr   rD   r@   typingr   fastapir   r   r   fastapi.securityr   sqlalchemy.ormr	   app.api.authr
   app.database.main.mysqlr   app.dependency.authanticationr   app.models.main.adminr   app.models.main.roler   app.models.main.seafarerr    app.models.main.seafarer_id_typer   app.models.main.seafarer_roler   app.models.main.user_otpr   app.models.main.usersr   app.utils.email_utilsr   app.utils.schemas_utilsr   schemasr   r   r   r   r   r   passlib.contextr   auth_routerpostverify_tokendictr&   putr+   r/   r1   getr3   r5   rR   rX   r\   rd   rJ   rf   boolrl   r   intr   r    rg   r%   <module>r      s       5 5 6 "   * 4 * ( 1 > 9 / * , 2 T T   (k'd;6=foU\]g]t]tUu D
 Dg Dd D <D T:6=foT[\f\s\sTt D
 Dg DT D ;D - `ghn`o K),Ewy,P"Q KV] K !K "tD=DV_\cdnd{d{\| D1 DW DUY D ED "E&-foWZMdMdEe @G @d @ F@ .DQCJ6?bijt  kB  kB  cC E3 E E[_ E RE *+'.v LW L ,L  3407 Ug U 5U  5629&/ U U 7U< H:&A&C &C &?C ?# ?$ ? #$SZ[aSb M3 MS M M M %M4AS A# A
 &'8? \S \g \ (\rg   