+
    4-i                     4   ^ RI t ^ RIt^ RIHtHtHt ^ RIHt ^ RIHtH	t	H
t
Ht ^ RIHt ^RIHt ^RIHt ^RIHtHtHtHtHt ^R	IHtHtHtHt ]! R
R.R7      t0 R(mtR R ltR R lt ]PC                  R4      ]	! ]4      ]	! ]4      3R R ll4       t"R R lt#]PC                  R4      ]	! ]4      ]	! ]4      3R R ll4       t$]PK                  R4      ]	! ]4      ]	! ]4      3R R ll4       t&]PO                  R4      ]	! ]4      ]	! ]4      3R R ll4       t(]PK                  R4      ]	! ]4      ]	! ]4      3R  R! ll4       t)]PC                  R"4      ]	! ]4      ]	! ]4      3R# R$ ll4       t*]PK                  R%4      ]	! ]4      ]	! ]4      3R& R' ll4       t+R# ))    N)datetime	timedeltatimezone)Any)	APIRouterDependsHTTPExceptionstatus)Session)require_admin)get_db)AdminAgentEnrollmentTokenGroupTask)CreateEnrollmentTokenRequestCreateGroupRequestCreateTaskRequestUpdateGroupMembersRequestz
/api/adminadmin)prefixtagsc                V    V ^8  d   QhR\         R\        \         \        3,          RR/# )   	task_typepayloadreturnNstrdictr   )formats   "server/app/api_admin.py__annotate__r$   !   s.     X X XtCH~ X$ X    c                 d   V R 8X  dR   \        VP                  R4      \        4      '       d   VR,          P                  4       '       g   \	        RRR7      hR# V R9   d|   VP                  R4      p\        V\
        4      '       dC   V'       d;   \        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       g   \	        RV  R	2R7      hR# V R
8X  d   \        VP                  R4      \        4      '       d   VR,          P                  R4      '       g   \	        RRR7      h\        VP                  R4      \        4      '       g   \	        RRR7      hR# V R8X  dD   \        VP                  R4      \        4      '       d   VR,          '       g   \	        RRR7      hR# R# )shellcommand  z'shell task requires non-empty 'command'status_codedetailpackagesc              3   V   "   T F  p\        V\        4      ;'       d    Tx  K!  	  R # 5iN)
isinstancer    ).0ps   & r#   	<genexpr>$_validate_payload.<locals>.<genexpr>'   s&     <d_cZ[Z3=O=U=UTU=U_cs   ))FTz requires 'packages' list	push_filepath/z"push_file requires absolute 'path'content_b64z push_file requires 'content_b64'set_wallpaperurlzset_wallpaper requires 'url'Napt_install
apt_remove)r0   getr    stripr	   listall
startswith)r   r   pkgss   && r#   _validate_payloadrD   !   sS   G'++i0#66gi>P>V>V>X>XC8abb ?Y	3	3{{:&$%%T<d_c<d<d_c<d9d9dC9+E^8_`` :e	k	!'++f-s3376?;U;UVY;Z;ZC8\]]'++m4c::C8Z[[ ;	o	%'++e,c22'%..C8VWW ;I 
&r%   c                R    V ^8  d   QhR\         R\        R\        \        ,          /# )r   reqdbr   )r   r   r@   r   )r"   s   "r#   r$   r$   3   s&     ! !+ ! !T%[ !r%   c                    V P                   '       d$   VP                  \        4      P                  4       # / pV P                  '       do   VP                  \        4      P                  \        P                  P                  V P                  4      4      P                  4        F  pW2VP                  &   K  	  V P                  '       d   VP                  \        4      P                  \        P                  P                  V P                  4      4      P                  4       pV F$  pVP                   F  pW2VP                  &   K  	  K&  	  \        VP                  4       4      # r/   )
target_allqueryr   rA   target_agent_idsfilteragent_idin_idtarget_group_idsr   membersr@   values)rF   rG   agentsagroupsgs   &&    r#   _resolve_targetsrW   3   s    
~~~xx""$$!F
%''(:(:3;O;O(PQUUWA144L X
%''S5I5I(JKOOQAYY qtt     r%   z/tasksc                H    V ^8  d   QhR\         R\        R\        R\        /# r   rF   r   rG   r   )r   r   r   r!   )r"   s   "r#   r$   r$   C   s6     V V	VV 	V 
	Vr%   c           
         V P                   \        9  d   \        R RV P                    R2R7      h\        V P                   V P                  4       \        W4      pV'       g   \        R RR7      h\        P                  ! 4       P                  pV P                  ;'       g!    \        V P                   V P                  4      p. pV Fx  p\        VP                  V P                   V P                  VP                  VVR7      pVP                  V4       VP                  4        VP!                  VP                  4       Kz  	  VP#                  4        RVRVR\%        V4      /# )	r)   zUnknown task type ''r*   zNo target agents resolved)agent_pktyper   
created_bybatch_idtitler_   task_idscount)r]   VALID_TASK_TYPESr	   rD   r   rW   uuiduuid4hexr`   _default_titler   rO   usernameaddflushappendcommitlen)	rF   r   rG   targetsr_   r`   created_idsagenttasks	   &&&      r#   create_taskrr   B   s    xx''6I#((ST4UVVchh,s'G4OPPzz|HII>>#++>EKXXKK~~
 	t

477#  IIK*k7CDTUUr%   c                ^    V ^8  d   QhR\         R\        \         \        3,          R\         /# )r   r   r   r   r   )r"   s   "r#   r$   r$   b   s)      c DcN s r%   c                 V   V R 8X  d&   RVP                  R4      ;'       g    RR,           2# V R9   d.   V  RRP                  VP                  R. 4      4      R,           2# V R8X  d   R	# V R
8X  d   RVP                  RR4       2# V R8X  d   RVP                  RR4      R,           2# V # )r'   zshell: r(    :N<   Nz:  r-   apt_upgradezapt upgrader5   zpush: r6   r9   zwallpaper: r:   r;   )r>   join)r   r   s   &&r#   rg   rg   b   s    G'++i066B<=>>11BsxxJ(CDSIJKKM!KFB/011O#W[[3C89::r%   z/groupsc                H    V ^8  d   QhR\         R\        R\        R\        /# rY   )r   r   r   r!   )r"   s   "r#   r$   r$   q   s0     0 0	00 	0 
	0r%   c                    V P                   P                  4       '       g   \        R RR7      hVP                  \        4      P                  V P                   R7      P                  4       '       d   \        RRR7      h\	        V P                   P                  4       V P                  R7      pVP                  V4       VP                  4        RVP                  RVP                   /# )	r)   zName requiredr*   )namei  zGroup already exists)r|   descriptionrO   r|   )r|   r?   r	   rJ   r   	filter_byfirstr}   ri   rl   rO   )rF   r   rG   groups   &&& r#   create_groupr   p   s     88>>ODD	xx  chh /55774JKKsxx~~'S__EEFF5MIIK%((FEJJ//r%   z/groups/{group_id}c                H    V ^8  d   QhR\         R\        R\        R\        /# )r   group_idr   rG   r   intr   r   r!   )r"   s   "r#   r$   r$      0     
 


 	
 
	
r%   c                     VP                  \        V 4      pV'       g   \        R RR7      hVP                  V4       VP	                  4        RR/# )  Group not foundr*   okT)r>   r   r	   deleterl   )r   r   rG   rV   s   &&& r#   delete_groupr      sC     	uhA4EFFIIaLIIK$<r%   z/groups/{group_id}/membersc          
      T    V ^8  d   QhR\         R\        R\        R\        R\        /# )r   r   rF   r   rG   r   )r   r   r   r   r!   )r"   s   "r#   r$   r$      s:     . ..	". . 		.
 
.r%   c                 T   VP                  \        V 4      pV'       g   \        R RR7      hVP                  \        4      P                  \        P                  P                  VP                  4      4      P                  4       pWTn
        VP                  4        RRR\        V4      /# )r   r   r*   r   Trb   )r>   r   r	   rJ   r   rL   rM   rN   	agent_idsrA   rQ   rl   rm   )r   rF   r   rG   r   rS   s   &&&&  r#   update_group_membersr      sz     FF5(#E4EFFXXe_##ENN$6$6s}}$EFJJLFMIIK$V--r%   z/agents/{agent_id}c                H    V ^8  d   QhR\         R\        R\        R\        /# )r   rM   r   rG   r   )r    r   r   r!   )r"   s   "r#   r$   r$      r   r%   c                     VP                  \        4      P                  V R 7      P                  4       pV'       g   \	        RRR7      hVP                  V4       VP                  4        RR/# ))rM   r   zAgent not foundr*   r   T)rJ   r   r~   r   r	   r   rl   )rM   r   rG   rT   s   &&& r#   delete_agentr      sW     	!!8!4::<A4EFFIIaLIIK$<r%   z/enrollment-tokensc                H    V ^8  d   QhR\         R\        R\        R\        /# rY   )r   r   r   r!   )r"   s   "r#   r$   r$      s0     2 2	%22 	2 
	2r%   c                 0   V P                   e4   VP                  \        V P                   4      '       g   \        RRR7      hR pV P                  '       dQ   V P                  ^ 8  d@   \
        P                  ! \        P                  4      \        V P                  R7      ,           p\        \        P                  ! ^4      V P                  V P                   VR7      pVP                  V4       VP                  4        RVP                   RVP"                  /# )Nr)   zdefault_group_id not foundr*   )hours)tokenlabeldefault_group_id
expires_atrO   r   )r   r>   r   r	   expires_in_hoursr   nowr   utcr   r   secretstoken_urlsafer   ri   rl   rO   r   )rF   r   rG   r   r   s   &&&  r#   create_enrollment_tokenr      s     'uc>R>R0S0S4PQQJ
 4 4q 8\\(,,/)#BVBV2WW
##B'ii--	E FF5MIIK%((GU[[11r%   z/enrollment-tokens/{token_id}c                H    V ^8  d   QhR\         R\        R\        R\        /# )r   token_idr   rG   r   r   )r"   s   "r#   r$   r$      r   r%   c                     VP                  \        V 4      pV'       g   \        R RR7      hRVn        VP	                  4        RR/# )r   z	Not foundr*   Tr   )r>   r   r	   revokedrl   )r   r   rG   ts   &&& r#   revoke_enrollment_tokenr      s>     	)AK@@AIIIK$<r%   >   r'   rebootshutdownr5   r=   r<   rx   r9   ),r   rd   r   r   r   typingr   fastapir   r   r	   r
   sqlalchemy.ormr   authr   rG   r   modelsr   r   r   r   r   schemasr   r   r   r   routerrc   rD   rW   postrr   rg   r   r   r   putr   r   r   r    r%   r#   <module>r      s     2 2  = = "   > >  
,gY	7	 X$! X =)&/V V> Y =)&/0 0 #$ =)&/
 %
 () =)&/	. *. #$ =)&/
 %
 !" =)&/2 #2* ./ =)&/
 0
r%   