§ ;Š»j2ãó¨—dZddlZddlmZddlmZddlmZdZGd„de¦«Z Gd „d e ¦«Z Gd „d e ¦«Z Gd „d¦«Z dS)z, Everything that is related to whmapi calls éN)ÚFormattedException)Ú run_command)Ú urlencode)Ú WhmApiRequestÚ WhmApiErrorcó—eZdZdZd„ZdS)rzW An error that is raised in case of an error in communication with whmapi. c ó6—tj|||dœ¦«dS)N)ÚmessageÚcontext)rÚ__init__)Úselfr r s ú—/builddir/build/BUILDROOT/alt-python27-cllib-3.4.44-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/lib/whmapi_lib.pyr zWhmApiError.__init__s3€ÝÔ# DØØð+ ð+ ñ ô ð ð ð óN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r ©rrrrs-€€€€€ððð  ð ð ð ð rrcó—eZdZdZdS)ÚWhmLicenseErrorz)A license-related error raised by whmapi.N©rrrrrrrrr"s€€€€€Ø3Ð3Ø€Drrcó—eZdZdZdS)ÚWhmNoPhpBinariesErrorz; An error when there are no installed php binaries Nrrrrrr's€€€€€ððð €Drrcót—eZdZdZdZdZd„Zd„Zed„¦«Z e d„¦«Z e d„¦«Z d „Z d „Zd S) ra Wrapper over cpanel's whm command-line api tool that allows us to easily build complex requests (filter, sorting, etc) See details in the official cpanel docs (link below) https://documentation.cpanel.net/display/DD/Guide+to+WHM+API+1 z/usr/sbin/whmapi1écóB—||_i|_i|_ddg|_dS)Nz--outputÚjson)Ú_commandÚ_filtersÚ_argsÚ _extra_args)r Úcommands rr zWhmApiRequest.__init__:s*€ØˆŒ ؈Œ ؈Œ Ø&¨Ð/ˆÔÐÐrcóX—t|d¬¦«\}}}|dkrtd|¬¦«‚ tj|¦«}d|vr#d|dvr|dd€ d|dd<n+#tt f$r}td |¬ ¦«|‚d}~wwxYw| |¦«|S) NT)Úreturn_full_outputrz whmapi exited with code %(code)i)ÚcodeÚmetadataÚreasonÚzTwhmapi returned invalid response that cannot be parsed with json, output: %(output)s)Úoutput)rrrÚloadsÚ TypeErrorÚ ValueErrorÚ _validate)r r"Úexitcoder)Ú_ÚresponseÚes rÚ _run_whmapizWhmApiRequest._run_whmapi@sû€Ý)Ø ¨ð.ñ.ô.ш�&˜!à �qŠ=ˆ=ÝØ2Øðñôð ð  Ý”z &Ñ)Ô)ˆHð ˜hÐ&Ð&Ø! X¨jÔ%9Ð9Ð9Ø! *Ô-¨hÔ7Ð?Ø13�˜Ô$ XÑ.øøÝ�:Ð&ð ð ð ÝðAàðñôðð  øøøøð øøøð �Š�xÑ Ô Ð Øˆs®;A*Á*BÁ;B  Bcóˆ—| |¦«rtd|d¬¦«‚| |¦«rtd|dd¬¦«‚ |dd|dd}}n$#t$r}t d|¬¦«|‚d }~wwxYw|t jkrt d |¬ ¦«‚d S) z) Check response metadata z"whmapi license error: %(response)sÚ statusmsg©r0z Php binaries error: %(response)sr&r'Úresultz7whmapi metadata section is broken, output: %(response)sNz4whmapi failed to execute request, reason: %(reason)s)r')Ú_is_license_errorrÚ_is_no_php_binaries_errorrÚKeyErrorrrÚ API_RESULT_OK)Úclsr0r6r'r1s rr-zWhmApiRequest._validate\s€ð × Ò  Ñ *Ô *ð Ý!Ø4¸xÈ Ô?Tðñôð ð × (Ò (¨Ñ 2Ô 2ð Ý'Ø2¸XÀjÔ=QÐRZÔ=[ðñôð ð à˜Ô$ XÔ.°¸Ô0DÀXÔ0NðˆFˆFøåð ð ð ÝØIØ!ðñôðð øøøøð øøøð •]Ô0Ò 0Ð 0ÝØFØðñôð ð 1Ð 0sÁ A=Á= BÂBÂBcóZ—d|vo'|ddkod|d ¦«vS)a# Distinguish license-related WHM API errors from others. License errors are on the client's side, and should not be logged to sentry. An error is considered license-related if the API returns status 0 and the error message contains the word 'license' r4ÚstatusrÚlicense)Úlowerr5s rr7zWhmApiRequest._is_license_errorysA€ð˜xÐ'ð;ؘÔ" aÒ'ð;à˜X kÔ2×8Ò8Ñ:Ô:Ð:ð —d|vod|dvod|ddvS)u‘ No binaries error can be detected by checking special message '“PHPâ€� is not installed on the system' whmapi output r&r'u(“PHPâ€� is not installed on the systemrr5s rr8z'WhmApiRequest._is_no_php_binaries_error…s>€ð ˜hÐ&ð]ؘH ZÔ0Ð0ð]à:¸hÀzÔ>RÐS[Ô>\Ð\ð ^rc ó:—|j |¦«|S)zÍ Add some extra arguments to subprocess call Useful for methods like createacct, removeacct :param kwargs: arguments that will be added to cmd :rtype: WhmApiRequest )r Úupdate)r Úkwargss rÚwith_argumentszWhmApiRequest.with_arguments�s€ð Œ ×Ò˜&Ñ!Ô!Ð!؈ rcóœ—|j|jg}t|j ¦«¦«D]O\}}t |t ¦«rt|¦«}t||i¦«}|  |¦«ŒP|  |j ¦«|  |¦«}d|vr|dSd|vr|dS|S)zp Run subprocess, run output validation and return json-loaded response :return: Údatar)) ÚWHMAPIrÚlistr ÚitemsÚ isinstanceÚboolÚintrÚappendÚextendr!r2)r ÚcmdÚkÚvÚargumentr6s rÚcallzWhmApiRequest.call£s߀ð ŒKØ ŒMð ˆõ˜œ×)Ò)Ñ+Ô+Ñ,Ô,ð !ð !‰DˆAˆqå˜!�TÑ"Ô"ð õ ˜‘F”F�Ý  ! Q Ñ(Ô(ˆHØ �JŠJ�xÑ Ô Ð Ð ð � Š �4Ô#Ñ$Ô$Ð$à×!Ò! #Ñ&Ô&ˆà �VÐ Ð à˜&”>Ð !Ø ˜Ð Ð à˜(Ô#Ð #àˆMrN)rrrrrGr:r r2Ú classmethodr-Ú staticmethodr7r8rDrSrrrrr.sº€€€€€ððð!€Fà€Mð0ð0ð0ð ððð8ððñ„[ðð8ð <ð <ñ„\ð <ðð^ð^ñ„\ð^ðððð($ð$ð$ð$ð$rr) rrÚclcommonrÚclcommon.utilsrÚ urllib.parserÚ__all__rrrrrrrúrZsðððð € € € Ø'Ð'Ð'Ð'Ð'Ð'Ø&Ð&Ð&Ð&Ð&Ð&Ø"Ð"Ð"Ð"Ð"Ð"à *€ð  ð  ð  ð  ð  Ð$ñ  ô  ð  ð ð ð ð ð �kñ ô ð ð  ð ð ð ð ˜Kñ ô ð ðYðYðYðYðYñYôYðYðYðYr