o
    ˜i                     @  s   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 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dd(ddZd)ddZd*ddZd+ddZd+d d!Zd,d#d$Zd+d%d&Zd'S )-    )annotations)	Namespace)AnyDict   )build_config)SESSION_POOLRuntime_tenant_state_file)launch_browser_context)create_run_dir)ensure_logged_in)is_mfa_screenis_authenticated)
handle_mfaT)reuse_session	keep_open	tenant_idstrr   boolr   c                 C  s   t di dd dd dd d| d|d|dd dd d	d d
d dddddddddg dg dg dg dddddddddg dddd}t|S )Nbase_urlusernamepasswordr   r   r   
state_fileartifacts_dirheadless
slow_mo_msstepFpause_on_mfamfa_code 
user_emaildocfilecommentfiltertimesheet_datetimesheet_butimesheet_user_idtimesheet_user_namerow
delete_allinclude_protected )r   r   )r   r   r   argsr-   r-   d/var/www/html/flask_server/apps/aroflo_connector_app/ui_automation_zones/services/session_service.py
_build_cfg   sh   	
r0   rtr	   returnNonec                 C  s6   t j |t j| < W d    d S 1 sw   Y  d S )N)r   _lock	_sessions)r   r1   r-   r-   r/   _register_runtime2   s   "r6   c              	   C  sf   t   t| |}| rt|nd }tt j| |d\}}| }t|||||dt jd}|	  |S )N)storage_stateT)r   browsercontextpager   managed_pw)
r   _ensure_playwrightr
   existsr   r   r<   new_pager	   touch)cfgr   r   storage_state_argr8   r9   r:   r1   r-   r-   r/   _create_pending_runtime7   s    
	rC   Dict[str, Any]c                 C  sn   t j| }|s| ddS d}zt|jrd}nt|jsd}W n ty+   d}Y nw | |t|j|j	dS )NOFFLINEr   stateONLINEMFA_REQUIREDUNKNOWN)r   rG   r   last_active_ts)
r   r5   getr   r:   r   	Exceptionr   r   rK   )r   r1   rG   r-   r-   r/   
get_statusL   s$   


rN   c                 C  s  t | ddd}t|d}t| }|n tj| }|r(t| dW  d    S t|| }z$t|j	||ddd |
  |  t| | | dd	W W  d    S  ty   t|j	rpt| | | d
d	 Y W  d    S z|  W   ty   Y  w w 1 sw   Y  d S )NTr   r   r   
ui-sessionr   r    F)run_dirr   	allow_mfarH   rF   rI   )r0   r   r   tenant_lockr5   rL   rN   rC   r   r:   
save_stater@   r6   rM   r   close)r   rA   rR   lockexistingr1   r-   r-   r/   connect_sessionb   s<   







rY   codec                 C  s   t j| }|s| dddS t|js| dddS t| ddd}t|d}t|j|||d	 t|jr@|	  |
  | dd
S | dddS )NrE   zNo active session)r   rG   messagerH   zMFA not requiredTrO   rP   )rR   mfa_code_argrF   rI   zMFA rejected or not completed)r   r5   rL   r   r:   r0   r   r   r   rU   r@   )r   rZ   r1   rA   rR   r-   r-   r/   submit_mfa_code   s   



r]   c                 C  s   t |  | ddS )NrE   rF   )r   rV   rQ   r-   r-   r/   close_session   s   

r^   N)r   r   r   r   r   r   )r   r   r1   r	   r2   r3   )r   r   r2   r	   )r   r   r2   rD   )r   r   rZ   r   r2   rD   )
__future__r   argparser   typingr   r   core.configr   core.runtimer   r	   r
   core.browserr   core.artifactsr   auth.sessionr   auth.detectr   r   auth.mfar   r0   r6   rC   rN   rY   r]   r^   r-   r-   r-   r/   <module>   s"    
#



