o
    Épi  ã                   @  sÎ   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZ d dlmZ d dlmZ e	deƒ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'dd„Ze d¡d d!„ ƒZdS )(é    )ÚannotationsN)ÚPath)Ú	BlueprintÚrequestÚjsonifyÚcurrent_app)Úget_session)ÚRolePositionMapÚleave_api_authÚreturnÚstrc                   C  s   t  d¡pd ¡ S )NÚLEAVE_APP_MASTERPASSÚ )ÚosÚgetenvÚstrip© r   r   úD/var/www/html/flask_server/apps/leave_form_app/api/v1/routes_auth.pyÚ_get_masterpass   s   r   c                   C  s   t ttƒ ¡ jd ƒS )Né   )r   r   Ú__file__ÚresolveÚparentsr   r   r   r   Ú_project_root   s   r   ÚemailÚdictc              	   C  sà   t ƒ }tjddddd| dg}tj ¡ }|| d¡rd|d  nd	 |d< d
|d< tj 	dd 
|¡¡ tj|||dddd}|jdkr^td|j› d|j ¡ d d… › d|j ¡ d d… › ƒ‚|jpbd	 ¡ }|sktdƒ‚t |¡S )Nz-mzapps.aroflo_connector_app.cliÚuserszby-emailz--emailz--rawÚ
PYTHONPATHú:r   Ú1ÚPYTHONNOUSERSITEz[leave_app] aroflo-cli cmd=%sú TF)ÚcwdÚenvÚcapture_outputÚtextÚcheckr   zAroFlo CLI failed rc=z stderr=i   z stdout=z AroFlo CLI returned empty stdout)r   ÚsysÚ
executabler   ÚenvironÚcopyÚgetr   ÚloggerÚinfoÚjoinÚ
subprocessÚrunÚ
returncodeÚRuntimeErrorÚstderrr   ÚstdoutÚjsonÚloads)r   Úproject_rootÚcmdr#   ÚprocÚoutr   r   r   Ú_run_aroflo_users_by_email   s   
"
8
r;   Úpayloadúdict | Nonec                 C  s.  | pi   d¡pi }|  d¡pi }|sd S |  d¡pi }|  d¡p!i }|  d¡p(d ¡ }|  d¡p1d ¡ }|› d|›  ¡ pE|  d	¡pCd ¡ }|  d
¡pLd ¡ |  d¡pTd ¡ |  d¡p\d ¡ |  d¡pdd ¡ ||  d	¡pmd ¡ |  d¡pud ¡ |  d¡p}d ¡ |  d¡p…d ¡ |  d¡p’|  d¡p’d ¡ dœ
S )NÚdataÚmatchÚorgÚuserpositionÚ
givennamesr   Úsurnamer!   ÚusernameÚuseridr   ÚmobileÚphoneÚorgidÚorgnameÚ
positionidÚpositionnameÚposition)
rE   r   rF   rG   Ú	full_namerD   rH   rI   rJ   rK   )r+   r   )r<   r>   r?   r@   rA   rB   rC   rM   r   r   r   Ú_normalize_aroflo_user+   s(   $örN   rJ   rK   c                 C  s‚   t ƒ }z8| t¡}d }| r| tj| k¡ ¡ }|s%|r%| tj|k¡ ¡ }|r5|jr5|jr5|jW | 	¡  S W | 	¡  dS | 	¡  w )NÚworker)
r   Úqueryr	   ÚfilterrJ   ÚfirstrK   Ú
is_enabledÚroleÚclose)rJ   rK   ÚsessionÚqÚrowr   r   r   Ú_resolve_role_from_positionE   s   

þrY   rT   c                 C  s,   | pd  ¡  ¡ }|dv r|S |dv rdS dS )Nr   )rO   ÚmanagerÚadminÚ
superadmin)Údirectorr[   rO   )r   Úlower©rT   Úrr   r   r   Ú_normalize_roleT   s   ra   c                 C  sJ   t | ƒ}|dv |dv |dv |dv |dv |dv |dk|dk|dk|dkdœ
S )	N)rZ   r[   r\   )r[   r\   )r\   rO   rZ   r[   r\   )
Úcan_select_bu_tcÚcan_approve_teamÚcan_view_teamÚcan_view_allÚcan_push_to_arofloÚcan_assign_rolesÚ	is_workerÚ
is_managerÚis_adminÚis_superadmin)ra   r_   r   r   r   Ú_capabilities_for_role]   s   ôrl   z/auth/loginc               
   C  s8  t jddpi } |  d¡pd ¡  ¡ }|  d¡pd}|r d|vr)tddd	œƒd
fS tƒ }|s7tddd	œƒdfS ||krDtddd	œƒdfS z4t|ƒ}t|ƒ}|sYtddd	œƒdfW S t	| dd¡| dd¡ƒ}t
|ƒ}||d< td|t|ƒdœƒW S  ty› } ztj d¡ tdt|ƒd	œƒdfW  Y d }~S d }~ww )NT)Úsilentr   r   Úpasswordú@ÚerrorzMissing/invalid email)ÚstatusÚmessagei  z#Missing LEAVE_APP_MASTERPASS in enviô  zInvalid passwordi‘  zUser not found in AroFloi”  rJ   rK   rT   Úok)rq   ÚuserÚcapabilitiesz[leave_app] auth_login failed)r   Úget_jsonr+   r   r^   r   r   r;   rN   rY   ra   rl   Ú	Exceptionr   r,   Ú	exceptionr   )r>   r   rn   Ú
masterpassÚrawÚprofilerT   Úer   r   r   Ú
auth_loginp   s8   
ý"€þr}   )r   r   )r   r   r   r   )r<   r   r   r=   )rJ   r   rK   r   r   r   )rT   r   r   r   )rT   r   r   r   )Ú
__future__r   r   r5   r'   r/   Úpathlibr   Úflaskr   r   r   r   Ú	config.dbr   Úapps.leave_form_app.modelsr	   Ú__name__Úauth_bpr   r   r;   rN   rY   ra   rl   Úpostr}   r   r   r   r   Ú<module>   s&   







	