Ѡg~ dZddlZddlZddlmZmZmZmZddlm Z ddl m Z dZ dee eeeeeeffffdZd edeeeeffd ZdS) zv common helper functions, related to processing api using custom binary currently available for Directadmin and Plesk N)ListTupleUnionOptional) exec_utility)ClPwdz#/usr/share/python-cllib/userdomainsreturncttg\}} tj|}|dkr|d|DfSn#tj$rYnwxYw||fS)a Calls USERDOMAINS(userdomains.c) bin and returns rc and loaded json output This is equals to call `userdomains(pwd.getpwuid(os.getuid()).pw_name, as_root=True)` Returns: return code of USERDOMAINS and json output if rc == 0: `out` is out from `userdomains()` NB: there is no tuples in JSON so da_out's type is List[List[str, str]] instead of List[Tuple[str, str]] if rc != 0: `out` type is str error codes: 1: diradmin/psaadmin user not found 2: not DA/Plesk panel 3: seteuid() syscall failed 4: executed as root 10: exception during `userdomains()` call 11: no such user in panel rcg|]>}t|dktd|D.|d|df?S)c3@K|]}t|tVdS)N) isinstancestr).0ps /builddir/build/BUILDROOT/alt-python27-cllib-3.4.22-1.el8.cloudlinux.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/clcommon/cpapi/cpapicustombin.py z;get_domains_via_custom_binary...,s,(I(IAs););(I(I(I(I(I(Ir)lenall)rrows r z1get_domains_via_custom_binary..)sWs88q==S(I(IS(I(I(I%I%I=QQ  ==r)r USERDOMAINSjsonloadsJSONDecodeError)rcoutress rget_domains_via_custom_binaryr!s";++GB joo 77          s7NsAAAdomainct}|tjd}t \}}|dkrdS|D]\}}||kr ||jfcSdS)z New method for getting doc_root for domain under user Method parses /usr/local/directadmin/... user's web server config See: _get_domains_list_as_root() :return: (doc_root, username) tuple rN)r get_pw_by_uidosgetuidr!pw_name)r"clpwduser_pwrdomainsdom_docroots r"_docroot_under_user_via_custom_binr-2s GGE!!")++..q1G011KB Qwwt -- X &==W_, , , ,  4r)__doc__r%rtypingrrrrclcommon.utilsrclcommon.clpwdrrintrr!r-rrr4s  ////////////'''''' 3 uS%T%S/=R8R2S-S'TBsx #s(O8r