o
    5Ӆi94                     @  s  d dl mZ d dl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 d dlmZ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 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/ ede0ddZ1d<ddZ2d=dd Z3d>d!d"Z4d>d#d$Z5d>d%d&Z6e17d'd(d) Z8e19d*d+d, Z:e19d-d.d/ Z;e19d0d1d2 Z<e19d3d4d5 Z=e19d6d7d8 Z>e19d9d:d; Z?dS )?    )annotationsN)	Namespace)Path)	Blueprintrequestjsonify)build_config)create_run_dirshot)SESSION_POOL)is_mfa_screenis_authenticated)nav)select_dateselect_user)create)delete)
NewRowSpec)
DeleteRule)upload_docs)DocSpec)
get_statusconnect_sessionsubmit_mfa_codeclose_sessionui_automation_workerz/ui)
url_prefixdatadict | Nonereturnstrc                 C  s,   | pi } |  dp|  dpd }|pdS )N	tenant_idz	tenant-id 	<default>)getstrip)r   r"    r'   S/var/www/html/flask_server/apps/aroflo_connector_app/ui_automation_worker/routes.py_tenant_from$   s   r)   r"   boolc                 C  s2   t dpd }|sdS |dkr| dkS | |kS )NAROFLO_UI_ALLOWED_TENANT_IDr#   Tr$   )osgetenvr&   )r"   allowedr'   r'   r(   _is_allowed_tenant*   s   r/   c                 C  s   t | stddddfS d S )Ndeniedztenant_id not allowedstatusmessagei  )r/   r   r"   r'   r'   r(   _deny_if_not_allowed4   s   r5   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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"   reuse_sessionT	keep_open
state_fileartifacts_dirheadless
slow_mo_msstepFpause_on_mfamfa_coder#   
user_emaildocfilecommentfiltertimesheet_datetimesheet_butimesheet_user_idtimesheet_user_namerow
delete_allinclude_protectedr'   )r   r   )r"   argsr'   r'   r(   _build_cfg_for_tenant:   sh   	
rO   c                 C  s   t j| }|sd td| ddffS z't|jr%d td| ddffW S t|js6d td| ddffW S W |d fS  tyN   d td| ddff Y S w )NOFFLINE)stater"   i  MFA_REQUIREDUNKNOWN)r   	_sessionsr%   r   r   pager   	Exception)r"   rtr'   r'   r(   _get_runtime_or_error[   s   

rX   z/session/statusc                  C  s(   t tj} t| }|r|S tt| dS )Nr4   )r)   r   rN   r5   r   r   )r"   r0   r'   r'   r(   session_statusi   s
   
rY   z/session/connectc                  C  :   t jddpi } t| }t|}|r|S t|d}t|S NTsilentr4   )r   get_jsonr)   r5   r   r   r   r"   r0   outr'   r'   r(   session_connectr      
ra   z/session/mfac                  C  sd   t jddpi } t| }t|}|r|S | dpd }|s(tddddfS t||d	}t|S )
NTr\   coder#   errorzMissing MFA coder1     )r"   rc   )r   r^   r)   r5   r%   r&   r   r   )r   r"   r0   rc   r`   r'   r'   r(   session_mfa}   s   rf   z/session/closec                  C  rZ   r[   )r   r^   r)   r5   r   r   r_   r'   r'   r(   session_close   rb   rg   z/timesheets/createc                  C  s8  t jddpi } t| }t|}|r|S t|\}}|r|S t|}t|d}|jd)i i |j| 	dp:| 	dp:d
 | 	dpG| 	dpGd
 | 	d	pT| 	d
pTd
 | 	dpa| 	dpad
 d}| 	dpt| 	dptg }d }|rg }	|D ]u}
t|
tr|	|
 q}dd t|
dD }i }|D ](}d|vrtdd|ddf    S |dd\}}|
 ||
  < q|	dr|	dstdd|
 ddf  S |dd |dd |d d |	| q}d!d |	D }t|}| zTt|j|| |js|jr tj|j|||j|jd" |jr/tj|j|||jd# tj|j|||d$ t|j|d% |  |   td%|d&W W  d    S  t!y } z-z	t|j|d W n
 t!yr   Y nw tdt||d'd(fW  Y d }~W  d    S d }~ww 1 sw   Y  d S )*NTr\   zworker-timesheets-createrH   timesheet-bur#   rG   timesheet-daterI   timesheet-user-idrJ   timesheet-user-name)rH   rG   rI   rJ   rowsrK   c                 S     g | ]
}|  r|  qS r'   r&   .0pr'   r'   r(   
<listcomp>       z%timesheets_create.<locals>.<listcomp>;=rd   zInvalid row token: r1   re      hoursoverheadz--row missing hours/overhead: worktypeNTtrackingADMINnotec                 S  s@   g | ]}t |d  |d |dpd|dd|dddqS )	rw   rx   r}   Nry   rz   r{   r|   )rw   rx   r}   worktype_labeltracking_label)r   r%   )rp   rr'   r'   r(   rr      s    

user_id	user_nametarget_date)rl   okr2   r"   r2   r3   r"     r'   )"r   r^   r)   r5   rX   rO   r	   	__class____dict__r%   r&   
isinstancedictappendr!   splitr   lower
setdefaultr   tenant_lockts_navrunrU   rI   rJ   ts_userrG   ts_date	ts_creater
   
save_statetouchrV   )r   r"   r0   rW   errcfgrun_dirrows_rawrl   parsedspecpartsr`   partkvlocker'   r'   r(   timesheets_create   s   
	

 
"r   z/timesheets/deletec            
      C  sF  t jddpi } t| }t|}|r|S t|\}}|r|S t|}t|d}|jdi i |j| 	dp:| 	dp:d
 | 	dpG| 	dpGd
 | 	d	pT| 	d
pTd
 | 	dpa| 	dpad
 t| 	ddt| 	ddd}tddgdgd|j|jd}t|}| zQt|j|| |js|jrtj|j|||j|jd |jrtj|j|||jd tj|j|||d t|j|d |  |  td|dW W  d    S  ty }	 z,z	t|j|d W n	 ty   Y nw tdt|	|ddfW  Y d }	~	W  d    S d }	~	ww 1 sw   Y  d S )NTr\   zworker-timesheets-deleterH   rh   r#   rG   ri   rI   rj   rJ   rk   rL   FrM   )rH   rG   rI   rJ   rL   rM   zAdmin Dutiesz!Admin Duties - TelecommunicationszLunch Break - Unpaidexact)overheads_to_deleteprotected_overheads
match_moderL   rM   r   r   )ruler   r   rd   r   r   r'   ) r   r^   r)   r5   rX   rO   r	   r   r   r%   r&   r*   r   rL   rM   r   r   r   r   rU   rI   rJ   r   rG   r   	ts_deleter
   r   r   r   rV   r!   )
r   r"   r0   rW   r   r   r   r   r   r   r'   r'   r(   timesheets_delete   sz   

"r   z/users/upload-docsc                  C  s8  t jddpi } t| }t|}|r|S t|\}}|r|S t|}t|d}|jd&i i |j| 	dp:| 	dp:d
 | 	dpG| 	dpGd
 d	}| 	d
pUg }t|tr]|sftddddfS g }|D ]}	t|	tr|		dpwd
 }
|
stddddf  S |t|
|		dd|		ddd qjdd t|	dD }i }|D ](}d|vrtdd|ddf    S |dd\}}|
 ||
  < q|	dstdd|	ddf  S |t|d |	dd|	ddd qjt|}| zStj|j||dd tj|j|j|d}|js.tdd|dd fW W  d    S tj|j|||d!d" t|j|d# |   |!  td#|d$W W  d    S  t"y } z-z	t|j|d W n
 t"yr   Y nw tdt||dd%fW  Y d }~W  d    S d }~ww 1 sw   Y  d S )'NTr\   zworker-users-upload-docsrH   rh   r#   rB   z
user-email)rH   rB   docsrd   zdocs is requiredr1   re   rD   zdoc missing filerE   rF   )rD   rE   rF   c                 S  rm   r'   rn   ro   r'   r'   r(   rr   M  rs   z%users_upload_docs.<locals>.<listcomp>rt   ru   zInvalid doc token: rv   z--doc missing file= in Fr   )r   zuser not foundr   i  iȯ  )r   r   r   
timeout_msr   r   r   r'   )#r   r^   r)   r5   rX   rO   r	   r   r   r%   r&   r   listr   r   r   r   r!   r   r   r   r   	users_navr   rU   users_selectselect_user_by_emailrB   foundusers_uploadusers_upload_documentsr
   r   r   rV   )r   r"   r0   rW   r   r   r   docs_rawr   itemfr   kvr   r   r   r   resultr   r'   r'   r(   users_upload_docs+  s|   

$ 
*
"r   )r   r   r    r!   )r"   r!   r    r*   )r"   r!   )@
__future__r   r,   argparser   pathlibr   flaskr   r   r   9apps.aroflo_connector_app.ui_automation_zones.core.configr   <apps.aroflo_connector_app.ui_automation_zones.core.artifactsr	   r
   :apps.aroflo_connector_app.ui_automation_zones.core.runtimer   9apps.aroflo_connector_app.ui_automation_zones.auth.detectr   r   Dapps.aroflo_connector_app.ui_automation_zones.zones.timesheets.flowsr   r   r   r   r   r   r   r   r   r   Kapps.aroflo_connector_app.ui_automation_zones.zones.timesheets.flows.creater   Kapps.aroflo_connector_app.ui_automation_zones.zones.timesheets.flows.deleter   ?apps.aroflo_connector_app.ui_automation_zones.zones.users.flowsr   r   r   r   Kapps.aroflo_connector_app.ui_automation_zones.zones.users.flows.upload_docsr   Fapps.aroflo_connector_app.ui_automation_zones.services.session_servicer   r   r   r   __name__ui_worker_bpr)   r/   r5   rO   rX   r%   rY   postra   rf   rg   r   r   r   r'   r'   r'   r(   <module>   sR    





!






R
A