a ƒ¬ i~+ã@sàddlZddlZddlZddlZddlmZmZmZmZm Z m Z m Z m Z m Z ddlmZmZmZd"dd„Zdd „Zd d „Zd d „Zd#dd„Ze jdd„ƒZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd$dd„Zd d!„Z dS)%éNé) ÚconfigÚ constantsÚerrorsÚ http_utilsÚ ipv6_supportÚ log_utilsÚplatform_utilsÚserveridÚutils)Ú HTTPErrorÚURLErrorÚ urlencodeFc CsÞd}z t ¡}|dur*|s$t d¡WdSt ¡d |¡}t |¡}t   |  ¡¡}t   |¡}|ddkr‚t  ¡|s¢t d¡n |s¢t |¡t d|d¡Wn4tyØ}z|sÄt ||¡WYd}~n d}~00dS)Nz1Error unregistering server: cannot find server idz&/unregister_server.plain?server_id={0}ÚsuccessÚtruezServer was unregisteredzError unregistering server: Úmessage)r Ú get_serveridrÚlogerrorrÚget_registration_urlÚformatrÚurlopenr ÚnstrÚreadÚ data_as_dictZ rm_serveridÚloginfor Úprint_cln_http_error)ZsilentÚurlÚ server_idÚresponseÚcontentÚresÚe©r"ú*/usr/libexec/kcare/python/kcarectl/auth.pyÚ unregisters*      r$cCsît d¡t ¡}|dkrdSt ¡t ¡}ddl}|dkrH| d¡|j ¡t ddƒ}t ddƒ}t  |  ¡|j   ¡¡t  |  ¡|j  ¡¡t  |  ¡|j   ¡¡t d¡t|ƒ\}}}|dkr¨|r¨t |¡t|ƒ| d¡q¨dS)NzHRegister auto-retry has been enabled, the system can be registered laterrz /dev/nullÚrza+i )r Ú print_wrapperÚosÚforkÚsetsidÚsysÚexitÚstdoutÚflushÚopenÚdup2ÚfilenoÚstdinÚstderrÚtimeÚsleepÚ _try_registerr Ú set_server_idÚ_set_auth_token)rÚpidr*ZsiÚsoÚcoderÚ auth_tokenr"r"r#Ú_register_retry&s*        r<cCs$|dur t d|¡s td|ƒ‚|S)Nz ^[\w.-]+$zInvalid value received: %s)ÚreÚmatchÚ ValueError)Úvaluer"r"r#Ú_validate_urlsafe_encoding@s rAc Cs®zPt |¡}|j tjd¡}t t |  ¡¡¡}t |dƒt | d¡ƒt |ƒfWSt t fy†}zt ||¡WYd}~dSd}~0ty¨tj d|¡YdS0dS)Nr:r)NNNz)Exception while trying to register URL %s)rrÚheadersÚgetrZAUTH_TOKEN_HEADERr rrrÚintrAr r rrÚ ExceptionÚkcarelogÚ exception)rrr;r r!r"r"r#r5Fs "  r5cCs4z tdƒWnty*tj d¡Yn0t ¡}td|fd|fgƒ}d t   ¡|¡}t |ƒ\}}}|dkrŽt   |¡t|ƒt d¡dS|dkr¢t d ¡nv|d kr¶t d ¡nb|d krÊt d ¡nN|dkrÞt d¡n:|dkròt d¡n&|dkrt d¡nt d |¡¡|r*t|ƒdS|p2dS)NTz9Exception while trying to unregister URL before register.ÚhostnameÚkeyz{0}/register_server.plain?{1}rzServer RegisteredrzAccount Lockedéz Invalid Keyéz}You have reached maximum registered servers for this key. Please go to your CLN account, remove unused servers and try again.éz[IP is not allowed. Please change allowed IP ranges for the key in KernelCare Key tab in CLNézEThis IP was already used for trial, you cannot use it for trial againézfThis IP was banned. Please contact support for more information at https://www.kernelcare.com/support/zUnknown Error {0}éÿÿÿÿ)r$rErrFrGr Z get_hostnamerrrrr5r r6r7rrr<)rIÚretryrHÚqueryrr:rr;r"r"r#ÚregisterTs@      ÿ    rRcCs t tj¡S©N)r Ú try_to_readrÚAUTH_TOKEN_DUMP_PATHr"r"r"r#Ú_get_auth_token|srVcCs|sdSt tj|¡dSrS)r Ú atomic_writerrU)r;r"r"r#r7sr7cOs‚| dd¡}| dd¡rt}ntj}t |¡rFtj|g|¢Ri|¤ŽStj|tƒtƒ|d}t j |ddtjƒ|g|¢Ri|¤ŽS)NÚmethodÚ check_licenseT)rXé)Úcount) ÚpopÚ_check_auth_retryrZcheck_urlopen_retryZ is_local_urlÚ urlopen_baseÚ http_requestÚget_http_auth_stringrVr rP)rÚargsÚkwargsrXÚcheckÚrequestr"r"r#Ú urlopen_authˆs   rec Cs.t ¡}|r*t t t d |d¡¡¡¡SdS)Nz{0}:{1}Z kernelcare)r rr rÚbase64Ú b64encodeÚbstrr)rr"r"r#r`•sr`cCs8t|tƒr&|jdvrt|ƒS|jdkSt|tƒr4dSdS)N)i“i‘iôT)Ú isinstancer r:Ú_handle_forbiddenr )r!Ústater"r"r#r]œs     r]c Csæd|vr dStjrât ¡}t ¡d}|r8|d |¡7}z&t t j |dd  ¡¡}t  |¡}Wn6t y”}ztj||ddWYd}~dSd}~00|r¤| d ¡sºtj d  |¡¡dS|d d vrÜd|d<t d ¡dStƒdS) aIn case of 403 error we should check what's happen. Case #1. We are trying to register unlicensed machine and should try to register trial. Case #2. We have a valid license but access restrictions on server are not consistent yet and we had to try later. ÚlicenseTú /check.plainz?server_id={0}F)Z retry_on_500)r,Nr:úUnexpected CLN response: {0})Ú0Ú1z$Unable to access server. Retrying...)rÚCHECK_CLN_LICENSE_STATUSr rrrrr rrrrrr rrrCrFÚerrorrÚ_register_trial)rkrrrÚinfoÚexr"r"r#rj¥s*   rjc Csît ¡}|rät ¡d |¡}zt |¡}t |  ¡¡}t  |¡}|rP|  d¡sft  d |¡¡WdSt |dƒ}|dkrŠt  d¡WdStdd}|dkr¦t  d¡|WSWqêtyà}zt ||¡WYd}~dSd}~00ntƒSdS) Nz/check.plain?server_id={0}r:rnrrzKey-based valid license found)Ú key_checkedz No valid key-based license found)r rrrrrrr rrrrCr&rDÚ_get_license_info_by_ipr rr)rrrrr r:Z license_typer!r"r"r#Ú license_infoÎs,        rxc Cs¼t ¡d}zs(,  (   ) #