a íÕ;jÚ/ã@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  ¡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Ú clear_cacheÚ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|ƒ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_tokenrr)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_encodingGs rBc 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ÚintrBr r rrÚ ExceptionÚkcarelogÚ exception)rrr<r!r"r#r#r$r6Ms "  r6cCs<z tdƒWnty*tj d¡Yn0t ¡}td|fd|fgƒ}d t   ¡|¡}t |ƒ\}}}|dkr–t   |¡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 |¡¡|r2t|ƒdS|p:dS)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%rFrrGrHr Z get_hostnamerrrrr6r r7r8rrrr=)rJÚretryrIÚqueryrr;rr<r#r#r$Úregister[sB      ÿ    rScCs t tj¡S©N)r Ú try_to_readrÚAUTH_TOKEN_DUMP_PATHr#r#r#r$Ú_get_auth_token‰srWcCs|sdSt tj|¡dSrT)r Ú atomic_writerrV)r<r#r#r$r8Žsr8cOs‚| dd¡}| dd¡rt}ntj}t |¡rFtj|g|¢Ri|¤ŽStj|tƒtƒ|d}t j |ddtjƒ|g|¢Ri|¤ŽS)NÚmethodÚ check_licenseT)rYé)Úcount) ÚpopÚ_check_auth_retryrÚcheck_urlopen_retryZ is_local_urlÚ urlopen_baseÚ http_requestÚget_http_auth_stringrWr rQ)rÚargsÚkwargsrYÚcheckÚrequestr#r#r$Ú urlopen_auth•s   rgc Cs.t ¡}|r*t t t d |d¡¡¡¡SdS)Nz{0}:{1}Z kernelcare)r rr rÚbase64Ú b64encodeÚbstrr)rr#r#r$rb¢srbcCs(t|tƒr|jdvrt|ƒSt ||¡S)N)i“i‘)Ú isinstancer r;Ú_handle_forbiddenrr_)r"Ústater#r#r$r^©sr^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 rrrDrGÚerrorrÚ_register_trial)rmrrr ÚinfoÚexr#r#r$rl¯s*   rlc 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;rprrzKey-based valid license found)Ú key_checkedz No valid key-based license found)r rrrrrrr rrrrDr'rEÚ_get_license_info_by_ipr rr)rrrr r!r;Z license_typer"r#r#r$Ú license_infoØs,        rzc Cs¼t ¡d}zr4r|rrrrrrr r r Úpy23r r rr%r=rBr6rSÚcachedrWr8rgrbr^rlrzryrur#r#r#r$Ús(,  .  ) #