o
    µÛ¢ia  ã                   @  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 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)Úget_request_hostnameÚ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)
rF   r   rG   rH   Ú	full_namerE   rI   rJ   rK   rL   )r,   r   )r=   r?   r@   rA   rB   rC   rD   rN   r   r   r   Ú_normalize_aroflo_user,   s(   $örO   rK   rL   c                 C  sˆ   t tƒ d}z8| t¡}d }| r| tj| k¡ ¡ }|s(|r(| tj|k¡ ¡ }|r8|jr8|j	r8|j	W | 
¡  S W | 
¡  dS | 
¡  w )N)ÚhostnameÚworker)r   r
   Úqueryr	   ÚfilterrK   ÚfirstrL   Ú
is_enabledÚroleÚclose)rK   rL   ÚsessionÚqÚrowr   r   r   Ú_resolve_role_from_positionF   s   

þr[   rV   c                 C  s,   | pd  ¡  ¡ }|dv r|S |dv rdS dS )Nr   )rQ   ÚmanagerÚadminÚ
superadmin)Údirectorr]   rQ   )r   Úlower©rV   Úrr   r   r   Ú_normalize_roleU   s   rc   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)r\   r]   r^   )r]   r^   )r^   rQ   r\   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)rc   ra   r   r   r   Ú_capabilities_for_role^   s   ôrn   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”  rK   rL   rV   Úok)rs   ÚuserÚcapabilitiesz[leave_app] auth_login failed)r   Úget_jsonr,   r   r`   r   r   r<   rO   r[   rc   rn   Ú	Exceptionr   r-   Ú	exceptionr   )r?   r   rp   Ú
masterpassÚrawÚprofilerV   Úer   r   r   Ú
auth_loginq   s8   
ý"€þr   )r   r   )r   r   r   r   )r=   r   r   r>   )rK   r   rL   r   r   r   )rV   r   r   r   )rV   r   r   r   )Ú
__future__r   r   r6   r(   r0   Úpathlibr   Úflaskr   r   r   r   Ú	config.dbr   Úapps.leave_form_app.modelsr	   Úshared.utilsr
   Ú__name__Úauth_bpr   r   r<   rO   r[   rc   rn   Úpostr   r   r   r   r   Ú<module>   s(   







	