jgYJLddlmZddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddl mZdd l mZdd lmZdd lmZmZdd lmZmZmZdd lmZmZmZddlmZmZdZ dZ!d dZ"d dZ#dZ$d!dZ%d"dZ&dZ'dZ(dZ)dZ*dZ+dZ,d dZ-dZ.dZ/dZ0dS)#)print_function)absolute_import)divisionN) iteritems) clpassenger) clselectctl)utils)clprint)ClSelectExceptBaseClSelectException) environments extensions interpreters) userdomainsdocrootCP_NAME)NoDomain NotSupportedrubyctdtdtdtdtdtdtdtdtd td td td td tdtdtdtdtdtdtdtdtddS)NzB -v | --version VERSION : Specify alternative versionz/ -u | --user USERNAME : UsernamezZ --domain DOMAIN : Domain (or subdomain); users main domain as defaultzH -l | --list : List alternatives for interpreterzB -G | --list-extensions : List global set of packageszC -K | --list-extensions-version : List version set of packageszC -s | --user-summary : List user summary of webappsz9 -y | --create-webapp : Create user webappz: -n | --destroy-webapp : Destroy user webappz] -f | --relocate-webapp : Change webapp directory (files must be moved manually)zA -F | --transit-webapp : Change webapp domain/aliasz5 -Z | --restart-webapp : Restart webappzZ -c | --user-current : Show currently selected alternative for user webappzM -b | --set-user-current : Set alternative as user webapp defaultz[ -e | --enable-user-extensions GEMS : Install comma-separated list of gems for user webappz] -d | --disable-user-extensions GEMS : Uninstall comma-separated list of gems for user webappzC : Use '-' (minus) for all gemszZ -r | --replace-user-extensions GEMS : Update comma-separated list of gems for user webappzJ -g | --list-user-extensions : List installed gems for user webappzi -p | --print-summary : If specified along with setting an alternative prints user summaryz9 -j | --json : Print data as JSON)printO/opt/cloudlinux/venv/lib64/python3.11/site-packages/clselect/clselectctlruby.pyusagersR NOOO ;<<< fggg TUUU NOOO OPPP OPPP EFFF FGGG ijjj MNNN ABBB fggg YZZZ ghhh ijjj OPPP fggg OPPP VWWW uvvv EFFFFFrc*t||}|s|}tj|||}|sT t jd|}n"#t $rt j|wxYw|||S)Nversion)key) _get_prefixr EnvironmentexistsrKeyErrorr NoSuchAlternativeVersioncreate)user directoryrenv_nameprefix environment interpreters r_create_environmentr,8s y ) )F *8T6BBK     ( C&3 BBB7KKK C C C 9'BB B C;''' s AA;ct||}|Btj|}||}|st jd|z|d}t jt j t j |}tj |||}|S)N8No such application (or application not configured) "%s"binary) r rsummarygetr NoSuchApplicationospathbasenamedirnamerr!)r&r' app_summaryr) user_summaryr/r(r*s r_get_environmentr9Fs y ) )F"*400 "&&y11  { 23mpy3yzz z  "Fw0G0G H HIIH*8T6BBK rctj||\}}tjt jtj|SN) r get_abs_relr3r4joinrDEFAULT_PREFIXr get_prefix)r&r'_rel_dirs rr r SsC"433JAw 7<< 3#.w77 9 99rch|tjdtj|}tj|tj|}t ||||}|j}tj |||t||tj ||dS)NzNot passed version as argumentdoc_root) r WrongDatar get_usercheck_directory get_aliasr,r+r/r configure INTERPRETERrestart)r&r'aliasrr(rDr*r/s rr%r%Ys&'GHHH   % %D ***  !% ( (E%dIwIIK  $ $ & & -F$ 5+vPXYYYYi(((((rcHtj|}t||}|s-|j|iSt |}t||||}t |}||z D]-} | |#tj $rY*wxYw||z D]-} | |#tj $rY*wxYwtj||} | d} | d} | d} |j} tj| tj||| t$| | tj||dS)NrLrhtaccessrNrC)r rFr9namer+as_dictsetrr,extension_uninstallr ExternalProgramFailedextension_installrr0r/ _unconfigurerIrJrK)r&r'rr(old_environmentold_extensionsnew_environmentnew_extensions extensionr7rLrD htaccess_pathr/s rcurrentr]gs   % %D&tY77O O$o&A&A&C&C&K&K&M&MNN335566N)$ 7HMMO335566N#n4    / / : : : :3    D $n4    - -i 8 8 8 83    D %d++I6K  E9%H +M  ( ( * * 1Fm4444$ 5+vPXYYYYi(((((s$0CCC#C99D  D cVtj|}t||j}t j||\}} t j|n#t$rYnwxYwtj || tj ||dS#tj $rYdSwxYwr;)r rFr9r)r r<shutilrmtreeOSErrorr unconfigurerKr MissingApprootDirectory)r&r'r)abs_dirr@s rdestroyres   % %D dI . . 5F"400JGQ  g      D),,, D),,,,,  1     s$A A%$A%>BB('B(cxtj|}t||}||dSr;)r rFr9rUr&r'r[r*s rinstallrhs;   % %D"433K!!),,,,,rcrtj|}t||}|Sr;)r rFr9r)r&r'r*s rlist_extensionsrjs3   % %D"433K  ! ! # ##rcd|vrtjdtj|}tj|t j||\}}t j||\}}tj|}||vrtj d|z||vrtjd|z||d} ||d} ||d} t||j } tj |} tj |}t j|tjt j| \}}tj|d}t j|tjt j|\}}tj|d}d |zd z}d |zd z}t%j||t)jtj|d d d D]F}t j|}||vr,|||}t j||d Gtj|stj||t5||}t!j| ||}|j}tj| tj||| t@|| tj!||dS)N/z$You cannot move appication to subdirz(Specified directory already used by '%s'r.rNrrL(:*binwrOrC)"r rEr rFrGr r<rr0 WebAppErrorr9rPr?r3r4r=rr>r_moveglob file_readreplace file_writer"renamer r!r+r/rVrIrJrK)r& old_directory new_directoryfmtold_absold_relnew_absnew_relold_user_summaryr\rDrLr( old_prefix new_prefix _old_envsr@old_envs _new_envsnew_envs old_prompt new_promptactivate old_activate new_activater)r*r/s rrelocaters m&'MNNN   % %D ...(}==GW(}==GW"*400(((()SV])]^^^,,,&'cfs'sttt$]3J?M .y9H ] +G 4Em449H'00J'00J$T27<<#Z,1,122LIqw||Ir**H$T27<<#Z,1,122LIqw||Ir**Hw$Jw$J K(###Ibgll8S%EEFF::x00  % %'// JGGL  X|S 9 9 9 7>>' " "$ '7### } - -F*8T6BBK  $ $ & & -Fm4444$ uk6T\]]]]m,,,,,rctj|}tj|}||vrt jd|ztj||dS)Nr.)r rFrr0r rErK)r&r' apps_summarys rrKrKs^   % %D&t,,L $$&'cfo'opppi(((((rctj|}i}ttj|D]\}}|dt krt |||}|d|d|d|d|dd||<d|vr*t|ddkr|d||d<|S) Nr+domainrLrPr)rrLr*r+rdomainsr) r rFrrr0rJr9 as_deepdictlen)r&summr'datar*s rr0r0s   % %D D$[%8%>%>??99 4  + - - &tY==IIKK 8n']&v.&}5%l3   Y   T)_!5!5!9!9)-iDOI & Krc tj|}tj|}||vrt jd|z||}|d}|d}tj|}t||} | j } tj |||t| dd|tj ||||||tj ||dS)Nr.rLrTtransitrC) old_doc_root new_doc_root)r rFrr0r rErHr9r+r/rIrJrtrK) r&r'rLrDrold_app_summary old_aliasr new_aliasr*r/s rrrs   % %D&t,,L $$&'cfo'oppp"9-O(I"9-L%e,,I"433K  $ $ & & -F$ 9k64QZemnnnnT9idlmmmmi(((((rcxtj|}t||}||dSr;)r rFr9rSrgs r uninstallr s;   % %D"433K##I.....rcxtj|}t||}||dSr;)r rFr9extension_updatergs rupdaters;   % %D"433K  +++++rc j tjtjdddgd\}}nj#tj$rX}tjt |ttjdYd}~nd}~wwxYwd}d}d}d}d}d}d} |s"ttjd|D]\} } | dvr | dvrd }| d vrd }| d vrd }| dvrd}&| dvrd}-| dvrd}4| dvrd};| dvrd}B| dvrd}I| dvrd}| }R| dvrd}Y| dvrd}`| d vrd!}| }i| d"vrd#}| }r| d$vr| } y| d%vrd&}| d'vr| }| d(kr| }| d)vrd*}| d+vrd,}| }tjd-tjd|dkr3tjd.tjd|d/vr5|s3tjd0tjd1|r t|\} } n~#t$r2tj |d2d3|zd4tjdYnCt$r7tj |d2d5tzd4tjdYnwxYw|s| }n|| kr2tj |d2d6|d7|d4tjdnd|rb|s` t|}nD#t$r7tj |d2d5tzd4tjdYnwxYw|d8\}} |d9kr:|dkr3tjd:tjd;n!|rd<|d=D} d8}d8}i}|d&kr't#j}nK|d,kr*t#j|}d}n|d krt+jd>}n|dkrt/|}n|d kr"t1||d8|d| | ?n|d krt3||d8n|dkr t5||d8|d|n||dkr'd}|r| }t7||d8|d|?nO|dkrt9||d8n1|dkrt;||d8}n|dkrt;||d8| n|dkrt=||d8}n|d8}|d9krt=||}|D]} |dkrt?|||n/|d#krtA|||n|d!krtC||||!|d@dAii|dz }i#tDtFj$f$r6}|!|d2t |d4i|dz }Yd}~d}~wwxYwn#tJ$rC}tj |d2t |d4tjdYd}~nYd}~wtL$rI}tOj(}tj |d2|d4tjdYd}~nd}~wwxYw|s|rt/|}|r|rdB}dC}ns|rd2}dD}nl|rA|dCkr;|r#tj)|t/|n+tj)|intj)||tjd8dE*dFtW|D}tj |||d4tj|dS)GNrzhi:v:u:lGsynfFZcbe:d:r:gpjK:)helpz interpreter=zversion=zuser=zdomain=listlist-extensions user-summary create-webappdestroy-webapprelocate-webapptransit-webapprestart-webapp user-currentset-user-currentzenable-user-extensions=zdisable-user-extensions=zreplace-user-extensions=list-user-extensionsz print-summaryjsonzlist-extensions-version=rmtextF)z-iz --interpreter)z-lz--listr)z-yz--create-webappr)z-nz--destroy-webappr)z-fz--relocate-webappr)z-Fz--transit-webappr)z-Zz--restart-webappr)z-cz--user-currentr)z-bz--set-user-currentr)z-gz--list-user-extensionsr)z-ez--enable-user-extensionsenable-user-extensions)z-sz--user-summaryr)z-jz--jsonr)z-rz--replace-user-extensionsreplace-user-extensions)z-dz--disable-user-extensionsdisable-user-extensions)z-vz --version)z-Gz--list-extensionsr)z-uz--userz--domain)z-pz--print-summaryT)z-Kz--list-extensions-versionzlist-extensions-versionzunhandled optionz2ERROR:you must provide option for interpreter ruby) rrrrrrrrrzwebapp must be specifiedERRORzNo such domain: "%s")statusmessagez"Ruby selector not supported for %szdomain z is not owned by the user r-z/installlation of all extensions is not possiblecg|]}||Srr).0_fs r zmain..s888R8888r,rrCrOKPARTIAL c 3zK|]6\}}|d|d|ddV7dS)z: rrrmN)r1)rkvs r zmain..sb'' AqAAquuYh(;(;<<<=''''''r),getoptsysargv GetoptErrorstderrwritestrrexitrrr print_diagrrrsplitr ExtensionInfolist_extensions_cachedlist_extensions_versionrinterpreters_dictr0r%rerrrKr]rjrhrr ValueErrorr rTr Exception traceback format_exc print_datar=r)optsargserrext_listr| print_summaryr&ractionroarDuser_ domain_listr@_extserrorokresultrrLr[msgr exit_statusrs rmainrs ] HQRRL *--- dd4   S"""    H CM D F FG    111 ' ' '  " " "FF + + +$FF , , ,%FF - - -&FF , , ,%FF , , ,%FF * * *#FF . . .'FF 2 2 2+FF 4 4 4-FHH * * *#FF " " "CC 5 5 5.FHH 5 5 5.FHH % % %GG - - -&FF " " "DD *__FF + + + MM 5 5 5.FHH J  / 0 0 0 HQKKKK || MNNN      J  7 8 8 8 HQKKK % %fooOHee     swCY\bCb$c$c d d d HQKKKKK     swCgjqCq$r$r s s s HQKKKKK  DD U]]  swwntntntvzvzC{$|$| } } } HQKKK %f% %d++KK     swCgjqCq$r$r s s s HQKKKKK "!n 83 - - - J  N O O O HQKKK 988hnnS118889  & & &-//FFHHFF 0 0 0-//GGNNFHH v  !3I>>FF ~ % %T]]FF  & & 4a$q'7X F F F F F ' ' ' D$q' " " " " ( ( ( T47DGS 1 1 1 1 ' ' 'L (' D$q'47\ B B B B B ' ' ' D$q' " " " " ~ % %T47++FF ) ) ) D$q'7 + + + + - - -$T4733FFGE3'e44"    !999eY7777#<<<!$y9999#<<<tUI666MM9x.>"?@@@!GBB"N$HIMM"w3s88$L$LMOOOQJEEEEEE !37s3xx H HIII  "$$37s C CDDD   m     ,Q ,"3 6666"3++++  sF + + +  ii''f%%'''''G sv'BBCCCH[s-0BABBH**9J%%=J%$J%+K;;>L<;L<,GX+5A%WX+X'1,X"X+"X''X++ [ 59Y33 [ ?[[ r;)NNN)NN)1 __future__rrrrrur3r_rr future.utilsrrmrr r clselectprintr clselectexceptr r clselectrubyrrrclcommon.cpapirrrclcommon.cpapi.cpapiexceptionsrrrJrr,r9r r%r]rerhrjrrKr0rrrrrrrrs`&%%%%%&&&&&& """"""""""""AAAAAAAA@@@@@@@@@@8888888888AAAAAAAA GGG2        999 ) ) ) ) ) ) ) )F   "--- $$$ 2-2-2-j))).))))$/// ,,, \\\\\r