
    7j                       d Z 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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mZmZ dd
lmZmZ ddlmZ  ed      ZddZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&e%ee e!e"e#e$dZ'dddZ(y)a   Command-line interface and command handlers for the WolfPanel Agent.

Commands:
  run                     run as a service (heartbeat loop + initial discovery)
  register --token X      register with the Central API using an install token
  heartbeat               send a single heartbeat
  discover --quick|--full run discovery (read-only)
  update-check            report whether a newer version is available
  status                  print local agent status
  version                 print the agent version
    )annotationsN)ApiErrorget_api_client)AGENT_VERSIONload_config)full)quick)	send_once)ensure_dirsload_agent_tokenstore_credentials)
get_loggersetup_logging)checkclic                   |j                   }|s-t        d       t        d       t        d       t        d       yt        |        t        |       }t        j
                  j                         }|| j                  t        j
                  j                         |j                  d      xs |j                  d      |j                  d      xs |j                  d	      t        j
                  j                         t        j
                  j                         d
}	 |j                  |      }|j                  d      }|j                  d      }	|r|	t        j                  d       yt!        | t#        |	      |       t        d|	 d|j                  d              y# t        $ r }t        j                  d|       Y d}~yd}~ww xY w)zExchange an install token for long-lived agent credentials.

    SECURITY: the install token is used in-memory only and is never written to
    disk. Only the returned agent/refresh tokens are persisted.
    z
No install token provided.
z*Open:
  https://app.wolfpanel.net/connect
zPairing Code:
  DEV-XXXX
uH   (Browser pairing is not implemented in v1 — pass --token to register.)   	distro_idsystemdistro_versionrelease)install_tokenagent_versionhostnameos_name
os_version	cpu_coresmemory_totalzregistration failed: %sNagent_token	server_idz-registration response missing required fieldsz#Registered successfully. server_id=z status=statusr   )tokenprintr   r   quick_discoveryr   os_infor   r   get	cpu_countmemory_total_bytesregisterr   logerrorr   str)
configargsr   
api_clientr%   payloadresponseexcr   r    s
             =/var/www/downloads.wolfpanel.net/public_html/agent/src/cli.pycmd_registerr4   &   s    JJM 	./<=+,XY'J$$,,.G '--#**335;;{+Dw{{8/Dkk"23Mw{{97M$++557'..AACG&&w/ ,,}-K[)II1		ABfc)nk: 
/	{(8<<PXCYBZ
[\!  		+S1s   F! !	G
*GG
c                8    t        |       }t        | |      rdS dS )Nr   r   )r   r
   )r-   r.   r/   s      r3   cmd_heartbeatr6   Z   s     'J&*-1414    c                T   |j                   rF|j                  s:t        j                         }t	        t        j                  |dt                     yt        |       }t        j                  | ||j                         }t	        t        j                  |d   dt                     y)N   )indentdefaultr   upload	discovery)r	   r   r$   collectr#   jsondumpsr,   r   full_discoveryrun	no_upload)r-   r.   snapshotr/   s       r3   cmd_discoverrF   _   sw    zz$))"**,djj!S9:'J!!&*=OPH	$**Xk*1c
BCr7   c                    t        |       }t        | |      }|t        d       y|j                  r&t        d|j                   d|j
                          yt        d|j                          y)NzUpdate check failed (see logs).r   zUpdate available: z -> zUp to date: r   )r   update_checkr#   update_availablecurrentlatest)r-   r.   r/   infos       r3   cmd_update_checkrM   k   sm    'J
+D|/0"4<<.T[[MBC  	T\\N+,r7   c                v   t        |       }| j                  r|rdnd}t        d| j                  xs d        t        d| j                          t        d| j                          t        d| j
                          t        d| j                          t        d	|rd
nd        t        d|        y)N
registeredpending_installzserver_id:  z<unregistered>zversion:    zchannel:    zapi_url:    zapi_mock:   ztoken:      presentmissingzstate:      r   )r   r    r#   r   release_channelapi_urlapi_mock)r-   r.   r"   states       r3   
cmd_statusrW   x   s    V$E#--%L>OE	L))=-=>
?@	L--.
/0	L//0
12	L(
)*	L)
*+	Le;
<=	L
 !r7   c                "    t        t               y)Nr   )r#   r   )r-   r.   s     r3   cmd_versionrY      s    	-r7   c                <   t        |        t        |       }t        j                  d| j                  | j
                         	 t        j                  | |d       	 t        j                  | |d       	 	 t        | |       t        j                  | j
                         ,# t        $ r }t        j                  d|       Y d}~kd}~ww xY w# t        $ r }t        j                  d|       Y d}~~d}~ww xY w# t        $ r t        j                  d       Y yw xY w)	zEService mode: one initial discovery, then a resilient heartbeat loop.z)agent starting (version=%s, interval=%ss)Tr<   zinitial quick scan failed: %sNzinitial discovery failed: %szagent stopping (interrupt)r   )r   r   r*   rL   r   heartbeat_intervalr$   rC   	ExceptionwarningrB   r
   timesleepKeyboardInterrupt)r-   r.   r/   r2   s       r3   cmd_runra      s    'JHH8&:N:N&&(
:FJt<96:d;fj)JJv001   :3S99:  92C889  -.sB   B" C 5-C: "	C+CC	C7C22C7:DDc                 *   t        j                  dd      } | j                  ddd       | j                  dd	
      }|j	                  dd       |j	                  dd      }|j                  dd       |j	                  dd       |j	                  dd      }|j                  ddd       |j                  ddd       |j                  ddd       |j	                  dd       |j	                  dd       |j	                  d d!       | S )"Nzwolfpanel-agentzWolfPanel Agent)progdescriptionz	--verbose
store_truezdebug-level logging)actionhelpcommandT)destrequiredrC   z!run as a service (heartbeat loop))rg   r)   zregister with the Central APIz--tokenz/install token (omit to see pairing placeholder)	heartbeatzsend a single heartbeatdiscoverzrun read-only discoveryz--quickzquick baseline snapshotz--fullzfull inventory (default)z--no-uploadzdo not upload snapshotupdate-checkz%check the release channel for updatesr!   zprint local agent statusversionzprint the agent version)argparseArgumentParseradd_argumentadd_subparsers
add_parser)parsersub
p_register
p_discovers       r3   build_parserrx      s   $$*;IZ[F
L?TU


Y

>CNN5BNC
1PQJI,]^NN;%>N?
1JKJIlAZ[H\@Z[M,E]^NN>(ONPNN8"<N=NN9#<N=Mr7   )rC   r)   rk   rl   rm   r!   rn   c                    t               j                  |       }t               }t        |j                  |j
                  rt        j                  nt        j                         t        |j                     ||      S )N)level)rx   
parse_argsr   r   	agent_logverboseloggingDEBUGINFO	_HANDLERSrh   )argvr.   r-   s      r3   mainr      sQ    >$$T*D]F&""4<<'--W\\ZT\\"6400r7   )returnint)r   zargparse.ArgumentParser)N)r   zlist[str] | Noner   r   ))__doc__
__future__r   ro   r@   r~   r^   r/   r   r   r-   r   r   r>   r   rB   r	   r$   rk   r
   identityr   r   r   loggerr   r   updater   rH   r*   r4   r6   rF   rM   rW   rY   ra   rx   r   r    r7   r3   <module>r      s   
 #     / - , .  
 - (
1h5
	


:0 $	1r7   