§ ;Š»j¾*ãój—dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddlmZmZddlmZmZmZddlmZe dd ¬ ¦«Ze e¦«d Zd Zd ZdZe dd¬¦«rse€ð (2Ñ$€JÐ$Ý „w‡~‚~Ð0Ñ1Ô1ðXÝ+6Õ8HÍÔ8UÐ(ˆ ‰ Ý Œ�ŠÐ;Ñ <Ô <ðXÝ+:Õ´>ˆˆøÝ ððð؈uˆuðøøøà Œ9˜Š>Ð N 2¤:µ´ÅÄ Ñ1LÑ#MÐNÐNs ‚*-­ ;º;c óÜ—tj tj t¦«|¦«}t |¦«s%t jt jd|›d�¦«dStj |d¦«}d„tj|¦«D¦«}|D�]3}|dkrŒ tj ||›d�¦«}t |¦«s$t jt jd|›d�¦«Œ`t›d |›d |›�}d |›d |›d �} t|¦«} n-#t$r } |rYd } ~ Œštd|›d�¦«| ‚d } ~ wwxYw |   ¦«} |  ¦«} || dfcS#tt t"f$r0} t jt jd|›d| ›�¦«Yd } ~ �Œ-d } ~ wwxYwdS)až Scan directory for presence of plugins. Plugin is a file that has the extension ".py" and a non-empty variable "__cpname__" (the name of the control panel). The file must contain a function "detect" which returns True in case of presence of the corresponding control panel. >>> detectplugin('plugins') ('from .plugins import cpanel as api', 'cPanel') :param plugin_pack: package name or the name of the plug-ins directory ('cache' - cache plugins users; 'plugins' - officially supported plug-ins) :rtype: tuple :return: a pair of values: (line to import the package, the name of the control panel) z%cpapi: refusing to load plugins from r8r#z*.pycó’—g|]D}tj tj |¦«¦«d‘ŒES)r)r$r%ÚsplitextÚbasename)Ú.0Ú py_full_paths r2ú z detectplugin..›sM€ðððà õ Œ×Ò�œ×)Ò)¨,Ñ7Ô7Ñ8Ô8¸Ô;ðððr4Ú__init__r7zcpapi: skipping plugin ú.zfrom .z import z as apiNzCan not import z pluginÚnamezcpapi: Plugin z& does not satisfy cpapi requirements: )r$r%r:r;r<r=r>r?Úglobr@rÚ ImportErrorr Ú PanelPluginÚget_cp_descriptionÚAttributeErrorÚ TypeErrorÚKeyError)Ú plugin_packÚ ignore_errorsÚ plugin_dirÚplugin_path_patternÚmodulesÚmod_namerCÚabsolute_module_nameÚ import_stringr9ÚeÚ panel_classÚ panel_dataÚexcs r2Ú detectpluginrms~€õ ”—’�bœgŸošo­hÑ7Ô7¸ÑEÔE€Jõ % ZÑ 0Ô 0ðÝŒ Ý Ô ð 6°Jð 6ð 6ð 6ñ ô ð ð ˆzÝœ'Ÿ,š, z°6Ñ:Ô:Ðððå œIÐ&9Ñ:Ô:ðñô€Gð ðñˆØ �zÒ !Ð !Ø Ý”g—l’l :°(Ð/?Ð/?Ð/?Ñ@Ô@ˆ Ý(¨Ñ5Ô5ð Ý ŒMÝÔ"ð:¨(ð:ð:ð:ñ ô ð ð Ý"4ÐOÐO°{ÐOÐOÀXÐOÐOÐØG ÐGÐG°hÐGÐGÐGˆ ð \ÝÐ 4Ñ5Ô5ˆCˆCøÝð \ð \ð \Øð Ø����Ý#Ð$SÐ6JÐ$SÐ$SÐ$SÑTÔTÐZ[Ð [øøøøð \øøøð ØŸ/š/Ñ+Ô+ˆKà$×7Ò7Ñ9Ô9ˆJØ  *¨VÔ"4Ð4Ð 4Ð 4Ð 4øÝ¥ ­8Ð4ð ð ð Ý ŒMÝÔ"ØW ÐWÐWÐRUÐWÐWñ ô ð ð ð ð ð ñ øøøøð øøøð ˆ:s6Ä0EÅ E*Å E%ÅE%Å%E*Å.1F"Æ"G)Æ9%G$Ç$G)cól—tj¦«}|dkrdStj|¦«dS)zJ Get current user's username based on os.getuid() :rtype: str rÚroot)r$ÚgetuidÚpwdÚgetpwuid)Úuids r2ÚgetuserrtÀs2€õ Œ)‰+Œ+€CØ ˆa‚x€x؈vÝ Œ<˜Ñ Ô ˜QÔ Ðr4cóP—t|dd¬¦«5 ddd¦«n #1swxYwYtj|¦«tj ¦«}dD]}| |d¦«Œd|d<tjtj dd d d |gd |d ¬¦«dS)zAcreate (or rewrite) an empty __init__.py and it's .pyc/.pyo partsÚwúutf-8©ÚencodingN)Ú PYTHONPATHÚ PYTHONHOMEÚ PYTHONSTARTUPÚ PYTHONINSPECTÚ LD_PRELOADÚLD_LIBRARY_PATHÚ1ÚPYTHONNOUSERSITEz-Iz-Oz-mÚ py_compileú/F)ÚcwdÚenvÚcheck) Úopenr‚Úcompiler$ÚenvironÚcopyÚpopÚ subprocessÚrunÚsysÚ executable)Ú init_pathr…Úvars r2Ú_reinit_moduler’Ës€å ˆi˜ wÐ /Ñ /Ô /ð ð Ø ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð åÔ�yÑ!Ô!Ð!õ Œ*�/Š/Ñ Ô €CðBððˆà �Š��TÑÔÐÐØ!€CÐÑÝ„NÝ Œ˜˜t T¨<¸ÐCØ Ø Øð ñôðððs “!¡%¨%có—d}d}tj tj t¦«|¦«}t j|¦«|rDtj |¦«r%t|¦«rt j ||¦«nX|rBtj |¦«r#tj tj d|›d�¦«tj |¦«tj |d¦«tj |d¦«}t|¦« t|¦«\}}n.#t $r!}d\}}t#d|›�¦«Yd}~nd}~wwxYw|€Kt j|¦«tj |¦«t|¦«t|d ¬ ¦«\}}|€!t$t&}}t#d |›d �¦«|rŽt)t*d d¬¦«5}| |¦«ddd¦«n #1swxYwYt)t.d d¬¦«5}| |dz¦«ddd¦«dS#1swxYwYdSdS)NÚcacher6zcpapi: not copying plugindir z3 into cache: not root-owned or group/world-writableiíz __init__.pyr#z WARNING: T)rbzDWARNING: can not detect control panel; the control panel is set to "ú"rvrwrxú )r$r%r:r;r<ÚshutilÚrmtreer,r=Úcopytreer>r?ÚmkdirÚchmodr’rmr Úprintr r r‡rÚwriteÚ API_LINK_PATH) Ú plugins_dirÚ CACHE_DIRÚ PLUGINS_PATHÚ cache_dirr�rhÚcpnamerlÚfs r2Ú rebuild_cacher¥ás €à€IØ€Lå”— ’ �RœWŸ_š_­XÑ6Ô6¸ ÑBÔB€Iå „M�)ÑÔÐðð •r”w—}’} [Ñ1Ô1ð Ý)¨+Ñ6Ô6ð õ Œ˜  YÑ/Ô/Ð/Ð/à ð �2œ7Ÿ=š=¨Ñ5Ô5ð Ý ŒMÝÔ"ð:° ð:ð:ð:ñ ô ð õ Œ�ÑÔÐÝ„HˆY˜ÑÔÐå”— ’ ˜Y¨ Ñ6Ô6€IÝ�9ÑÔÐð!Ý ,¨YÑ 7Ô 7ш �v�vøÝ ð!ð!ð!Ø *ш �vÝ Ð˜#ÐÐÑ Ô Ð Ð Ð Ð Ð Ð øøøøð!øøøð€~ÝŒ �iÑ Ô Ð Ý Œ�ÑÔÐÝ�yÑ!Ô!Ð!Ý ,¨\ÈÐ NÑ NÔ Nш �vØ €~Ý!2µO�vˆ Ý Ð^ÐU[Ð^Ð^Ð^Ñ_Ô_Ð_à ð *å •, ¨gÐ 6Ñ 6Ô 6ð ¸!Ø �GŠG�F‰OŒOˆOð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ •- ¨wÐ 7Ñ 7Ô 7ð *¸1Ø �GŠG�M DÑ(Ñ )Ô )Ð )ð *ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð *ð *ð *ð *s<Ä>EÅ E<ÅE7Å7E<ÈH*È*H.È1H.É I2É2I6É9I6)N)T)F)5Ú__doc__r$r‚rGrŒrŽrqrZr—r>Ú importlibrÚ configparserrÚclcommon.clcustomscriptrrÚconstrr r Úcpapiexceptionsr Ú clsysconfigÚreadÚCONTROLPANELNAME_VARÚDETECTFUNCNAME_VARr@Ú PLUGINS_DIRÚ has_optionÚgetr%Úexistsrœr:r;r<ržr'r*r+r-r.r/r)r(r3rEr=rmrtr’r¥©r4r2úrµsrðððð € € € ØÐÐÐØ € € € ØÐÐÐØ € € € Ø € € € Ø € € € Ø € € € Ø € € € à#Ð#Ð#Ð#Ð#Ð#Ø%Ð%Ð%Ð%Ð%Ð%àJÐJÐJÐJÐJÐJÐJÐJØCÐCÐCÐCÐCÐCÐCÐCÐCÐCØ.Ð.Ð.Ð.Ð.Ð.àˆl¨°eÐ<Ñ<Ô<€ Ø ×Ò�ÑÔÐà#ÐØÐà%Ðà€ Ø×Ò '°+ÐÑ>Ô>ðGØ—/’/¨'¸+�/ÑFÔF€KØ Œ7�>Š>˜+Ñ &Ô &ðGØ ˆÐEÑFÔFÐFØ”— ’ ˜RœWŸ_š_¨XÑ6Ô6¸ ÑEÔE€ à€ Ø ÐØ € ؀؀؀ Ø€ð�Ø�mØ�Ø�\Ø�KØÐ#Ø�YðÐð,ð,ð,ð6ðððð. Oð Oð Oð Oð>ð>ð>ð>ðB ð ð ðððð,*ð3*ð3*ð3*ð3*ð3*ð3*r4