Ë
    ’IÖiªI  ã                   óp  — 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 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mZ ddlmZ ddlmZ  ej<                  e«      Z d„ Z!eee!d„ «       «       «       Z"eee!d„ «       «       «       Z#eee!d„ «       «       «       Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)y)é    N©Úwraps)Ú	timedelta)Úsettings)ÚrenderÚredirect)ÚJsonResponse)Útimezone)Úcsrf_exempt)Úrequire_POST)ÚUseré   )ÚComputerÚGlobalSettings)Úsync_authorized_keys)ÚJamfAPIc                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )zW
    Decorator to ensure incoming API requests contain the correct Pre-Shared Key.
    c                 ó–  •— t        t        dd «      }|s$t        j                  d«       t	        ddid¬«      S | j
                  j                  dd«      }|rh|j                  «       d	|j                  «       › �k7  rD| j                  j                  d
d«      }t        j                  d|› d�«       t	        ddid¬«      S  ‰| g|¢­i |¤ŽS )NÚAURA_API_SECRETzQSECURITY FAULT: AURA_API_SECRET is not configured in aura_ras_server/settings.py!ÚerrorzServer configuration erroréô  ©ÚstatusÚAuthorizationÚ zBearer ÚREMOTE_ADDRz
Unknown IPz%Unauthorized API access attempt from z. Invalid Bearer token.ÚUnauthorizedi‘  )
Úgetattrr   Úloggerr   r	   ÚheadersÚgetÚstripÚMETAÚwarning)ÚrequestÚargsÚkwargsÚexpected_secretÚauth_headerÚ	client_ipÚ	view_funcs         €ú/var/www/aura-ras/api/views.pyÚ_wrapped_viewz)require_api_secret.<locals>._wrapped_view   sÄ   ø€ ä!¤(Ð,=¸tÓDˆáÜ�L‰LÐlÔmÜ Ð*FÐ GÐPSÔTÐTà—o‘o×)Ñ)¨/¸2Ó>ˆá˜{×0Ñ0Ó2¸À×@UÑ@UÓ@WÐ?XÐ6YÒYØŸ™×(Ñ(¨¸ÓEˆIÜ�N‰NÐBÀ9À+ÐMdÐeÔfÜ ¨.Ð 9À#ÔFÐFá˜Ð2 4Ò2¨6Ñ2Ð2ó    r   )r+   r-   s   ` r,   Úrequire_api_secretr/      s$   ø€ ô ˆ9Óó3ó ð3ð Ðr.   c                 óx  — 	 t        j                  | j                  «      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }t	        ||||g«      s$t
        j                  d«       t        ddid¬	«      S t        j                  j                  ||||d
œ¬«      \  }}t        «        t
        j                  d|› d|› d�«       t        dd|j                  |j                  |j                  dœd¬	«      S # t         j                   $ rC t
        j                  d| j"                  j                  d«      › �«       t        ddid¬	«      cY S t$        $ rE}t
        j'                  dt)        |«      › �d¬«       t        dt)        |«      id¬	«      cY d }~S d }~ww xY w)NÚjssidÚroleÚ
public_keyÚhostnamez>Agent registration failed: Missing required fields in payload.r   z"Missing required fields in payloadé�  r   )r2   r3   r4   )r1   ÚdefaultszAgent successfully registered: z	 (JSSID: ú)Úsuccessz$Registered successfully with AuraRAS)r   ÚmessageÚidÚssh_portÚvnc_portéÈ   z4Invalid JSON format received at register_agent from r   úInvalid JSON formatz"Critical error in register_agent: T©Úexc_infor   )ÚjsonÚloadsÚbodyr!   Úallr   r$   r	   r   ÚobjectsÚupdate_or_creater   Úinfor:   r;   r<   ÚJSONDecodeErrorr#   Ú	Exceptionr   Ústr)	r%   Údatar1   r2   r3   r4   ÚcomputerÚcreatedÚes	            r,   Úregister_agentrO   0   s™  € ð$;Ü�z‰z˜'Ÿ,™,Ó'ˆà—‘˜Ó!ˆØ�x‰x˜ÓˆØ—X‘X˜lÓ+ˆ
Ø—8‘8˜JÓ'ˆä�E˜4 ¨XÐ6Ô7Ü�N‰NÐ[Ô\Ü Ð*NÐ OÐX[Ô\Ð\ä$×,Ñ,×=Ñ=ØàØ(Ø$ñð >ó 
Ñˆ�'ô 	Ôä�‰Ð5°h°Z¸yÈÈÈqÐQÔRÜØØ=Ø—+‘+Ø ×)Ñ)Ø ×)Ñ)ñ
ð ôð 	øô ×Ñò JÜ�‰ÐMÈgÏlÉl×N^ÑN^Ð_lÓNmÐMnÐoÔpÜ˜WÐ&;Ð<ÀSÔIÒIÜò ;Ü�‰Ð9¼#¸a»&¸ÐBÈTˆÔRÜ˜W¤c¨!£fÐ-°cÔ:Õ:ûð;ús,   ‚BD ÂA>D ÄAF9Å,F9Å4:F4Æ.F9Æ4F9c                 óò  — 	 t        j                  | j                  «      }|j                  d«      }|st	        ddid¬«      S t
        j                  j                  |¬«      j                  «       \  }}|dkD  r2t        «        t        j                  d|› �«       t	        d	d
dœd¬«      S t        j                  d|› d�«       t	        dddœd¬«      S # t         j                  $ rC t        j                  d| j                  j                  d«      › �«       t	        ddid¬«      cY S t        $ rE}t        j!                  dt#        |«      › �d¬«       t	        dt#        |«      id¬«      cY d }~S d }~ww xY w)Nr1   r   úMissing jssid in payloadr5   r   ©r1   r   z<Agent successfully unregistered and keys revoked for JSSID: r8   zUnregistered successfully©r   r9   r=   z*Unregister attempt failed: Endpoint JSSID z not found.Ú	not_foundzEndpoint not foundé”  z6Invalid JSON format received at unregister_agent from r   r>   z$Critical error in unregister_agent: Tr?   r   )rA   rB   rC   r!   r	   r   rE   ÚfilterÚdeleter   r   rG   r$   rH   r#   rI   r   rJ   )r%   rK   r1   Údeleted_countÚ_rN   s         r,   Úunregister_agentrZ   Z   sR  € ð;Ü�z‰z˜'Ÿ,™,Ó'ˆØ—‘˜Ó!ˆáÜ Ð*DÐ EÈcÔRÐRä#×+Ñ+×2Ñ2¸Ð2Ó?×FÑFÓHÑˆ�qà˜1ÒÜ Ô"Ü�K‰KÐVÐW\ÐV]Ð^Ô_Ü¨9ÐA\Ñ ]ÐfiÔjÐjä�N‰NÐGÈÀwÈkÐZÔ[Ü¨;ÐCWÑ XÐadÔeÐeøä×Ñò JÜ�‰ÐOÐPW×P\ÑP\×P`ÑP`ÐanÓPoÐOpÐqÔrÜ˜WÐ&;Ð<ÀSÔIÒIÜò ;Ü�‰Ð;¼CÀ»F¸8ÐDÈtˆÔTÜ˜W¤c¨!£fÐ-°cÔ:Õ:ûð;ús2   ‚A C ÁA'C Â+(C ÃAE6Ä)E6Ä1:E1Å+E6Å1E6c                 óž  — 	 t        j                  | j                  «      }|j                  d«      }|st	        ddid¬«      S t
        j                  j                  |¬«      j                  «       }|s(t        j                  d|› d�«       t	        dd	id
¬«      S d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        t        j                   «       |_        |j%                  «        t'        j(                  «       }t	        d|j*                  dœd¬«      S # t         j,                  $ rC t        j                  d| j.                  j                  d«      › �«       t	        ddid¬«      cY S t0        $ rE}t        j3                  dt5        |«      › �d¬«       t	        dt5        |«      id¬«      cY d }~S d }~ww xY w)Nr1   r   rQ   r5   r   rR   z'Check-in rejected: Computer with JSSID z not found. Needs registration.z*Computer not found. Please register first.rU   r4   Úserial_numberÚ	last_userÚprimary_userr8   )r   Úcheckin_interval_minutesr=   z3Invalid JSON format received at checkin_agent from r   r>   z!Critical error in checkin_agent: Tr?   r   )rA   rB   rC   r!   r	   r   rE   rV   Úfirstr   r$   r4   r\   r]   r^   r
   ÚnowÚlast_checkinÚsaver   ÚloadÚagent_checkin_interval_minutesrH   r#   rI   r   rJ   )r%   rK   r1   rL   Úsettings_objrN   s         r,   Úcheckin_agentrg   v   s°  € ð;Ü�z‰z˜'Ÿ,™,Ó'ˆØ—‘˜Ó!ˆáÜ Ð*DÐ EÈcÔRÐRä×#Ñ#×*Ñ*°Ð*Ó7×=Ñ=Ó?ˆÙÜ�N‰NÐDÀUÀGÐKjÐkÔlÜ Ð*VÐ WÐ`cÔdÐdà˜Ñ°4¸
Ñ3C˜xÔ0Ø˜dÑ"¸TÀ/Ñ=R HÔ$:Ø˜$Ñ°T¸+Ñ5F Ô 2Ø˜TÑ!¸4ÀÑ;O 8Ô#8ä (§¡£ˆÔØ�‰Œä%×*Ñ*Ó,ˆÜØØ(4×(SÑ(Sñ
ð ôð 	øô
 ×Ñò JÜ�‰ÐLÈWÏ\É\×M]ÑM]Ð^kÓMlÐLmÐnÔoÜ˜WÐ&;Ð<ÀSÔIÒIÜò ;Ü�‰Ð8¼¸Q»¸ÐAÈDˆÔQÜ˜W¤c¨!£fÐ-°cÔ:Õ:ûð;ús3   ‚A D* ÁAD* ÂBD* Ä*AGÅ?GÆ:GÇGÇGc           	      ó†  — t        j                  «       }| j                  j                  �råt	        | j                  dd «      }|r|j
                  nd}|r|j                  nd}|dv r|j                  nd}|dv r.t        j                  j                  «       j                  d«      }n9t        j                  j                  | j                  ¬«      j                  d«      }d}	 t        j                  d	d
g«      j                  d«      }t)        j*                  «       }		 t-        |j.                  «      }
|
dz   dz  }|D �]Ï  }|j4                  r|	|j4                  z
  nt7        d¬«      }|j9                  «       }|dk  rt;        |«      }|dkD  rd|_        d|_        Œ_||kD  rd|_        d|_        Œsd}d}	 tA        j@                  t@        jB                  t@        jD                  «      5 }|jG                  d«       |jI                  d|jJ                  f«       d}d d d «       |rÝd|jJ                  › �}d|jR                  › �}|jU                  «       D ]Š  }|jW                  d«      sŒ|jY                  «       }t[        |«      dk\  sŒ4|d   }|d   }|j]                  |«      s|j]                  |«      sŒa	 |j_                  dd«      d    }t-        |«      }|d!k\  rd} nŒŒ |rd"|_        d#|_        �Œ²d$|_        d%|_        �ŒÂd|_        d&|_        �ŒÒ ng }d }d}d}tc        | d'||||d(œ«      S # t         $ r,}t"        j%                  dt'        |«      › �«       Y d }~�ŒRd }~ww xY w# t0        t2        f$ r d}
Y �ŒDw xY w# 1 sw Y   �ŒexY w# t@        jL                  tN        tP        f$ r Y �Œ‰w xY w# t0        t`        f$ r Y �Œow xY w))NÚprofileÚCustomerÚauto©úServer AdministratorúDesktop AdministratorFz-last_checkin)Úassigned_usersr   Ússz-tnazutf-8z2Failed to run 'ss -tna' command for port polling: é<   é   iç  )Údaysr   i€Q Úredz$Offline (Unreachable for > 24 hours)Úyellowz+Offline / Sleeping (Missed recent check-in)gš™™™™™©?z	127.0.0.1Tú:ÚESTABé   é   é   r   éÿÿÿÿi €  ÚbluezActive Session EstablishedÚgreenzOnline & Tunnel Readyz*Tunnel Disconnected (Network Interruption)zapi/dashboard.html)Ú	computersÚ	user_roleÚ
user_themeÚlaps_enabled)2r   rd   ÚuserÚis_authenticatedr   r2   ÚthemeÚjamf_laps_enabledr   rE   rD   Úorder_byrV   Ú
subprocessÚcheck_outputÚdecoderI   r   r   rJ   r
   ra   Úintre   Ú
ValueErrorÚ	TypeErrorrb   r   Útotal_secondsÚabsÚstatus_colorÚstatus_textÚsocketÚAF_INETÚSOCK_STREAMÚ
settimeoutÚconnectr;   ÚtimeoutÚConnectionRefusedErrorÚOSErrorr<   Ú
splitlinesÚ
startswithÚsplitÚlenÚendswithÚrsplitÚ
IndexErrorr   )r%   rf   ri   r2   r„   r�   r~   Úactive_connectionsrN   ra   Úinterval_minutesÚgrace_period_secondsÚcompÚtime_since_checkinÚseconds_sinceÚis_listeningÚ	is_activeÚsÚ
ssh_suffixÚ
vnc_suffixÚlineÚpartsÚ
local_addrÚ	peer_addrÚpeer_port_strÚ	peer_ports                             r,   Ú	dashboardr±   �   sµ  € Ü!×&Ñ&Ó(€Là‡|�|×$Ó$Ü˜'Ÿ,™,¨	°4Ó8ˆÙ&ˆw�|Š|¨JˆÙ!(�—’¨fˆà9=ÐArÑ9r�|×5Ò5Ðx}ˆàÐDÑDÜ ×(Ñ(×,Ñ,Ó.×7Ñ7¸ÓH‰Iä ×(Ñ(×/Ñ/¸w¿|¹|Ð/ÓL×UÑUÐVeÓfˆIàÐð	Ü!+×!8Ñ!8¸$À¸Ó!H×!OÑ!OÐPWÓ!XÐô
 �l‰l‹nˆð	"Ü" <×#NÑ#NÓOÐð !1°2Ñ 5¸Ñ;Ðàó 8	TˆDØ<@×<MÒ<M  t×'8Ñ'8Ò!8ÔS\ÐbeÔSfÐØ.×<Ñ<Ó>ˆMà˜qÒ Ü # MÓ 2�à˜uÒ$Ø$)�Ô!Ø#I�Õ àÐ!5Ò5Ø$,�Ô!Ø#P�Õ ð  %�Ø!�	ðÜŸ™¤v§~¡~´v×7IÑ7IÓJð ,ÈaØŸ™ TÔ*ØŸ	™	 ;°·±Ð">Ô?Ø'+˜÷,ñ  Ø#$ T§]¡] OÐ!4�JØ#$ T§]¡] OÐ!4�Jà 2× =Ñ =Ó ?ò -˜ØŸ?™?¨7Õ3Ø$(§J¡J£L˜EÜ" 5›z¨Q›Ø-2°1©X 
Ø,1°!©H 	à#-×#6Ñ#6°zÔ#BÀj×FYÑFYÐZdÕFeð%-Ø8A×8HÑ8HÈÈaÓ8PÐQSÑ8T¨Ü47¸Ó4F¨	Ø+4¸Ò+=Ø8<¨IÙ,1ð ,>ð-ñ" !Ø,2˜Ô)Ø+G˜Ö(à,3˜Ô)Ø+B˜Ö(à(0�DÔ%Ø'S�DÖ$ñq8	Tðv ˆ	ØˆØˆØˆä�'Ð/ØØØØ$ñ	2ó ð øô[ ò 	Ü�L‰LÐMÌcÐRSËfÈXÐVÔWÝûð	ûô œIÐ&ò 	"Ø!Óð	"ú÷2,ñ ,ûô Ÿ™Ô(>ÄÐHò Úðûô* -7¼
Ð+Cò %-Ú(,ð%-úsf   Ã#&L+ ÄM# Æ52NÇ'1M;ÈNÊ2'N-Ì+	M Ì4!MÍM Í#M8Í7M8Í;N	Î NÎN*Î)N*Î-O Î?O c           	      ób  — | j                   j                  st        d«      S t        | j                   dd «      }|r|j                  nd}|dvrt        d«      S t
        j                  j                  d¬«      j                  d«      }t        j                  j                  «       j                  d«      }| j                  d	k(  rÈ| j                  j                  d
«      }| j                  j                  d«      }|r…t        j                  j                  |¬«      j                  «       }|rU|j                   j#                  |«       t$        j'                  d| j                   j(                  › d|j*                  › d�«       t        d«      S t-        | d||||r|j.                  dœ«      S ddœ«      S )NÚoidc_authentication_initri   rj   rl   r±   )Úprofile__roleÚusernamer4   ÚPOSTÚcomputer_idro   )r:   zUser 'z$' updated assignments for computer 'z'.Úcomputer_assignmentszapi/assignments.htmlrk   )r~   Ú	customersr   r€   )r‚   rƒ   r   r   r2   r   rE   rV   r†   r   rD   Úmethodr¶   r!   Úgetlistr`   ro   Úsetr   rG   rµ   r4   r   r„   )r%   ri   r2   Úcustomer_usersr~   Úcomp_idÚselected_user_idsr£   s           r,   r¸   r¸     s{  € Ø�<‰<×(Ò(ÜÐ2Ó3Ð3ä�g—l‘l I¨tÓ4€GÙ"ˆ7�<Š<¨
€DàÐDÑDÜ˜Ó$Ð$ä—\‘\×(Ñ(°zÐ(ÓB×KÑKÈJÓW€NÜ× Ñ ×$Ñ$Ó&×/Ñ/°
Ó;€Ià‡~�~˜ÒØ—,‘,×"Ñ" =Ó1ˆØ#ŸL™L×0Ñ0Ð1AÓBÐáÜ×#Ñ#×*Ñ*¨gÐ*Ó6×<Ñ<Ó>ˆDÙØ×#Ñ#×'Ñ'Ð(9Ô:Ü—‘˜f W§\¡\×%:Ñ%:Ð$;Ð;_Ð`d×`mÑ`mÐ_nÐnpÐqÔräÐ.Ó/Ð/ä�'Ð1ØØ#ØÙ'.�g—m‘mñ	4ó ð ð 5;ñ	4ó ð r.   c           
      ót  — | j                   j                  st        d«      S t        | j                   dd «      }|r|j                  nd}|dvrt        d«      S t        j                  «       }d}| j                  dk(  �r|rZ| j                  j                  d«      }|d	v r||_
        | j                  j                  d
«      }|r||_        |j                  «        |dk(  �r·| j                  j                  d«      |_        | j                  j                  d«      |_        | j                  j                  d«      }|r||_        | j                  j                  d«      dk(  |_        | j                  j                  dd«      |_        | j                  j                  dd«      |_        | j                  j                  d«      }|r |j'                  «       rt)        |«      |_        | j                  j                  d«      dk(  |_        |j,                  r>| j                  j                  d«      }	|	r(|	j'                  «       rt)        |	«      |_        nd|_        |j                  «        t0        j3                  d| j                   j4                  › d�«       d}t7        | d||||r|j                  nd|dœ«      S )Nr³   ri   rj   )rm   rn   rj   r±   Fr¶   r„   )rk   ÚlightÚdarkr
   rm   Újamf_urlÚjamf_client_idÚjamf_client_secretr…   ÚonÚprestage_laps_typeÚjamfÚmacoslaps_ea_idr   re   Úcustom_server_port_enabledÚcustom_server_portiÂ&  z"Global server settings updated by ú.Tzapi/settings.htmlrk   )r   r   ri   r€   r8   )r‚   rƒ   r   r   r2   r   rd   rº   r¶   r!   r„   r
   rc   rÃ   rÄ   rÅ   r…   rÇ   rÉ   ÚisdigitrŠ   re   rÊ   rË   r   rG   rµ   r   )
r%   ri   r2   rf   r8   r„   r
   Ú
new_secretÚintervalÚports
             r,   Úserver_settingsrÑ   #  sR  € Ø�<‰<×(Ò(ÜÐ2Ó3Ð3ä�g—l‘l I¨tÓ4€GÙ"ˆ7�<Š<¨
€DàÐPÑPÜ˜Ó$Ð$ä!×&Ñ&Ó(€LØ€Gà‡~�~˜ÓÙØ—L‘L×$Ñ$ WÓ-ˆEØÐ1Ñ1Ø %�”Ø—|‘|×'Ñ'¨
Ó3ˆHÙØ#+�Ô Ø�L‰LŒNàÐ)Ó)Ø$+§L¡L×$4Ñ$4°ZÓ$@ˆLÔ!Ø*1¯,©,×*:Ñ*:Ð;KÓ*LˆLÔ'à Ÿ™×)Ñ)Ð*>Ó?ˆJÙØ2<�Ô/à-4¯\©\×-=Ñ-=Ð>QÓ-RÐVZÑ-ZˆLÔ*Ø.5¯l©l×.>Ñ.>Ð?SÐU[Ó.\ˆLÔ+Ø+2¯<©<×+;Ñ+;Ð<MÈrÓ+RˆLÔ(à—|‘|×'Ñ'Ð(HÓIˆHÙ˜H×,Ñ,Ô.Ü>AÀ(»m�Ô;à6=·l±l×6FÑ6FÐGcÓ6dÐhlÑ6lˆLÔ3Ø×6Ò6Ø—|‘|×'Ñ'Ð(<Ó=�Ù˜DŸL™LœNÜ69¸$³i�LÕ3à26�Ô/à×ÑÔÜ�K‰KÐ<¸W¿\¹\×=RÑ=RÐ<SÐSTÐUÔVàˆä�'Ð.Ø ØØÙ'.�g—m’m°FØñ1ó ð r.   c           	      ó®  — | j                   j                  rt        | j                   d«      st        dddœd¬«      S | j                   j                  j
                  dvrt        dddœd¬«      S 	 t        j                  «       }t        |j                  |j                  |j                  «      }|j                  |«      }|j                  |«      }d }d }|D ]^  }|j                  d	«      d
k(  r|j                  d«      }Œ)|j                  d	«      dk(  sŒ>|j                  dk(  sŒN|j                  d«      }Œ` |j                  dk(  r,|j                   r |j#                  ||j                   «      }	|	rd}t        d||dœ«      S # t$        $ rI}
t&        j)                  d|› dt+        |
«      › �d¬«       t        dt+        |
«      dœd¬«      cY d }
~
S d }
~
ww xY w)Nri   r   r   rS   é“  r   rl   úAccess DeniedÚ
userSourceÚJMFrµ   ÚMDMrÈ   Ú	macoslapsÚpaeadminr8   )r   Ú	jamf_userÚprestage_userz(Error fetching LAPS usernames for JSSID ú: Tr?   r   )r‚   rƒ   Úhasattrr	   ri   r2   r   rd   r   rÃ   rÄ   rÅ   Úget_management_idÚget_laps_accountsr!   rÇ   rÉ   Úget_extension_attributerI   r   r   rJ   )r%   r1   rf   ÚapiÚmgmt_idÚaccountsrÚ   rÛ   ÚaccÚea_valrN   s              r,   Úlaps_usernamesræ   a  sµ  € Ø�<‰<×(Ò(´¸¿¹ÀiÔ0PÜ w¸>ÑJÐSVÔWÐWà‡|�|×Ñ× Ñ Ð(YÑYÜ w¸?ÑKÐTWÔXÐXðPÜ%×*Ñ*Ó,ˆÜ�l×+Ñ+¨\×-HÑ-HÈ,×JiÑJiÓjˆØ×'Ñ'¨Ó.ˆà×(Ñ(¨Ó1ˆØˆ	Øˆàò 	8ˆCØ�w‰w�|Ó$¨Ò-ØŸG™G JÓ/‘	Ø—‘˜Ó&¨%Ó/Ø×2Ñ2°fÓ<Ø$'§G¡G¨JÓ$7‘Mð	8ð ×*Ñ*¨kÒ9Ø×+Ò+Ø×4Ñ4°U¸L×<XÑ<XÓY�ÙØ$.�MäØØ"Ø*ñ
ó ð 	øô
 ò PÜ�‰Ð?À¸wÀbÌÈQËÈÐQÐ\`ˆÔaÜ w¼3¸q»6ÑBÈ3ÔOÕOûðPús,   Á0B$F ÄF Ä%AF Æ	GÆ>GÇ	GÇGc           	      ó¤  — | j                   j                  rt        | j                   d«      st        dddœd¬«      S | j                   j                  j
                  dvr=t        j                  d| j                   j                  › d	�«       t        dd
dœd¬«      S t        j                  «       }|j                  st        dddœd¬«      S 	 t        |j                  |j                  |j                  «      }t        j!                  d| j                   j                  › d|› d|› d�«       |dk(  rg|j#                  |«      }|j%                  |«      }t'        d„ |D «       d «      }|st        dddœd¬«      S |j)                  ||«      }t        d|dœ«      S |dk(  rÎ|j*                  dk(  rX|j,                  st        dddœd¬«      S |j/                  ||j,                  «      }|st        dddœd¬«      S t        d|dœ«      S |j#                  |«      }|j%                  |«      }t'        d„ |D «       d «      }|st        dddœd¬«      S |j)                  ||«      }t        d|dœ«      S t        dddœd¬«      S # t0        $ rL}	t        j3                  d|› dt5        |	«      › �d¬ «       t        dd!t5        |	«      › �dœd"¬«      cY d }	~	S d }	~	ww xY w)#Nri   r   r   rS   rÓ   r   rl   zUser z? attempted to view LAPS password without sufficient privileges.rÔ   z$LAPS is currently disabled globally.r5   z# requested LAPS password for JSSID z (Account Type: r7   rÈ   c              3   óh   K  — | ]*  }|j                  d «      dk(  sŒ|j                  d«      –— Œ, y­w)rÕ   rÖ   ÚclientAccountIdN©r!   ©Ú.0rä   s     r,   ú	<genexpr>z laps_password.<locals>.<genexpr>š  s,   è ø€ Òj¸È3Ï7É7ÐS_ÓK`ÐdiÓKi˜Ÿ™Ð!2×3Ñjùó   ‚2œ2z"Jamf Admin LAPS account not found.rU   r8   )r   ÚpasswordÚprestagerØ   z"macOSLAPS EA ID is not configured.z*macOSLAPS password was empty or not found.c              3   óh   K  — | ]*  }|j                  d «      dk(  sŒ|j                  d«      –— Œ, y­w)rÕ   r×   ré   Nrê   rë   s     r,   rí   z laps_password.<locals>.<genexpr>«  s,   è ø€ Òn¸CÈsÏwÉwÐWcÓOdÐhmÓOm˜SŸW™WÐ%6×7Ñnùrî   z&PreStage Admin LAPS account not found.zInvalid account type specified.z'Error fetching LAPS password for JSSID rÜ   Tr?   zJamf API Error: r   )r‚   rƒ   rÝ   r	   ri   r2   r   r$   rµ   r   rd   r…   r   rÃ   rÄ   rÅ   rG   rÞ   rß   ÚnextÚget_laps_passwordrÇ   rÉ   rà   rI   r   rJ   )
r%   r1   Úaccount_typerf   rá   râ   rã   Úguidrï   rN   s
             r,   Úlaps_passwordrö   ‡  sÅ  € Ø�<‰<×(Ò(´¸¿¹ÀiÔ0PÜ w¸>ÑJÐSVÔWÐWà‡|�|×Ñ× Ñ Ð(YÑYÜ�‰˜˜wŸ|™|×4Ñ4Ð5Ð5tÐuÔvÜ w¸?ÑKÐTWÔXÐXä!×&Ñ&Ó(€LØ×)Ò)Ü wÐ;aÑbÐknÔoÐoð"eÜ�l×+Ñ+¨\×-HÑ-HÈ,×JiÑJiÓjˆÜ�‰�e˜GŸL™L×1Ñ1Ð2Ð2UÐV[ÐU\Ð\lÐmyÐlzÐz{Ð|Ô}à˜6Ò!Ø×+Ñ+¨EÓ2ˆGØ×,Ñ,¨WÓ5ˆHÜÑj¸xÔjÐlpÓqˆDÙÜ#¨wÐCgÑ$hÐqtÔuÐuØ×,Ñ,¨W°dÓ;ˆHÜ¨9À(Ñ KÓLÐLà˜ZÒ'Ø×.Ñ.°+Ò=Ø#×3Ò3Ü'°7ÐGkÑ(lÐuxÔyÐyØ×6Ñ6°u¸l×>ZÑ>ZÓ[�ÙÜ'°7ÐGsÑ(tð  ~Aô  Bð  BÜ#¨yÀhÑ$OÓPÐPà×/Ñ/°Ó6�Ø×0Ñ0°Ó9�ÜÑnÀ8ÔnÐptÓu�ÙÜ'°7ÐGoÑ(pÐy|Ô}Ð}Ø×0Ñ0°¸$Ó?�Ü#¨yÀhÑ$OÓPÐPä¨7Ð?`Ñ aÐjmÔnÐnøäò eÜ�‰Ð>¸u¸gÀRÌÈAËÀxÐPÐ[_ˆÔ`Ü wÐ=MÌcÐRSËfÈXÐ;VÑWÐ`cÔdÕdûðeúsK   ÃB)I: Å7I: Æ/I: Ç-I: Ç5I: ÈAI: É
I: É*I: É:	KÊAK
ËKË
K)*rA   r‘   r‡   ÚloggingÚ	functoolsr   Údatetimer   Údjango.confr   Údjango.shortcutsr   r   Údjango.httpr	   Údjango.utilsr
   Údjango.views.decorators.csrfr   Údjango.views.decorators.httpr   Údjango.contrib.auth.modelsr   Úmodelsr   r   Ú	ssh_utilsr   Újamf_apir   Ú	getLoggerÚ__name__r   r/   rO   rZ   rg   r±   r¸   rÑ   ræ   rö   © r.   r,   ú<module>r     sÜ   ðÛ Û Û Û Ý Ý å  ß -Ý $Ý !Ý 4Ý 5Ý +ç ,Ý +Ý ð 
ˆ×	Ñ	˜8Ó	$€òð0 ØØñ%;ó ó ó ð%;ðN ØØñ;ó ó ó ð;ð2 ØØñ ;ó ó ó ð ;òHdòLò@:ò|$PóL.er.   