§ À•¿j|qãó²—ddlmZddlmZddlmZddlZddlZddlZddlmcm cm Z ddl Z ddl Z ddlmZmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlm Z ddl!m"Z"m#Z#ddl$m%Z%m&Z&ddl'm(Z(dZ)e%Z*d'd„Z+d(d„Z,d„Z-d„Z.d(d„Z/ d)d„Z0d„Z1d(d„Z2d(d„Z3d(d„Z4d(d„Z5d Z6 d*d!„Z7d+d"„Z8 d,d$„Z9d%„Z:d&„Z;dS)-é)Úprint_function)Úabsolute_import)ÚdivisionN)ÚConnectionErrorÚTimeout)Ú iteritems)Ú basestringé)Ú clpassenger)Ú clselectctl)Úutils)Ú userdomains)Ú mod_makedirs)ÚClSelectExcept)ÚApplicationsManager)Ú environmentsÚ interpreters)ÚAPP_STARTED_CONSTÚAPP_STOPPED_CONST)Úclprintzapp.jsFcó2—t||¦«}|s|}tj|||¦«}| ¦«r|rV t jd¬¦«|}n"#t $rt j|¦«‚wxYw| ||¬¦«|S)NÚversion)Úkey)Ú destroy_first) Ú _get_prefixrÚ EnvironmentÚexistsrÚKeyErrorrÚNoSuchAlternativeVersionÚcreate)ÚuserÚ directoryrÚenv_namerÚprefixÚ environmentÚ interpreters úU/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselectctlnodejsuser.pyÚ_create_environmentr(%s¾€Ý ˜˜yÑ )Ô )€FØ ð؈ÝÔ*¨8°T¸6ÑBÔB€KØ × Ò Ñ Ô ðE =ðEð CÝ&Ô3¸ ÐBÑBÔBÀ7ÔKˆKˆKøÝð Cð Cð CÝ Ô9¸'ÑBÔBÐ Bð Cøøøà×Ò˜;°mÐÑDÔDÐDØ Ðs ÁAÁA=cóº—t||¦«}|€Qtj|¦«} tj|||¦«}n%#t $rt jd|z¦«‚wxYw|d}tj   tj   tj   |¦«¦«¦«}tj |||¦«}|S)Nú8No such application (or application not configured) "%s"Úbinary)rr Úsummaryr Úget_using_realpath_keysrrÚNoSuchApplicationÚosÚpathÚbasenameÚdirnamerr)r!r"Ú app_summaryr$Ú user_summaryr+r#r%s r'Ú_get_environmentr53sÑ€Ý ˜˜yÑ )Ô )€FØÐÝ"Ô*¨4Ñ0Ô0ˆ ð ÝÔ7¸¸iÈÑVÔVˆKˆKøÝð ð ð Ý Ô2ØJÈYÑVñôð ð øøøð˜Ô "€FÝŒw×Ò¥¤§¢µ´·²ÀÑ0GÔ0GÑ HÔ HÑIÔI€HÝÔ*¨8°T¸6ÑBÔB€KØ Ðs ¨?¿"A!có†—tj||¦«\}}tj t j|¦«S©N)r Ú get_abs_relr/r0ÚjoinrÚDEFAULT_PREFIX)r!r"Ú_Úrel_dirs r'rrGs1€ÝÔ" 4¨Ñ3Ô3�J€A€wÝ Œ7�<Š<� Ô3°WÑ =Ô =Ð=ócóŒ—ddlm}| ¦« |¦«st j||d¦«‚dS)z� Check whether particular interpreter version is enabled and raises exception if not :param user: user to include in exception r )Ú node_managerzversion is not enabledN)Úclselectnodejsr?Ú NodeManagerÚis_version_enabledrÚUnableToSetAlternative)rr!r?s r'Ú_ensure_version_enabledrDLs[€ð -Ð,Ð,Ð,Ð,Ð,à × #Ò #Ñ %Ô %× 8Ò 8¸Ñ AÔ Að]ÝÔ3°D¸'ÐC[Ñ\Ô\Ð\ð]ð]r=cóD—|€t¦«}tj||¦«\}}| |¦«}| ¦«D]M}tj||¦«\}}|t jz |t jz¦«r|cSŒNdS)z“ Return None if new_app_directory is not nested inside an existing user application, and the name of conflicting application otherwise N)rr r8Úget_user_config_dataÚkeysr/ÚsepÚ startswith)Únew_app_directoryr!Ú apps_managerÚ abs_app_pathr;Ú full_configÚ existing_appÚexisting_app_abs_paths r'Ú_get_existing_nesting_app_forrPXs­€ð ÐÝ*Ñ,Ô,ˆ åÔ'¨Ð.?Ñ@Ô@�O€L�!Ø×3Ò3°DÑ9Ô9€KØ#×(Ò(Ñ*Ô*ð ð ˆ å#(Ô#4°T¸<Ñ#HÔ#HÑ Ð˜qØ �2œ6Ñ !× -Ò -Ð.CÅbÄfÑ.LÑ MÔ Mð ØÐ Ð Ð ð à ˆ4r=c ó:—| €t¦«} |€tjd¦«‚t||¦«|€t}|€i}|€d}t ||| ¦«} | �tj| ¦«‚tj|¦«}t|||¦«} |   ¦«j } tj |||| j| ||| ¬¦«tj||¦«|s2tj|¦«}t#j|||¦«}|d}|||t&||g|dœ}| r| |d<|  |||¦« |  ||||¦«dS#t,$r0}t/jdd t3|¦«d œ¦«Yd}~dSd}~wwxYw) a� Create application :param user: unix user name :param directory: application path in user's home (app-root) :param alias: alias (app-uri) :param version: version of interpreter :param doc_root: doc_root :param app_mode: application mode for nodejs :param env_vars: dict with enviroment variables :param startup_file: main application file :param domain_name: domain name :param apps_manager: Application Manager. Class that responsible for gathering and writing information about applications :param passenger_log_file: Passenger log filename to write to app's .htaccess :return: None NzNot passed version as argumentÚ production)Údoc_rootÚ startup_fileÚpassenger_log_fileÚdomain)Únodejs_versionrVÚapp_uriÚ app_statusrTÚapp_modeÚ config_filesÚenv_varsrUÚtextÚERROR©ÚstatusÚmessage)rrÚ WrongDatarDÚDEFAULT_STARTUP_FILErPÚBusyApplicationRootr Ú get_aliasr(r&r+r Ú configureÚ INTERPRETERÚrestartr,r r-ÚDEFAULT_APP_STATEÚadd_app_to_configÚadd_env_vars_for_htaccessÚ ExceptionrÚ print_diagÚstr)r!r"ÚaliasrrSrZr\rTÚ domain_namerKrUÚconflicting_appr%r+Ú summary_datar3Úapp_dataÚerrs r'r r ks€ð<ÐÝ*Ñ,Ô,ˆ à€ÝÔ&Ð'GÑHÔHÐHݘG TÑ*Ô*Ð*àÐÝ+ˆ ØÐ؈ØÐ؈å3°I¸tÀ\ÑRÔR€OØÐ"ÝÔ0°ÑAÔAÐAå Ô ! %Ñ (Ô (€EÝ% d¨I°wÑ?Ô?€KØ × $Ò $Ñ &Ô &Ô -€FåÔØ ØØ ØÔ ØØØ!Ø-ð ñ ô ð õÔ˜˜iÑ(Ô(Ð(Ø ð,å"Ô*¨4Ñ0Ô0ˆ ÝÔ3°D¸)À\ÑRÔRˆ Ø! (Ô+ˆ à!ØØÝ'Ø$ØØØð ð €Hðð<Ø);ˆÐ%Ñ&Ø×"Ò" 4¨°HÑ=Ô=Ð=ðMØ×.Ò.¨t°YÀÈ(ÑSÔSÐSÐSÐSøÝ ðMðMðMÝÔ˜6¨gÅ#ÀcÁ(Ä(Ð#KÐ#KÑLÔLÐLÐLÐLÐLÐLÐLÐLøøøøðMøøøsÅE Å FÅ*%FÆFcó¬—d}tj tj|¦«j|d¦«}tj |¦«r= tj|¦«nZ#t$rtj dd|iz¦«‚wxYwtj  |¦«rtj |¦«‚tj |d¦«}tj  |¦«st|d¦« tj||¦«dS#t$rtjd|z¦«‚wxYw) zÑ Creates symlink to app's node_modules in app_root :param username: user name :param environment_path: Path to app's virtual environment :param app_root: Application root :return: None zôCloudlinux NodeJS Selector demands to store node modules for application in separate folder (virtual environment) pointed by symlink called "node_modules". That`s why application should not contain folder/file with such name in application rootÚ node_modulesz"Can`t remove symlink %(link_name)sÚ link_namezlib/node_modulesiýzError creating symlink. N)r/r0r9ÚpwdÚgetpwnamÚpw_dirÚislinkÚremoveÚOSErrorrÚRemoveSymlinkErrorrÚ SymlinkErrorrÚsymlinkÚCreateSymlinkError)ÚusernameÚenvironment_pathÚapp_rootrarwÚlink_tos r'Ú_create_symlink_to_node_modulesr†ÃsV€ð -ð õ ”— ’ �Sœ\¨(Ñ3Ô3Ô:¸HÀnÑUÔU€IÝ „w‡~‚~�iÑ Ô ð3ð uÝ ŒI�iÑ Ô Ð Ð øÝð uð uð uÝ Ô3Ð4XÐ\gÐirÐ[sÑ4sÑtÔtÐ tð uøøøå Œ�Š˜ Ñ "Ô "ð3ÝÔ)¨'Ñ2Ô2Ð2ÝŒg�lŠlÐ+Ð-?Ñ@Ô@€GÝ Œ7�>Š>˜'Ñ "Ô "ð%Ý�W˜eÑ$Ô$Ð$ðVÝ Œ �7˜IÑ&Ô&Ð&Ð&Ð&øÝ ðVðVðVÝÔ/Ð0JÈWÑ0TÑUÔUÐUðVøøøsÁA0Á0$BÄD1Ä1"Ecó—tj¦«dkrtd¦«‚|€t¦«}| ||¦«} |�| ||d|¦«n<#t $r/}tjddt|¦«dœ¦«Yd}~nd}~wwxYw|  d¦«tkrÈtj |¦«j}d |d |g¦«} t!j|¦«n#t$$rYnwxYw|�+| |||¦«}t)j|¦«| ||¦« t)j||¦«n#t0j$rYnwxYwdSt5||¦«} t7j|| ¦«\} } t!j| ¦«n#t$$rYnwxYwt)j|¦«} | ||¦«} t7j||| ¦«n*#t>$r| rYdSt1j d |z¦«‚wxYwt)j!||¦« t)j||¦«dS#t0j$rYdSwxYw) aa Destroy web app with specified directory for specified user :param user: username :param app_directory: application directory :param doc_root: Document root for selected domain :param apps_manager: Application Manager. Class that responsible for gathering and writing information about applications :return: None rzOperation not permitted.Nr]r^r_rYú/Únodevenvr*)"r/ÚgeteuidÚPermissionErrorrÚget_app_configrkrlrrmrnÚgetrrxryrzr9ÚshutilÚrmtreer}Úget_htaccess_by_appdirr Ú$remove_passenger_lines_from_htaccessÚremove_app_from_configrhrÚMissingApprootDirectoryrr r8r,r-rrbÚ unconfigure)r!Ú app_directoryrSrKÚ app_configrtÚ user_homeÚ nodevenv_pathÚhtaccess_filenamer$Úabs_dirr;r4Ú app_in_configs r'Údestroyrœès€õ$ „z�|„|�qÒÐÝÐ8Ñ9Ô9Ð9àÐÝ*Ñ,Ô,ˆ ð×,Ò,¨T°=ÑAÔA€JðMà Ð Ø × 2Ò 2°4¸ÈÈhÑ WÔ WÐ WøøÝ ðMðMðMÝÔ˜6¨gÅ#ÀcÁ(Ä(Ð#KÐ#KÑLÔLÐLÐLÐLÐLÐLÐLøøøøðMøøøð‡~‚~�lÑ#Ô#Õ'8Ò8Ð8å”L Ñ&Ô&Ô-ˆ àŸš )¨Z¸Ð!GÑHÔHˆ ð å ŒM˜-Ñ (Ô (Ð (Ð (øÝð ð ð Ø ˆDð øøøð Ð à ,× CÒ CÀDÈ-ÐYaÑ bÔ bÐ Ý Ô <Ð=NÑ OÔ OÐ Oà×+Ò+¨D°-Ñ@Ô@Ð@ð Ý Ô   mÑ 4Ô 4Ð 4Ð 4øÝÔ5ð ð ð Ø ˆDð øøøàˆõ ˜˜}Ñ -Ô -€FÝÔ" 4¨Ñ0Ô0�J€GˆQð åŒ �gÑÔÐÐøÝ ð ð ð Ø ˆð øøøåÔ& tÑ,Ô,€Là ×7Ò7¸¸mÑLÔL€MðwÝ Ô% d¨M¸<ÑHÔHÐHÐHøÝ ðwðwðwà ð wØ�4�4å Ô*Ð+eÐhuÑ+uÑvÔvÐ vð wøøøõÔ˜D -Ñ0Ô0Ð0ð ÝÔ˜D -Ñ0Ô0Ð0Ð0Ð0øÝ Ô 1ð ð ð Ø ˆˆð øøøsrÁA)Á) B"Á3%BÂB"Ã5D Ä DÄDÅE4Å4FÆFÆ4G Ç GÇGÈHÈ IÈ*IÉI2É2JÊJcóT—|€t¦«}| ||¦«}|€tjd|z¦«‚| d¦«t krdS| |||¦«| ||t ¦«tj ||¦«dS)a` Starts web app with specified directory for specified user :param user: username :param app_directory: application directory :param doc_root: Document root for selected domain :param apps_manager: Application Manager. Class that responsible for gathering and writing information about applications :return: None Nr*rY) rrŒrrbr�rÚupdate_htaccess_fileÚset_app_statusr rh©r!r•rSrKr–s r'Ústartr¡@s¯€ðÐÝ*Ñ,Ô,ˆ à×,Ò,¨T°=ÑAÔA€JØÐÝÔ&Ð'aÐdqÑ'qÑrÔrÐrà‡~‚~�lÑ#Ô#Õ'8Ò8Ð8؈à×%Ò% d¨M¸8ÑDÔDÐDà×Ò  mÕ5FÑGÔGÐGåÔ˜˜mÑ,Ô,Ð,Ð,Ð,r=có—|€t¦«}| ||¦«}|€tjd|z¦«‚| d¦«t krt |||¦«dStj||¦«dS)ab Restarts web app with specified directory for specified user :param user: username :param app_directory: application directory :param doc_root: Document root for selected domain :param apps_manager: Application Manager. Class that responsible for gathering and writing information about applications :return: None Nr*rY) rrŒrrbr�rr¡r rhr s r'rhrh\s‘€ðÐÝ*Ñ,Ô,ˆ à×,Ò,¨T°=ÑAÔA€JØÐÝÔ&Ð'aÐdqÑ'qÑrÔrÐrà‡~‚~�lÑ#Ô#Õ'8Ò8Ð8Ý ˆd�M 8Ñ,Ô,Ð,Ð,Ð,åÔ˜D -Ñ0Ô0Ð0Ð0Ð0r=có~—|€t¦«}| ||¦«}|€tjd|z¦«‚| d¦«t krdS| ||||¦«}tj|¦«|  ||t ¦«tj ||¦«dS)a_ Stops web app with specified directory for specified user :param user: username :param app_directory: application directory :param doc_root: Document root for selected domain :param apps_manager: Application Manager. Class that responsible for gathering and writing information about applications :return: None Nr*rY) rrŒrrbr�rr�r r‘rŸrh)r!r•rSrKr–r™s r'Ústopr¤tsÅ€ðÐÝ*Ñ,Ô,ˆ à×,Ò,¨T°=ÑAÔA€JØÐÝÔ&Ð'aÐdqÑ'qÑrÔrÐrà‡~‚~�lÑ#Ô#Õ'8Ò8Ð8؈Ø$×;Ò;¸DÀ-ÐQYÐ[eÑfÔfÐåÔ4Ð5FÑGÔGÐGà×Ò  mÕ5FÑGÔGÐGåÔ˜˜mÑ,Ô,Ð,Ð,Ð,r=éc ó"‡‡—d} d} d} tjj tj¦«t |¦«stjd¦«‚d  ||¬¦«} ddiŠˆˆfd „} |€ã tj | ¦«} | | ¦«}n…#ttf$rq}t|t¦«r‰€‚|  d d ¦«} | | ¦«}n,#ttf$rtj| | z¦«‚wxYwYd }~nd }~wwxYw| |j d ¦«|j|j d¦«dœ}nzt|t(¦«rQt| d¦«t*¦«r)t-| d¦«¦«t.urtjd¦«‚|d} | d¦«}|d}| d¦«}t-|¦«t.us|dkrtjd¦«‚|¦«t1|¦«D�]°}|rt3j|¦« | | ¦«}n…#t$rX‰€‚|stj| | z¦«‚ | | ¦«}n,#ttf$rtj| | z¦«‚wxYwYn$t$rtj| | z¦«‚wxYw|j d ¦«}|j}|j d¦«}|pd ¦«}|pd ¦«}|o d|cxkodkncod|cxkodknc }|r)d|cxkrdkrnnd|cxkrdkrnn�ŒY||k}n*||kr|d ur|d d…dkp|d uo |d d…dk}||k}|s|s|rtj| |||fz¦«‚�Œ²|S)a8 Check response from user's webapp before and after calling action. Also compare both responses :param domain: domain associated with webapp :param alias: URI associated with webapp :param action: called action, that make something with webapp: install modules, transit it, etc :param request_timeout: optional per-request timeout; None preserves the legacy unbounded health check used by ordinary Selector operations :param retry_on_timeout: retry the post-action probe once after a timeout :param strict_status: enforce real HTTP status stability and reject a healthy application that turns 5xx; an application already answering 5xx before the action may keep answering the same status, or recover. Reserved for Shared Store transactions that need rollback evidence :param baseline: an earlier return value from this function; Shared Store migration uses it to compare every post-restart probe with the one pre-migration response instead of comparing a response with itself :param post_action_observations: number of post-action responses checked against the same baseline :param post_action_interval: delay between post-action observations :return: the normalized pre-action response baseline zTWeb application is inaccessible by its address "%s". The operation wasn't performed.z—The operation was performed, but check availability of application has failed. Web application is inaccessible by its address "%s" after the operation.zÚThe operation was performed, but check availability of application has failed. Web application responds, but its return code "%s" or content type before operation "%s" doesn't equal to contet type after operation "%s".z+Wrong action for calling in checking webappzhttps://{domain}/{alias})rVroz User-AgentzjMozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101209 CentOS/3.6-2.el5.centos Firefox/3.6.13có@•—d‰dœ}‰�‰|d<tj|fi|¤ŽS)NF)ÚverifyÚheadersÚtimeout)Úrequestsr�)ÚurlÚkwargsr©Úrequest_timeouts €€r'r�z'check_response_from_webapp..getäs8ø€Ø!¨gÐ6Ð6ˆØ Ð &Ø /ˆF�9Ñ ÝŒ|˜CÐ*Ð* 6Ð*Ð*Ð*r=Nzhttps://zhttp://z Content-TypeÚStatus)r¬Ú content_typeÚ status_codeÚ legacy_statusr¬r±zWrong webapp health baseliner°r²r z*Wrong number of webapp health observationsÚiôiWéÚ500)r«ÚpackagesÚurllib3Údisable_warningsÚurllib_exceptionsÚInsecureRequestWarningÚcallablerrbÚformatr Útransform_wildcard_urlrrÚ isinstanceÚreplaceÚ WebAppErrorr©r�r±Údictr ÚtypeÚintÚrangeÚtimeÚsleepÚlower)rVroÚactionr®Úretry_on_timeoutÚ strict_statusÚbaselineÚpost_action_observationsÚpost_action_intervalÚapp_is_inaccessible_beforeÚapp_is_inaccessible_afterÚ app_is_brokenÚ webapp_urlr�ÚrequestÚexcÚbefore_mime_typeÚ before_statusÚbefore_legacy_statusÚ observationÚafter_mime_typeÚ after_statusÚafter_legacy_statusÚbefore_mime_type_normalizedÚafter_mime_type_normalizedÚrecovered_from_server_errorÚ status_failedÚ mime_failedr©s ` @r'Úcheck_response_from_webapprà–s…øø€ð8"yÐð Sðð  aðõ> ÔÔ×.Ò.Õ/@Ô/WÑXÔXÐXå �FÑ Ô ðVÝÔ&Ð'TÑUÔUÐUØ+×2Ò2ØØð3ñô€Jð ð@ð€Gð +ð+ð+ð+ð+ð+ð Ðð =õÔ5°jÑAÔAˆJà�c˜*‘o”oˆGˆGøÝ¥Ð)ð =ð =ð =ݘ#�wÑ'Ô'ð ¨OÐ,CØà#×+Ò+¨J¸ ÑBÔBˆJð =ؘ#˜j™/œ/��øÝ#¥WÐ-ð =ð =ð =Ý$Ô0Ø.°Ñ;ñ=ô=ð=ð =øøøð����øøøøð =øøøðØ#œO×/Ò/°Ñ?Ô?Ø"Ô.Ø$œ_×0Ò0°Ñ:Ô:ð  𠈈õ ˜¥4Ñ(Ô(ðGݘHŸLšL¨Ñ/Ô/µÑ<Ô<ðGå �(—,’,˜}Ñ-Ô-Ñ .Ô .µcÐ 9Ð 9ÝÔ&Ð'EÑFÔFÐFؘ%”€JØ—|’| NÑ3Ô3ÐØ˜]Ô+€MØ#Ÿ<š<¨Ñ8Ô8ÐÝ Ð %Ñ&Ô&­cÐ1Ð1Ø'¨!Ò+Ð+ÝÔ&Ð'SÑTÔTÐTØ €F�H„H€HåÐ5Ñ6Ô6ð33ñ33ˆ Ø ð -Ý ŒJÐ+Ñ ,Ô ,Ð ,ð 8Ø�c˜*‘o”oˆGˆGøÝð <ð <ð <ØÐ&ØØ#ð <Ý$Ô0Ø-° Ñ:ñ<ô<ð<ð <ؘ#˜j™/œ/��øÝ#¥WÐ-ð <ð <ð <Ý$Ô0Ø-° Ñ:ñ<ô<ð<ð <øøøð�õð 8ð 8ð 8Ý Ô,Ø)¨JÑ6ñ8ô8ð 8ð 8øøøð"œ/×-Ò-¨nÑ=Ô=ˆØÔ*ˆ Ø%œo×1Ò1°(Ñ;Ô;ÐØ'7Ð'=¸2×&DÒ&DÑ&FÔ&FÐ#Ø&5Ð&;¸×%BÒ%BÑ%DÔ%DÐ"à ð /˜c ]Ð9Ð9Ò9Ð9°cÒ9Ð9Ð9Ð9ð /ؘ<Ð.Ð.Ò.Ð.¨3Ò.Ð.Ð.Ð.Ð.ð $ð ð ;ð�mÐ*Ð*Ò*Ð* sÒ*Ð*Ð*Ð*Ð*¨s°lÐ/IÐ/IÒ/IÐ/IÀcÒ/IÐ/IÐ/IÐ/IÐ/IÙØ)¨\Ò9ˆMˆMð&Ð)<Ò<ð7Ø)°Ð5ð7à)¨"¨1¨"Ô-°Ò6ð:ð(¨tÐ3ð9Ø+¨B¨Q¨BÔ/°5Ò8ð ð 3Ø4ò5ˆ à*ð 3° ð 3¸}ð 3Ý Ô,Ø Ð/?Ø!0ð!2ñ2ñ3ô3ð 3ùð €OsZÁ>BÂD Â/.Dà C*Ã)DÃ*)DÄDÄD É7 JÊ&LÊ* J6Ê5LÊ6)KËLË$!Lc󇇗‰€tjd¦«‚‰€tjd¦«‚‰d}t‰¦«}ˆˆfd„|D¦«}t|¦«dkrtjd¦«‚|d}||fS)zÜ Get info (alias and domain) about user's web application :param app_summary: dict -> summary info about user's web application :param user: str -> name of unix user :return: tuple -> (alias, domain) Nz3Was passed incorrect summary info about applicationz!Was passed incorrect name of userrocóR•—g|]#\}}tj‰|‰d¦«¯!|‘Œ$S)Údocroot)r Úrealpaths_are_equal)Ú.0rVrSr3r!s €€r'ú z*_get_info_about_webapp..SsJø€ðððÙ#�6˜8µuÔ7PÐQUÐW_ÐalÐmvÔawÑ7xÔ7xðØðððr=rz-Can not found suitable domain for application)rrbrÚlen)r3r!roÚ user_domainsÚ found_domainsÚ app_domains`` r'Ú_get_info_about_webapprëEsµøø€ðÐÝÔ&Ð'\Ñ]Ô]Ð]Ø €|ÝÔ&Ð'JÑKÔKÐKØ ˜Ô €EݘtÑ$Ô$€LðððððØ'3ðñô€Mõ ˆ=ÑÔ˜QÒÐÝÔ&Ð'VÑWÔWÐWؘqÔ!€Jà �*Ð Ðr=ú-cóV‡‡‡‡‡‡‡—|€t¦«}| ‰¦«} tj‰‰|¦«}n5#t$r(t jd ‰¦«¦«‚wxYw|dtkrd}n|d} |d} |d} tj ‰‰¦«\Š} t‰‰| ¦«Šˆˆˆˆˆˆˆfd„} |sC t| | | ¬ ¦«dS#t j $r}t j d |z¦«‚d}~wwxYw| ¦«dS) aI Install nodejs extension to user's webapp :param user: name os unix user :param directory: directory with webapp (app-root) :param extension: name and version of extension :param skip_web_check: skip check web application after change it's properties :param apps_manager: Application Manager. Class that responsible for gathering and writing information about applications :param before_install: optionally pass the continuously held app-lock fd to npm :param after_install: optionally finish that fd handoff after npm :return: None Nz%Record about application {} is absentrYTrXrVrWc󘕗d}‰� ‰¦«}‰‰dœ}|�||d<‰jdi|¤Ž‰� ‰¦«tj‰‰¦«dS)N)Ú extensionÚcwdÚlock_fd©)Úextension_installr rh) rñÚinstall_kwargsÚ after_installÚbefore_installrðr"r%rïr!s €€€€€€€r'rÈzinstall..action}s{ø€àˆØ Ð %Ø$�nÑ&Ô&ˆGØ'0¸Ð=Ð=ˆØ Ð Ø(/ˆN˜9Ñ %Ø%ˆ Ô%Ð7Ð7¨Ð7Ð7Ð7Ø Ð $Ø ˆM‰OŒOˆOÝÔ˜D )Ñ,Ô,Ð,Ð,Ð,r=)rVrorÈz3An error occured during installation of modules. %s) rrFr r-rrrbr¼rr8r(ràrÀ)r!r"rïÚskip_web_checkrKrörõÚ user_configrsrorêrWr;rÈrtrðr%s``` `` @@r'Úinstallrù]s«øøøøøøø€ðÐÝ*Ñ,Ô,ˆ à×3Ò3°DÑ9Ô9€KðbÝÔ0°°yÀ+ÑNÔNˆˆøÝ ðbðbðbÝÔ&Ð'N×'UÒ'UÐV_Ñ'`Ô'`ÑaÔaÐaðbøøøà� ÔÕ!2Ò2Ð2؈ˆà˜Ô#ˆØ˜hÔ'ˆ ØÐ.Ô/€NÝ Ô ˜t YÑ /Ô /�F€CˆÝ% d¨I°~ÑFÔF€Kð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð -ð ð ð jÝ &Ø!ØØð ñ ô ð ð ð øõ Ô)ð jð jð jÝ Ô,Ð-bÐehÑ-hÑiÔiÐ iøøøøð jøøøð ˆ‰Œˆˆˆs#®AÁ2A7ÃC1Ã1DÄDÄDcól—i}ttj|¦«¦«D]�\}}|dtjkrŒt |||¦« ¦«}|d|d|d|ddœ||<d|vr*t|d¦«dkr|d||d<Œ�|S)Nr&rVroÚname)rVror%r&Údomainsr )rr r,rrgr5Ú as_deepdictrç)r!Úsummr"Údatar%s r'r,r,—sÊ€Ø €DÝ$¥[Ô%8¸Ñ%>Ô%>Ñ?Ô?ð 9ð 9‰ˆ �4Ø � Ô Õ"5Ô"AÒ AÐ AØ å& t¨Y¸Ñ=Ô=×IÒIÑKÔKˆ à˜8”nؘ'”]Ø& vÔ.Ø& }Ô5ð  𠈈Y‰ð ˜Ð Ð ¥ T¨)¤_Ñ!5Ô!5¸Ò!9Ð!9Ø)-¨i¬ˆD�ŒO˜IÑ &øà €Kr=cóÔ—t|¦«turt‚|D]G}t||t¦«st‚d|vsd|vsd||vs d||vrt ‚ŒH|S)Nú ú )rÂrÁÚ TypeErrorr¾r Ú ValueError)r\Úitems r'Úvalidate_env_varsr«s‚€Ý ˆH�~„~�TÐ!Ð!݈ØððˆÝ˜( 4œ.­*Ñ5Ô5ð ݈OØ �4ˆ<ˆ<˜4 4˜<˜<¨4°8¸D´>Ð+AÐ+AÀTÈXÐVZÌ^ÐE[ÐE[ÝÐ ðF\à €Or=)NFr7)NNNNNNNN)NNFFNr r)NN)rìFNNN)<Ú __future__rrrr/rxr«Ú$requests.packages.urllib3.exceptionsr¶r·Ú exceptionsr¹rŽrÅÚrequests.exceptionsrrÚ future.utilsrÚ past.builtinsr r³r r r Úclcommon.cpapirÚclcommon.utilsrÚclselectexceptrÚclselectnodejs.apps_managerrÚclselectnodejsuserrrÚ baseclselectrrÚ clselectprintrrcrir(r5rrDrPr r†rœr¡rhr¤ÚWEBAPP_REQUEST_TIMEOUTràrërùr,rròr=r'úrsðð&Ð%Ð%Ð%Ð%Ð%Ø&Ð&Ð&Ð&Ð&Ð&ØÐÐÐÐÐà € € € Ø € € € Ø€€€Ø@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø € € € Ø € € € Ø8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø"Ð"Ð"Ð"Ð"Ð"Ø$Ð$Ð$Ð$Ð$Ð$àÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØ&Ð&Ð&Ð&Ð&Ð&Ø'Ð'Ð'Ð'Ð'Ð'Ø*Ð*Ð*Ð*Ð*Ð*Ø<Ð<Ð<Ð<Ð<Ð<Ø:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ø>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ø"Ð"Ð"Ð"Ð"Ð"àÐØ%Ðð ð ð ð ð ð ð ð ð(>ð>ð>ð ]ð ]ð ]ððððð. Ø Ø Ø ØØØØðUMðUMðUMðUMðpVðVðVðJU ðU ðU ðU ðp-ð-ð-ð-ð81ð1ð1ð1ð0-ð-ð-ð-ð>Ðð6:ØFKØ=AØ89Ø45ð lðlðlðlð^ðððð0