Edit File: clcontrollib.cpython-311.opt-1.pyc
� ����5/9e������������������������������d�dl�mZ�d�dl�mZ�d�dlmZ�d�dlZd�dlZd�dlZd�dlZd�dl Z d�dl mZmZm Z �d�dlmZmZ�d�dlmZ�d�dlmZ�d�d lmZmZmZmZ�d�dlZd Z�G�d��de������������Zd ��Z�G�d��de ������������Z!�G�d��de!������������Z"�G�d��de!������������Z#�G�d��de������������Z$�G�d��de!������������Z%�G�d��de!������������Z&�G�d��de!������������Z'�G�d��de!������������Z(�G�d��de!������������Z)dS�) �����)�print_function)�absolute_import)�rangeN)�Tuple�Optional�List)�ClPwd� mysql_lib)�ProcLve)�grep)�cpanel�directadmin� ispmanager�plesk�0���c�������������������������e�Zd�ZdZdS�)�ConfigDataErrorz� Should be raised when something went wrong during user's config data loading/parsing. Supposed to be used when we want to skip some user with broken configuration files N)�__name__� __module__�__qualname__�__doc__��������py/clcontrollib.pyr���r������s������������������ �Dr���r���c�����������������������t����������j�����������������������t�����������j��������dk����rt������������������������S�t�����������j��������dk����rt ������������������������S�t�����������j��������dk����rt������������������������S�t�����������j��������dk����rt ������������������������S�t�����������j��������dk����rt������������������������S�t�����������j��������dk����rt������������������������S�t������������������������S�)N�Plesk�cPanel� InterWorx� ISPManager�DirectAdmin� HostingNG) �detect� getCPName�CP_NAMEr����Cpanelr���r���r ���r!����Unknownr���r���r����detect_panelclassr'���'���s������� ����� �~�� � ��w�w�� ��8� #� #��x�x�� ��;� &� &��{�{�� ��<� '� '��|�|�� ��=� (� (��}�}�� ��;� &� &��{�{���y�y�r���c��������������������������e�Zd�Zd��Zdd�Zd��Zd��Zed����������������Z � �dd �Z ed ����������������Z edd���������������Zdd �Zdd�Z dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS�)�GeneralPanelc������������������N����t������������������������|�_��������|�j��������j��������|�_��������t����������j����������������������|�_��������|�j�������������������������������������������|�j�������������������������������������������k����r-t����������d� ��������������������|�j��������|�j���������������������������������d�|�_��������d�S�)Nz+Class "{}" not should be used on panel "{}")r ���� users_data� __class__r���� class_namer"���r#����current_panel_name�lower�UserWarning�format�cpapi_plugin)�selfs��� r����__init__zGeneralPanel.__init__;���s��������'�'����.�1���"(�"2�"4�"4����?� � �"�"�d�&=�&C�&C�&E�&E�E�E��K�R�R����'��������� ��!����r���Fc������������������4�����|�j��������������������������������������������S�)z� List all admins names in given control panel :param bool debug: Do produce debug output or don't :return: list of strings )r2����admins�r3����debugs��� r����list_adminszGeneralPanel.list_adminsG���s�������� �'�'�)�)�)r���c������������������6�����|�j������������������������������|������������S�)z| Return True if username is in admin names :param str username: user to check :return: bool )r2����is_admin)r3����usernames��� r���r;���zGeneralPanel.is_adminO���s�������� �)�)�(�3�3�3r���c������������������l�����|r1t�����������j�����������������������������|�d|�j��������j���������d��������������d�S�d�S�)Nz is not implemented for � )�sys�stderr�writer,���r����r3���r8����method_names��� r����_warningzGeneralPanel._warningW���sQ�������� 7��J������T�^�4�4�4�6�� 7�� 7�� 7�� 7�� 7� 7�� 7r���c������������������j�����t����������j���������t�����������j��������d���������������������|��������������������������d�S�)NzCL_CONTROLLIB: {})�syslog�LOG_WARNINGr1���)�msgs��� r���� _slog_warningzGeneralPanel._slog_warning\���s,������� �f�(�*=�*D�*D�S�*I�*I�J�J�J�J�Jr���NTc������������������z����|�|�t����������d�������������|�|�t����������d�������������|�s �|�j�����������������������������|������������S�#�t����������j��������$�rF}|rt����������|�������������|r(|����������������������d���������������������|�������������������������Y�d}~dS�d}~ww�xY�w �|�j�����������������������������t����������|������������������������d���������S�#�t����������j��������$�rF}|rt����������|�������������|r(|����������������������d���������������������|�������������������������Y�d}~dS�d}~wt�����������$�r�t����������d�������������Y�dS�w�xY�w)aH�� Check that provided user is really exists in system and return it as: - uid if username was provided - username if uid was provided - None if user doesn't exists Produce syslog/debug output depending on flags if user isn't exists. This helper function is mostly needed because it's possible that user is already deleted in system but his entity is still present in control panel files (like DA_USERS_DIR) so we should do additional checks to skip such users. :return: (uid | username) or None NzIThis function accepts either uid or username, but not both simultaneouslyz0Incorrect call: uid or username is not specifiedz4User with username="{}" is not present in the systemr���z/User with uid="{}" is not present in the system�Incorrect user id) � ValueErrorr+����get_uidr ����NoSuchUserException�printrI���r1���� get_names�int)r3����uidr<���r8����syslog_�es��� r����_check_and_get_userz GeneralPanel._check_and_get_user`���s������ ��?�x�3���;��<��<�� <���;�8�+��O�P�P�P��� ���.�.�x�8�8�8���,�� �� �� �����!�H�H�H���+��&�&�N����)�)�+��+��+���t�t�t�t�t����� ���� ��?�,�,�S��X�X�6�6�q�9�9���(�� �� �� ��� ��a������ "��"�"�E��V�C�[�[�"��"��"���4�4�4�4�4������� �� �� ��%�&�&�&��4�4� ���s5����A��B�;B�B�,C �� D:�;D�D:�9D:c������������������~�����t����������|�d������������5�}|�����������������������������������}ddd�������������n#�1�swxY�w�Y���|S�)��� Safely read file content and close it before return the content string. No exceptions will have caught! :param string file_name: Absolute or relative path to file :rtype: string :return: Content of given file path �rN)�open� readlines)� file_name�f�contents��� r����get_file_lineszGeneralPanel.get_file_lines����sx��������)�S� !� !�� $�Q��k�k�m�m�G� $�� $�� $�� $�� $�� $�� $�� $�� $�� $�� $����� $�� $�� $�� $��s����2�6�6�wc�����������������������t����������|�|������������5�}|���������������������|�������������ddd�������������dS�#�1�swxY�w�Y���dS�)a=�� Safely write to file and close it before the function end. No exceptions will have caught! :param string file_name: Absolute or relative path to file :param string content: What to write there :param string open_method: Either "w" or "a" or "b" :return: None N)rY���� writelines)r[���r]����open_methodr\���s��� r����write_file_lineszGeneralPanel.write_file_lines����s���������)�[� )� )�� "�Q� �L�L��!�!�!� "�� "�� "�� "�� "�� "�� "�� "�� "�� "�� "�� "����� "�� "�� "�� "�� "�� "s����4�8�8c������������������2�����|�����������������������|d�������������dS�)a�� Implements /usr/bin/getcontrolpaneluserspackages and /usr/bin/getcontrolpaneluserspackages --list-all commands Result is stdout output: uid package name :param bool debug: Do produce debug output or don't :return: None zList allN�rD���r7���s��� r����list_allzGeneralPanel.list_all����s������� � � �e�Z�(�(�(�(�(r���c������������������2�����|�����������������������|d�������������dS�)a �� Implements /usr/bin/getcontrolpaneluserspackages --package=package_name Result is stdout output: uid :param string package: Package name :param bool debug: Do produce debug output or don't :return: None zList users in given packageNre���)r3����packager8���s��� r����list_users_in_packagez"GeneralPanel.list_users_in_package����s������� � � �e�:�;�;�;�;�;r���c������������������2�����|�����������������������|d�������������dS�)aX�� Implements /usr/bin/getcontrolpaneluserspackages --package=package_name --reseller=reseller_name Result is stdout output: uid :param string package: Package name :param string reseller: Reseller name :param bool debug: Do produce debug output or don't :return: None z&List users in given reseller's packageNre���)r3���rh����resellerr8���s��� r����list_users_in_reseller_packagez+GeneralPanel.list_users_in_reseller_package����s������� � � �e�E�F�F�F�F�Fr���c������������������2�����|�����������������������|d�������������dS�)z� Implements /usr/bin/getcontrolpaneluserspackages --userid=id Result is stdout output: uid package name :param int uid: User ID :param bool debug: Do produce debug output or don't :return: None zList given user's packageNre����r3���rR���r8���s��� r����list_user_packagezGeneralPanel.list_user_package����s������� � � �e�8�9�9�9�9�9r���c������������������2�����|�����������������������|d�������������dS�)z� Implements /usr/bin/getcontrolpaneluserspackages --list-packages Result is stdout output: package name :param bool debug: Do produce debug output or don't :return: None zList all packagesNre���r7���s��� r���� list_packageszGeneralPanel.list_packages����s������� � � �e�0�1�1�1�1�1r���c������������������2�����|�����������������������|d�������������dS�)z� Implements /usr/bin/getcontrolpaneluserspackages --list-resellers-packages Result is stdout output: reseller_name package name :param bool debug: Do produce debug output or don't :return: None z!List packages belong to resellersNre���r7���s��� r����list_resellers_packagesz$GeneralPanel.list_resellers_packages����s������� � � �e�@�A�A�A�A�Ar���c������������������2�����|�����������������������|d�������������dS�)a'�� Implements /usr/bin/getcontrolpaneluserspackages --list-reseller-packages=reseller Result is stdout output: package name :param string reseller: Reseller name :param bool debug: Do produce debug output or don't :return: None z&List packages belong to given resellerNre����r3���rk���r8���s��� r����list_reseller_packagesz#GeneralPanel.list_reseller_packages����s������� � � �e�E�F�F�F�F�Fr���c������������������2�����|�����������������������|d�������������dS�)z� Implements /usr/bin/getcontrolpaneluserspackages --list-users Result is stdout output: uid,package name,reseller_name :param bool debug: Do produce debug output or don't :return: None z List usersNre���r7���s��� r���� list_userszGeneralPanel.list_users��s������� � � �e�\�*�*�*�*�*r���c������������������2�����|�����������������������|d�������������dS�)a(�� Generate triple with uid, it's package, it's reseller :param bool debug: Do produce debug output or don't :param string reseller_name: filter by this reseller :rtype: generator of (int, string, string) :return: (uid, package name, reseller name) zList reseler's usersNre���)r3���r8���� reseller_names��� r����_get_user_packageszGeneralPanel._get_user_packages��s������� � � �e�3�4�4�4�4�4r���c������������������������|�j���������dk����rV|�|rt����������d�������������dS�|����������������������||�������������D�]+\��}}}t����������d���������������������||��������������������������*dS�dS�)z� Print uid and package for defined reseller :param bool debug: Do produce debug output or don't :param reseller: username of reseller :return: None r)���NzReseller is not defined)r8���rz����{},{})r-���rO���r{���r1���)r3���r8���rk���rR���rh����_s��� r����list_reseller_usersz GeneralPanel.list_reseller_users��s���������?�n�,�,�����5��3�4�4�4���#'�#:�#:��V^�#:�#_�#_�� 4�� 4���W�a��g�n�n�S�'�2�2�3�3�3�3� �-�,� 4�� 4r���c������������������2�����|�����������������������|d�������������dS�)z� Determine user's reseller :param string uid: uid of user :param bool debug: Do produce debug output or don't :rtype: string :return: reseller name zGet user's resellerNre���rn���s��� r����get_resellerzGeneralPanel.get_reseller)��s������� � � �e�2�3�3�3�3�3r����F)NNFT)r_����FN)r���r���r���r4���r9���r;���rD����staticmethodrI���rU���r^���rc���rf���ri���rl���ro���rq���rs���rv���rx���r{���r���r����r���r���r���r)���r)���9���s�������������� !�� !�� !�*��*��*��*�4��4��4�7��7��7� ��K��K���\�K��BG�$(�1��1��1��1�f�������\����"��"��"���\�"� )�� )�� )�� )� <�� <�� <�� <�G��G��G��G� :�� :�� :�� :� 2�� 2�� 2�� 2� B�� B�� B�� B�G��G��G��G� +�� +�� +�� +� 5�� 5�� 5�� 5� 4�� 4�� 4�� 4�4��4��4��4��4��4r���r)���c���������������������������e�Zd�ZdZdZdZdZdZ��fd�Zd��Z d��Z d ��Zd ��Zdd�Z dd �Zd��Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Z��xZS�)r%���z/var/cpanel/usersz/var/cpanel/packagesz/var/cpanel/resellersz/etc/trueuserownersNc�������������������������t����������t����������|�������������������������������������������������|�j�������������������������������������������|�_��������t ����������j����������������������|�_��������d�S��N) �superr%���r4���r+����get_sys_min_uid�min_uidr ����PanelPluginr2����r3���r,���s��� �r���r4���zCpanel.__init__<��sK������� �f�d���$�$�&�&�&���6�6�8�8���"�.�0�0����r���c����������������������d} �t����������|d������������5�}|�����������������������������������}ddd�������������n#�1�swxY�w�Y���n�#�t����������$�r~}d|��d|��d�}|���������������������|�j��������������������r|d|���z ��}t����������|t����������j����������������������|����������������������|�������������t ����������j ��������t�����������������������Y�d}~nd}~ww�xY�w|S�) rW���z]http://kb.cloudlinux.com/2017/08/how-to-fix-the-issue-with-non-utf-symbols-in-packages-names/rX���N�Unable to read file 'z ', error is: z-. It looks like you use not an UTF-8 charset.z Please read the instruction: )�file)rY���rZ����UnicodeDecodeError� startswith�USERDIRrO���r?���r@���rI����exit�BAD_CODING_ERROR_CODE)r3���r[���� ENCODING_LINKr\���r]���rT����messages��� r���r^���zCpanel.get_file_linesA��sD�����B� � ,��i��%�%�� (���+�+�-�-�� (�� (�� (�� (�� (�� (�� (�� (�� (�� (�� (����� (�� (�� (�� (���!�� ,�� ,�� ,�E�i��E��E�a��E��E��E�G��#�#�D�L�1�1�� M��L�]�L�L�L���'�� �+�+�+�+����w�'�'�'��H�*�+�+�+�+�+�+�+�+����� ,������s3����A��5�A��9�A��9�A�� C �A4C�C c������������������f����i�}t����������j��������d������������}t����������j�����������������������������|�j��������������������rv|����������������������|�j��������������������}|D�]Y}|�����������������������������������}t����������j��������||������������}|��.|� ��������������������d������������||� ��������������������d������������<����Z|S�)z~ Get dict, where keys - user's names, values - reseller's names :return: dict {user1: reseller1, ...} z!^(?P<name>\w+):\s*(?P<owner>\w+)$N�owner�name) �re�compile�os�path�isfile�RESELLERS_AND_USERSr^����strip�match�group)r3����result�pattern�file_content�line�strippedr����s��� r����_get_users_resellers_dictz Cpanel._get_users_resellers_dictY��s������� �����*�A�B�B�� �7�>�>�$�2�3�3�� C��.�.�t�/G�H�H�L�$�� C�� C���:�:�<�<�����(�3�3���=��.3�k�k�'�.B�.B��u�{�{�6�*�*�+�+�� r���c�����������������������g�}t�����������j�����������������������������|�j��������������������r&|����������������������|�j��������������������}d��|D���������������}|S�)zw Get resellers list from RESELLERS_PATH :rtype: list :return: list of resellers names c������������������j�����g�|�]0}|���������������������������������������������������������d�d������������d�����������1S�)�:����r���)r�����split��.0�ls��� r���� <listcomp>z)Cpanel._get_resellers.<locals>.<listcomp>~��s3������J�J�J����������a�0�0��3�J�J�Jr���)r����r����r�����RESELLERS_PATHr^���)r3���� resellersr����s��� r����_get_resellerszCpanel._get_resellerst��sR�������� � �7�>�>�$�-�.�.�� K��.�.�t�/B�C�C�L�J�J�\�J�J�J�I��r���c����������� �����������d}t�����������j�����������������������������|������������rk|����������������������|������������}t ����������t����������dddd|�������������������������}|r3|d�����������������������������������������������������������������d������������d���������}|S�)z� Get package name from user's config file :param string path: Path to file contains info about cPanel user :rtype: string :return: Package name ��z PLAN\=.*$F��fixed_string�match_any_position�multiple_search�data_from_filer����=r����)r����r����r����r^����listr���r����r����)r3���r����rh���r����r����s��� r����get_packagezCpanel.get_package���s���������� �7�>�>�$���� :��.�.�t�4�4�L��$��"�#(� %�+����������F���� :� ��)�/�/�+�+�1�1�#�6�6�q�9���r���Fc����������� ������������d}|�����������������������||�������������}|r�t����������j�����������������������������|�j��������|������������}t����������j�����������������������������|������������rk|����������������������|������������}t����������t����������dddd|�������������������������}|r3|d���������� ����������������������������������� ��������������������d������������d���������}|r||������������������������������������v�r|ndS�) �� Determine user's reseller based on `owner` field from user's config :param string uid: uid of user :param bool debug: Do produce debug output or don't :rtype: string :return: reseller name r�����rR���r8���z OWNER\=.*$Fr����r���r����r����)rU���r����r�����joinr����r����r^���r����r���r����r����r����)r3���rR���r8���rk���r<���r����r����r����s��� r���� _get_resellerzCpanel._get_reseller���s�����������+�+��5�+�A�A���� ?��7�<�<���h�7�7�D��w�~�~�d�#�#�� ?�#�2�2�4�8�8���d� �!&�',�$)�#/��������������?�%�a�y���0�0�6�6�s�;�;�A�>�H�#�Q��D�4G�4G�4I�4I�(I�(I�x�x�r�Qr���c������������������N�����t����������|����������������������||��������������������������dS�)r�����r8���N)rO���r����rn���s��� r���r����zCpanel.get_reseller���s+������� �d� � ��E� �2�2�3�3�3�3�3r���c��������������#����r��K����t�����������j�����������������������������|�j��������������������r�t����������j��������|�j��������������������D�]v}t�����������j�����������������������������t�����������j�����������������������������|�j��������|������������������������r|dfV����Kt�����������j�����������������������������|�j��������|������������dfV����udS�dS�)z� Generate list of packages in current panel :rtype: generator of (string, bool) :return: (name of package, True) for normal files and (/path/to/wrang/file, False) otherwise TFN)r����r�����isdir� PACKAGEDIR�listdirr����r����)r3����filenames��� r���� _get_packageszCpanel._get_packages���s�������������7�=�=���)�)�� K��J�t��7�7�� K�� K���7�>�>�"�'�,�,�t���"I�"I�J�J��K�#�T�*�*�*�*�*��7�<�<����B�B�E�J�J�J�J�J� K�� K� K�� Kr���c������������������������|�������������������������������������}|������������������������������������D�]N\��}}|r3d|v�r|���������������������dd������������d���������|v�r�*t����������|��������������:|rt����������d|z����������������Od�S�)Nr~���r����r����Warning: %s is not a file.�r����r����r����rO���)r3���r8���r����r�����is_files��� r���rq���zCpanel.list_packages���s��������'�'�)�)� �!%�!3�!3�!5�!5�� ?�� ?��H�g��� ?��(�?�?�x�~�~�c�1�'=�'=�a�'@�I�'M�'M���h������� ?��2�X�=�>�>�>�� ?�� ?r���c��������������#����p��K����|�������������������������������������}|sdS�t����������j�����������������������������|�j��������������������r�t����������j��������|�j��������������������D�]�} �|�j�����������������������������|������������}||�j��������k�����r�) �t����������j��������� ��������������������|�j��������|������������}||v�r ||���������}n|�� ��������������������||������������}|����������������������|������������rdn|}|�||k����r��||����������������������|������������|fV�����#�t����������j��������$�r}|rt����������|�������������Y�d}~��d}~ww�xY�wdS�dS�)ao�� Generate triple with uid, it's package and it's reseller for every user in USERDIR which uid is greater than MIN_UID :param bool debug: Do produce debug output or don't :param string reseller_name: filter by this reseller :rtype: generator of (int, string, string) :return: (uid, package name, reseller name) Nr����)r����r����r����r����r����r����r+���rM���r����r����r����r;���r����r ���rN���rO���) r3���r8���rz����users_resellers_dictr����rR���r����rk���rT���s ��� r���r{���zCpanel._get_user_packages���sz���������� $�=�=�?�?���$�� ��F� �7�=�=���&�&�� B��J�t�|�4�4�� B�� B��B��/�1�1�(�;�;�C��T�\�)�)� ��*���7�<�<���h�?�?�D��#7�7�7�#7��#A���#'�#5�#5�c�5�#A�#A��%)�]�]�8�%<�%<�J�r�r�(�H�$�0�X��5N�5N� ��� 0� 0�� 6� 6��A�A�A�A�A����0��!��!��!���!��a�������������!���� B�� B� B�� Bs����%D�D1�D,�,D1c�����������������������|�����������������������||�������������D�]4\��}}}|dk����r(|�t����������||��������������||k����rt����������|��������������5d�S�)N�rz���r�����r{���rO���)r3���rh���r8���rk���rR����self_package� self_resellers��� r���rf���zCpanel.list_all���sp������04�0G�0G��]e�0G�0f�0f�� �� �,�C��}��r�!�!��?��#�|�,�,�,�,���,�,��#�J�J�J�� �� r���c���������������������� �|�j������������������������������t����������|������������������������}|D�]X}|�j��������dz���|z���}t����������j�����������������������������|������������r*|����������������������|������������}|dk����rt����������|��������������Yd�S�#�t����������j ��������$�r�|rt����������d�������������Y�d�S�Y�d�S�t����������$�r�t����������d�������������Y�d�S�w�xY�w)N�/r����z,getcontrolpaneluserspackages: User not foundrK���)r+���rP���rQ���r����r����r����r����r����rO���r ���rN���rL���)r3���rR���r8����users�userr����rh���s��� r���ro���zCpanel.list_user_package��s����� '��O�-�-�c�#�h�h�7�7�E���� '�� '���|�c�)�D�0���7�>�>�$�'�'��'�"�.�.�t�4�4�G��"�}�}��g����� '�� '�� ��(�� F�� F�� F��� F��D�E�E�E�E�E�E� F�� F�� F��� '�� '�� '��%�&�&�&�&�&�&� '���s����'B�� C�,C�Cc����������������������|�������������������������������������}|������������������������������������D�]`\��}}|rCd|v�r?|���������������������dd������������d���������}||vr�,|�||k����r�5t����������|�d|����������������J|s|rt����������d|z����������������ad�S�)Nr~���r����r���� r����r����)r3���r8���rk���r����r����r�����res_names��� r���rs���zCpanel.list_resellers_packages��s��������'�'�)�)� �!%�!3�!3�!5�!5�� ?�� ?��H�g��� ?�3�(�?�?�#�>�>�#�q�1�1�!�4���9�,�,���)�h�(�.B�.B���X�X�X�x�x�8�9�9�9�9��� ?��� ?��2�X�=�>�>�>�� ?�� ?r���c�����������������������|�������������������������������������}||vr|rt����������d|z���������������d�S�|����������������������||��������������d�S�)NzError: %s is not reseller�r8���rk���)r����rO���rs���)r3���rk���r8���r����s��� r���rv���zCpanel.list_reseller_packages��s^�������'�'�)�)� ��9�$�$��� >��1�H�<�=�=�=��F��$�$�5�8�$�D�D�D�D�Dr���c����������� �������.������|��������������������������������������d|v�rN|���������������������d�������������t������������fd�t����������dt �����������������������������������D���������������������������rd�S�|�|����������������������|�������������d�S�|rt ����������d�������������d�S�d�S�)Nr~���c��������������3����V����K����|�]#}d������������������������d|�����������������������v�V����$dS�)r~���N)r����)r�����i�partsr����s��� ��r���� <genexpr>z/Cpanel.list_users_in_package.<locals>.<genexpr>+��s<�����������R�R��3�8�8�E�"�1�"�I�&�&�)�3�R�R�R�R�R�Rr���r����z/getcontrolpaneluserspackages: Undefined package)r����r�����anyr����lenrf���rO���)r3���rh���r8���r����r����s��� @@r���ri���zCpanel.list_users_in_package'��s����������'�'�)�)� ��'�>�>��M�M�#�&�&�E��R�R�R�R�R�U�1�c�%�j�j�=Q�=Q�R�R�R�R�R�� ������M�M�'�"�"�"�"�"� �� E��C�D�D�D�D�D� E�� Er���c�����������������������|�������������������������������������}||v�r|����������������������|||��������������d�S�|rt����������d�������������d�S�d�S�)Nr����z8getcontrolpaneluserspackages: Undefined reseller package)r����rf���rO���)r3���rh���rk���r8���r����s��� r���rl���z%Cpanel.list_users_in_reseller_package2��sf�������'�'�)�)� ��y� � ��M�M�'���M�B�B�B�B�B� �� N��L�M�M�M�M�M� N�� Nr���c������������������l�����|�����������������������|������������D�]\��}}}t����������|�d|�d|����������������d�S��N�,r����)r3���r8���rR���r����rk���s��� r���rx���zCpanel.list_users9��sR������+/�+B�+B�5�+I�+I�� >�� >�'�C��x�����\�\�\�8�8�<�=�=�=�=� >�� >r���r����r����)NFN)r���r���r���r����r����r����r����r+���r4���r^���r����r����r����r����r����r����rq���r{���rf���ro���rs���rv���ri���rl���rx���� __classcell__�r,���s���@r���r%���r%���4��s���������������!�G�'�J�,�N�/���J�1��1��1��1��1� �����0�����6����������,R��R��R��R�4 4�� 4�� 4�� 4�K��K��K�?��?��?��?�"B��"B��"B��"B�H�������'��'��'��'� ?��?��?��?�E��E��E��E� E�� E�� E�� E�N��N��N��N�>��>��>��>��>��>��>��>r���r%���c��������������������$������e�Zd�ZdZdZdZdZdZdZdZ dZ �e��������������Z��fd�Z d ��Zd ��Zd��Zd��Zd%d edeee������������������defd�Zd&d�Zd&d�Zd'd�Zd��Zd��Zd��Zd'd�Zd'd�Zd��Zd'd�Zd'd�Z d'd�Z!d'd�Z"d'd�Z#d'd �Z$d!��Z%d"��Z&d'd#�Z'd'd$�Z(��xZ)S�)(r ���z"/usr/local/directadmin/data/users/z,/usr/local/directadmin/conf/directadmin.confz,/usr/local/directadmin/data/admin/admin.listz//usr/local/directadmin/data/admin/reseller.listz//usr/local/directadmin/data/admin/packages.listr����Nc�������������������������t����������t����������|�������������������������������������������������t����������j����������������������|�_��������t ����������j����������������������|�_��������|�j��������� ����������������������������������|�_ ��������d�S�r����)r����r ���r4���r"����detect_DA_admin�DA_ADMINr���r����r2����get_encoding_name�ENCODINGr����s��� �r���r4���zDirectAdmin.__init__I��sZ������� �k�4� � �)�)�+�+�+��.�0�0�� �'�3�5�5����)�;�;�=�=�� � � r���c������������������&���� �t����������|d|�j���������������������5�}|�����������������������������������}d�d�d��������������n#�1�swxY�w�Y���|S�#�t����������$�r?}d|��d|�j����������d�}|����������������������|d|��d�z����������������t����������|������������|�d�}~ww�xY�w)NrX���)�encodingr����z '. It looks like you use not an z charset.z Error is: �.)rY���r����rZ���r����rI���� Exception)r3���r[���r\���r]���rT���r����s��� r���r^���zDirectAdmin.get_file_linesP��s����� ,��i��t�}�=�=�=�� (���+�+�-�-�� (�� (�� (�� (�� (�� (�� (�� (�� (�� (�� (����� (�� (�� (�� (��N��!�� ,�� ,�� ,�O�i��O��O�6:�m�O��O��O�G����w�);�q�);�);�);�;�<�<�<��G�$�$�!�+����� ,���s4����A��:�A��>�A��>�A�� B�:B�Bc������������������������ �|�����������������������|������������S�#�t����������$�r>}d}|����������������������|���������������������||�������������������������t �������������������������d}~ww�xY�w)zU Just a wrapper around _get_user_info_inner to send errors to syslog z;Skipping user '{}' with bad configuration files due to '{}'N)�_get_user_info_innerr����rI���r1���r���)r3���r<���rT����tpls��� r����_get_user_infozDirectAdmin._get_user_info[��so������ $��,�,�X�6�6�6����� $�� $�� $�O�C����s�z�z�(�A�6�6�7�7�7�!�#�#�#����� $���s������ A�9A�Ac����������� �������\����t�����������j�����������������������������|�j��������|d������������} �|����������������������|������������}n #��d}Y�nxY�w|st����������d�������������t ����������t����������dddd|�������������������������}t ����������t����������dddd|�������������������������} �|d��������������������������������������������� ��������������������d ������������d ���������}n#�t����������$�r�t����������d�������������w�xY�w �|d��������������������������������������������� ��������������������d ������������d ���������}n#�t����������$�r�t����������d�������������w�xY�w|����������������������||������������}|d k����r5d}|�j��������� ��������������������|������������} |����������������������| ������������rd}|}|�j��������� ��������������������|������������} | ||fS�)zG Return uid, package name and owner of user (reseller) � user.confN�&Unable to read any data from user.conf� usertype\=.*$Fr����zcreator\=.*$r���r����r����z#No "usertype" record in user configz"No "creator" record in user configrk���r�����DEFAULT)r����r����r�����DA_USERS_DIRr^���rL���r����r���r����r����� IndexError�_get_user_packager+���rM����_is_reseller_limits_enabled)r3���r<����userprofile�userprofile_content�result_usertype�result_creator�usertyperk���rh����lvp_idrR���s��� r���r����z DirectAdmin._get_user_info_innerk��s����� ��g�l�l�4�#4�h��L�L�� '�"&�"5�"5�k�"B�"B���� '�"&�������"�� G��E�F�F�F���t���$�!�.� �� �� ��������d���$�!�.� �� �� ������ D�&�q�)�/�/�1�1�7�7��<�<�Q�?�H�H���� D�� D�� D��B�C�C�C� D���� C�%�a�(�.�.�0�0�6�6�s�;�;�A�>�H�H���� C�� C�� C��A�B�B�B� C������(�(��3F�G�G����z�!�!���H���_�,�,�X�6�6�F��/�/��7�7�� $�#��#����o�%�%�h�/�/���G�X�%�%s!����>��A�3C��C)�-3D!��!D;c������������������6�����|�j������������������������������|������������S�r����)�proc_lve� exist_lvp)r3���r ��s��� r���r��z'DirectAdmin._is_reseller_limits_enabled���s�������}�&�&�v�.�.�.r���r<���r���returnc����������� �����������|sWt�����������j�����������������������������|�j��������|d������������} �|����������������������|������������}n #��d}Y�nxY�w|st����������d�������������t ����������t����������dddd|�������������������������}t ����������t����������dddd|�������������������������} �|d��������������������������������������������� ��������������������d ������������d ���������}n#�t����������$�r�t����������d�������������w�xY�w|dk����rT|rR �|d��������������������������������������������� ��������������������d ������������d ���������}n#�t����������$�r�t����������d �������������w�xY�w|S�)z� Reads user's package just as in the `_get_user_info_inner` function, but without masking to DEFAULT package Be aware that it may return different package than the `_get_user_info_inner` function r����Nr����zpackage\=.*$Fr����zoriginal_package\=.*$r���r����r����z"No "package" record in user config�customz+No "original_package" record in user config)r����r����r����r���r^���rL���r����r���r����r����r��)r3���r<���r��r���result_package�result_original_packagerh���s��� r���r��zDirectAdmin._get_user_package���s������ �#�� K��'�,�,�t�'8�(�K�P�P�K� +�&*�&9�&9�+�&F�&F�#�#�� +�&*�#�#�#����&�� K� �!I�J�J�J��d���$�!�.� �� �� �������#'�t�#��$�!�.�( ��( ��( ��#��#�� C�$�Q�'�-�-�/�/�5�5�c�:�:�1�=�G�G���� C�� C�� C��A�B�B�B� C�����h���#:�� P�1�!�4�:�:�<�<�B�B�3�G�G��J������ P�� P�� P� �!N�O�O�O� P�����s#����A����A�3C��C+�73D+��+EFc��������������#����4��K����t����������|������������������������������������������������}t����������j��������|�j��������������������D�]Z}||v�r�|����������������������||��������������� �|����������������������|������������\��}}}n#�t����������$�r�Y��Fw�xY�w|�||k����r�S|||fV����[dS�)a'�� Generate triple with uid, it's package, it's reseller :param bool debug: Do produce debug output or don't :param string reseller_name: filter by this reseller :rtype: generator of (int, string, string) :return: (uid, package name, reseller name) �r<���r8���N)�setr9���r����r����r���rU���r����r���)r3���r8���rz���r9���r<���rR���rh���rk���s��� r���r{���zDirectAdmin._get_user_packages���s�������������$�*�*�,�,�-�-��� �4�#4�5�5�� )�� )�H���;�&�&���'�'���'�G�G�O�� �)-�)<�)<�X�)F�)F�&��W�h�h��"�� �� �� ��� ������(�X��-F�-F���w��(�(�(�(�(�# )�� )s����A7�7 B�Bc������������������V����t�����������j�����������������������������|�j��������|d������������}t�����������j�����������������������������|������������sdS�|����������������������|������������}|D�]c} �|����������������������|���������������������d������������������������\��}}}n#�t����������$�r�Y��<w�xY�wt����������d� ��������������������||��������������������������d|����������������������|������������sQ �|����������������������|������������\��}}}n#�t����������$�r�Y�dS�w�xY�wt����������d� ��������������������||�������������������������dS�dS�)z� Print uid and package for users of a specified reseller :param debug: whether to produce debug output :param reseller: username of a reseller :return: None z users.listNr>���r}���)r����r����r����r����existsr^���r�����rstripr���rO���r1���r;���) r3���r8���rk���r�����reseller_usersr<���rR���rh���r~���s ��� r���r���zDirectAdmin.list_reseller_users���sJ�������w�|�|�D�-�x��F�F���w�~�~�d�#�#�� ��F��,�,�T�2�2��&�� 0�� 0�H� �"&�"5�"5�h�o�o�d�6K�6K�"L�"L���W�a�a��"�� �� �� ��� �����'�.�.��g�.�.�/�/�/�/���}�}�X�&�&�� 0� �"&�"5�"5�h�"?�"?���W�a�a��"�� �� �� ���� �����'�.�.��g�.�.�/�/�/�/�/� 0�� 0s$����",B� B�B�C3��3 D��Dc�����������������������|�����������������������||�������������}|r< �|����������������������|������������\��}}}t����������|�������������dS�#�t����������$�r�Y�dS�w�xY�wdS�)z� Determine user's reseller based on package from user's config :param string uid: uid of user :param bool debug: Do produce debug output or don't :rtype: string :return: reseller name r����N�rU���r����rO���r���)r3���rR���r8���r<���r~���rk���s��� r���r����zDirectAdmin.get_reseller ��s���������+�+��5�+�A�A���� � �!%�!4�!4�X�!>�!>���1�h���h��������#�� �� �� ���� ���� �� �����A�� A�Ac������������������,�����|�����������������������|������������S�)z� Check login_name is da admin. Backward compatibility wrapper :param login_name: Admin name :return: )r;���)r3���� login_names��� r����is_da_adminzDirectAdmin.is_da_admin��s��������}�}�Z�(�(�(r���c����������� �������z����d}t�����������j�����������������������������|�j��������|d������������}t�����������j�����������������������������|������������rs|����������������������|������������}t ����������t����������dddd|�������������������������}|r;|d��������������������������������������������� ��������������������d������������d���������}|dk����rd }|S�) z� Check login_name is da admin for using in hook return True - if login_name is admin False - otherwise Fr����r����r����r���r����r�����adminT) r����r����r����r���r����r^���r����r���r����r����)r3���r��r����r����r����r��r��s��� r����is_da_admin_for_hookz DirectAdmin.is_da_admin_for_hook"��s�����������w�|�|�D�-�z�;�G�G�� �7�>�>�$���� "��.�.�t�4�4�L�"�4��"�#(� %�+�$��$��$�����O���� "�*�1�-�3�3�5�5�;�;�C�@�@��C���w�&�&�!�F�� r���c������������������B���� �ddl�m}m}m}m}�n3#�t ����������$�r&�t ����������d�������������t����������j��������d�������������Y�nw�xY�w|�� ����������������������������������}|D�]F} �t����������|��������������#�|||f$�r)}t ����������dt����������|������������z���������������Y�d}~�?d}~ww�xY�wdS�)z� Add all DA admins to sudoers. Now calls only from CageFS plugin installer :param s_cmd: String such as "Clsudo.add_cagefs_user(user)" :return: r���)�Clsudo� NoSuchUser�UnableToReadFile�UnableToWriteFilezDCannot import Clsudo. Check if alt-python27-cllib package installed r����z%s N)�clsudor#��r$��r%��r&���ImportErrorrO���r?���r����r9����eval�str) r3����s_cmdr#��r$��r%��r&��� da_adminsr����rT���s ��� r����add_all_da_admins_to_sudoersz(DirectAdmin.add_all_da_admins_to_sudoers@��s������� �� Y�X�X�X�X�X�X�X�X�X�X�X�X���� �� �� ��Z�[�[�[��H�Q�K�K�K�K�K� ������$�$�&�&� ��� )�� )�D� )��U������� 0�2C�D�� )�� )�� )��f��A���'�(�(�(�(�(�(�(�(����� )���� )�� )s$������-?�?�A+�+B�3B�Bc������������������,�����|�����������������������|������������S�)z< Wrapper for compatibility with old code )r9���r7���s��� r����get_all_da_adminszDirectAdmin.get_all_da_adminsT��s�����������&�&�&r���c�����������������������g�}t�����������j�����������������������������|�j��������������������r&|����������������������|�j��������������������}d��|D���������������}|S�)zr Get all DA admins list :rtype: list of strings :return: List of DA admins names c������������������8�����g�|�]}|����������������������d���������������S�)r>����r���r����r����s��� r���r����z+DirectAdmin.list_admins.<locals>.<listcomp>d��s$������D�D�D�t����T�*�*�D�D�Dr���)r����r����r����� DA_ADMIN_LISTr^���)r3���r8���r,��r����s��� r���r9���zDirectAdmin.list_adminsZ��sR�������� � �7�>�>�$�,�-�-�� E��.�.�t�/A�B�B�L�D�D�|�D�D�D�I��r���c��������������#����v���K����|�����������������������|�j��������������������}|D�]}|���������������������d������������V����d�S��Nr>���)r^����DA_ADMINS_PACKAGESr��)r3���r����r����s��� r���r����zDirectAdmin._get_packagesg��sP�����������*�*�4�+B�C�C�� �� $�� $�D��+�+�d�#�#�#�#�#�#� $�� $r���c������������������R�����|�������������������������������������D�]}t����������|��������������d�S�r����)r����rO���)r3���r8���r����s��� r���rq���zDirectAdmin.list_packagesl��s4�������&�&�(�(�� �� �D��$�K�K�K�K� �� r���c������������������\�����|�������������������������������������D�]\��}}}t����������||��������������d�S�r����r����)r3���r8���rR���rh���r~���s��� r���rf���zDirectAdmin.list_allp��s@������#�6�6�8�8�� �� �O�C��!��#�w����� �� r���c�����������������������|�������������������������������������D�]*\��}}}t����������t����������|�������������d|�d|����������������+d�S�r����)r{���rO���r*��)r3���r8���rR���rh���rk���s��� r���rx���zDirectAdmin.list_userst��sV������&*�&=�&=�&?�&?�� >�� >�"�C��(���C�����'�'�'�8�8�<�=�=�=�=� >�� >r���c�����������������������|�����������������������||�������������}|r< �|����������������������|������������\��}}}t����������|�������������d�S�#�t����������$�r�Y�d�S�w�xY�wd�S�)Nr����r��)r3���rR���r8���r<���r~���rh���s��� r���ro���zDirectAdmin.list_user_packagex��s�������+�+��5�+�A�A���� � � $� 3� 3�H� =� =� ��7�A���g��������#�� �� �� ���� ���� �� r��c������������������j�����|�����������������������d�������������D�]\��}}}||k����rt����������|��������������d�S�)Nr����r����r����)r3���rh���r8���rR����package_rk���s��� r���ri���z!DirectAdmin.list_users_in_package���sL��������'�'�b�'�9�9� �� �#�C��8��7�"�"��c� � � �� �� r���c������������������j�����|�����������������������|�������������D�]\��}}}||k����rt����������|��������������d�S�)Nr����r����)r3���rh���rk���r8���rR���r=��s��� r���rl���z*DirectAdmin.list_users_in_reseller_package���sL��������'�'�h�'�?�?� �� �#�C��8��7�"�"��c� � � �� �� r���c������������������ ����g�}t�����������j�����������������������������|�j��������������������r&|����������������������|�j��������������������}d��|D���������������}|���������������������|�������������������������������������������������t����������t����������|������������������������S�)z0 Return list of resellers names c������������������^�����g�|�]*}|�������������������������������������|��������������������������������������+S�r���r2��r����s��� r���r����z.DirectAdmin._get_resellers.<locals>.<listcomp>���s-������M�M�M�Q�!�(�(�*�*�M�a�h�h�j�j�M�M�Mr���) r����r����r�����DA_RESELLERS_LISTr^����extendr9���r����r��)r3����resellers_listr����s��� r���r����zDirectAdmin._get_resellers���s���������� �7�>�>�$�0�1�1�� N��.�.�t�/E�F�F�L�M�M�,�M�M�M�N����d�.�.�0�0�1�1�1��C��'�'�(�(�(r���c������������������������g�}t�����������j�����������������������������|�j��������|d������������}t�����������j�����������������������������|������������r!|����������������������|������������}d��|D���������������}|S�)z� Get all packages for giver reseller :param string reseller: Reseller name :rtype: list of strings :return: List of packages names that belongs to given reseller z packages.listc������������������^�����g�|�]*}|�������������������������������������|��������������������������������������+S�r���r2��r����s��� r���r����z6DirectAdmin._get_reseller_packages.<locals>.<listcomp>���s-������L�L�L�A������L�Q�X�X�Z�Z�L�L�Lr���)r����r����r����r���r����r^���)r3���rk���� packages_list�package_pathr����s��� r����_get_reseller_packagesz"DirectAdmin._get_reseller_packages���sf�������� ��w�|�|�D�$5�x��Q�Q�� �7�>�>�,�'�'�� M��.�.�|�<�<�L�L�L��L�L�L�M��r���c����������������������d�}|�������������������������������������D�]n} �|����������������������|������������}n#�t����������$�r}|�|}Y�d�}~�,d�}~ww�xY�wt����������j��������|fd�|d�����������������������������������������������}t ����������|��������������o|�|�d�S�)Nc������������������0�����d����������������������|�||������������S�)Nz{}{} {} )r1���)r�����pkg�ress��� r����<lambda>z5DirectAdmin.list_resellers_packages.<locals>.<lambda>���s������+�2D�2D�V�S�RU�2V�2V��r���r����)r����rH��r����� functools�reducer����rO���)r3���r8����first_exceptionrk����packagesrT���� out_strings��� r���rs���z#DirectAdmin.list_resellers_packages���s����������+�+�-�-�� �� �H� ��6�6�x�@�@������ �� �� �"�*�&'�O���������� �����#�)�(0�V�V�V��������e�g�g� � � � �*������&�!�!��'�&s����0� A�A�Ac������������������p�����t����������d���������������������|����������������������|�������������������������������������d�S�r6��)rO���r����rH��ru���s��� r���rv���z"DirectAdmin.list_reseller_packages���s0������ �d�i�i��3�3�H�=�=�>�>�?�?�?�?�?r���r����r����r����)*r���r���r���r����DA_CONFr4��rA��r7��r����r����r+���r���r��r4���r^���r����r����r��r*��r���r���r��r{���r���r����r��r!��r-��r/��r9���r����rq���rf���rx���ro���ri���rl���r����rH��rs���rv���r����r����s���@r���r ���r ���>��sJ��������������7�L�<�G�B�M�I��J���H��H��J��w�y�y�H�>��>��>��>��>� ,�� ,�� ,�$��$��$� 8&��8&��8&�t/��/��/�'��'�#��'�H�T�RU�Y�DW��'�cf��'��'��'��'�R)��)��)��)�80��0��0��0�8 �� �� �� �")��)��)������<)��)��)�('��'��'��'��������$��$��$� ������� �� �� �� �>��>��>��>���������������������� )�� )�� )� �� �� �"��"��"��"�(@��@��@��@��@��@��@��@r���r ���c�������������������������e�Zd�Zd��ZdS�)�ISPManagerGetPackagesExceptionc������������������<�����t��������������������������������|�|�������������d�S�r����)r����r4���)r3���r����s��� r���r4���z'ISPManagerGetPackagesException.__init__���s���������4��)�)�)�)�)r���N)r���r���r���r4���r���r���r���rV��rV�����s#��������������*��*��*��*��*r���rV��c��������������������p�������e�Zd�ZdZdZdZ��fd�Zd��Zed d���������������Z d d�Z d d �Zd d �Zd d�Z d d�Z��xZS�)r���z!/usr/local/ispmgr/etc/ispmgr.confN� mgrsecurec������������������N�����t����������t����������|�������������������������������������������������t����������j�����������������������t����������j�����������������������������d������������}t����������|d���������������������|�_��������t����������j ����������������������|�_ ��������t����������j����������������������|�_ ��������d�S�)Nr����r���)r����r���r4���r"����getCP� CP_VERSIONr����rQ���� isp_major_ver�ispmanager5_is_master�isp5_is_masterr���r����r2���)r3���� ver_partsr,���s��� �r���r4���zISPManager.__init__���s|������� �j�$���(�(�*�*�*�������%�+�+�C�0�0� � ��1��.�.���$�:�<�<���&�2�4�4����r���c����������� ������������i�}|�j���������dk�����r�t����������j�����������������������������|�j��������������������st����������d|�j��������z��������������� �t ����������|�j��������d�����������������������������������������������}|���������������������d������������}|� ��������������������d�������������|D��]}|�����������������������������������d���������}t����������|�j�����������������������������|� ��������������������dd������������������������������������}|���������������������d������������}|D�]�}|��������������������������������������������������������d ������������rvd ���������������������|����������������������������������������������������������������������dd����������������������}||v�r||���������d z���t#����������|������������z���||<�����t#����������|������������||<�������n�#�t$����������t&����������f$�r,}t����������d |�j���������dt#����������|���������������������������d}~ww�xY�wddl} �|���������������������|�j��������������������j��������} | D�]7} �|�j�����������������������������| ������������}d||<����##�t0����������j��������$�r�Y��4w�xY�wn#�t4����������$�r�Y�nw�xY�w|S�)z� Retrives list of pairs "uid - package" :return: Dictionary: uid -> package_name Example: {512: 'custom', 513: 'test1'} Case 2: (Error): (1, "error message") ����zERROR: Can't read %srX����Accountr����"r����r>����Presetr����r����NzERROR: Can't read z - �default)r]��r����r����r����� ISP4_CONFrV��rY����readr�����poprQ���r+���rM����replacer����r����r����r*���OSError�IOError�grp�getgrnam�ISP5_GRP�gr_memr ���rN����KeyError)r3����dict_uid_package�linesr����rR����line1�pkg_namerT���rm���panel_usersr����s��� r����_get_user_packages_dictz"ISPManager._get_user_packages_dict���s������������"�"��7�>�>�$�.�1�1�� ^�4�5K�d�n�5\�]�]�]� m��T�^�S�1�1�6�6�8�8�����I�.�.��� � �!����!�� F�� F�D��*�*�,�,�q�/�C��d�o�5�5�c�k�k�$��6K�6K�L�L�M�M�C��:�:�d�+�+�D�!%��F��F�� �;�;�=�=�3�3�H�=�=��F�'*�x�x���� � �0C�0C�0E�0E�a�b�b�0I�'J�'J�H�"�&6�6�6�8H��8M�PS�8S�VY�Zb�Vc�Vc�8c� 0�� 5� 5�8;�H� � � 0�� 5�� F� F����W�%�� m�� m�� m�4�4�TX�Tb�Tb�Tb�dg�hi�dj�dj�dj�5k�l�l�l����� m����� �J�J�J� �!�l�l�4�=�9�9�@��'�����D��"�o�5�5�d�;�;��09�(��-�-�� �4������������� ����� �� �� ��� �����sO����E$F0��0G-�'G(�(G-�5#I��H9�8I��9I�I�� I�I�� I�IFc������������������(�����d}t����������|�������������dS�)z� Get reseller name from user's config file :param string uid: uid of user :param bool debug: Do produce debug output or don't :rtype: string :return: reseller name r ��N)rO���)�clsrR���r8���rk���s��� r���r����zISPManager.get_reseller��s��������� �h�����r���c���������������������� �|�������������������������������������}t����������|�����������������������������������������������D�]}t����������|��������������d�S�#�t����������$�r.}t����������|�������������t����������j��������d�������������Y�d�}~d�S�d�}~ww�xY�w�Nr����)rw��r���valuesrO���rV��r?���r����)r3���r8���rr��rh���rT���s��� r���rq���zISPManager.list_packages��s������� �#�;�;�=�=���/�6�6�8�8�9�9�� �� ���g����� �� ��-�� �� �� ��!�H�H�H��H�Q�K�K�K�K�K�K�K�K�K����� ���s����AA�� B�#A>�>Bc����������������������� �|�������������������������������������}|D�]*}t����������t����������|������������dz���||���������z�����������������+d�S�#�t����������$�r.}t����������|�������������t ����������j��������d�������������Y�d�}~d�S�d�}~ww�xY�w)Nr����r�����rw��rO���r*��rV��r?���r�����r3���r8���rr��rR���rT���s��� r���rf���zISPManager.list_all��s������� �#�;�;�=�=��'�� >�� >���c�#�h�h��n�'7��'<�<�=�=�=�=� >�� >��-�� �� �� ��!�H�H�H��H�Q�K�K�K�K�K�K�K�K�K����� ��������AA�� A=�#A8�8A=c������������������0���� �t����������|������������}|������������������������������������}||v�rt����������||����������������������d�S�d�S�#�t����������$�r.}t����������|�������������t ����������j��������d�������������Y�d�}~d�S�d�}~wt����������$�r�t����������d�������������Y�d�S�w�xY�w)Nr����rK���)rQ���rw��rO���rV��r?���r����rL���)r3����s_uidr8���rR���rr��rT���s��� r���ro���zISPManager.list_user_package#��s������� '��e�*�*�C�#�;�;�=�=���&�&�&��&�s�+�,�,�,�,�,��'�&��-�� �� �� ��!�H�H�H��H�Q�K�K�K�K�K�K�K�K�K������� '�� '�� '��%�&�&�&�&�&�&� '���s����<A�� B�#A5�5B�Bc����������������������� �|�������������������������������������}|D�]*}|||���������k����rt����������t����������|��������������������������+d�S�#�t����������$�r.}t����������|�������������t ����������j��������d�������������Y�d�}~d�S�d�}~ww�xY�wr{��r~��)r3���rh���r8���rr��rR���rT���s��� r���ri���z ISPManager.list_users_in_package/��s������� �#�;�;�=�=��'�� $�� $���.�s�3�3�3��#�c�(�(�O�O�O�� $�� $���.�� �� �� ��!�H�H�H��H�Q�K�K�K�K�K�K�K�K�K����� ���r���c������������������ ���� �|�������������������������������������}|D�]:}t����������t����������|������������dz���t����������||���������������������z���dz�����������������;d�S�#�t����������$�r.}t����������|�������������t ����������j��������d�������������Y�d�}~d�S�d�}~ww�xY�w)Nr����z,adminr����r~��r��s��� r���rx���zISPManager.list_users9��s������� �#�;�;�=�=��'�� N�� N���c�#�h�h��n�s�+;�C�+@�'A�'A�A�H�L�M�M�M�M� N�� N��-�� �� �� ��!�H�H�H��H�Q�K�K�K�K�K�K�K�K�K����� ���s����AA�� B �#B�B r����)r���r���r���rg��r+���ro��r4���rw���classmethodr����rq���rf���ro���ri���rx���r����r����s���@r���r���r������s����������������3�I��J��H�5��5��5��5��5�- ��- ��- �^�� �� �� ���[� ��������������� '�� '�� '�� '����������������������r���r���c����������������������������e�Zd�ZdZdZdZdZdZ��fd�Zdd�Z dd �Z dd �Zddede fd �Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdeeee���������eef������������������fd�Zdedefd�Zdedefd�Zdd�Zdd�Z��xZS�)r���zz See following link for information about database: https://github.com/plesk/db-schemas/blob/master/psadb.xml z/etc/psa/.psa.shadow�1�NoneNc������������������������t����������t����������|�������������������������������������������������t����������j����������������������|�_��������d�S�r����)r����r���r4���r���r����r2���r����s��� �r���r4���zPlesk.__init__M��s6������� �e�T���#�#�%�%�%�!�-�/�/����r���c����������������������t�����������j�����������������������������|�j��������������������sdS�t ����������|�j������������������������������������������������������������������������������������������}t����������j��������ddt����������|������������ddd�������������}|� ����������������������������������5�}|���������������������||�������������cd�d�d��������������S�#�1�swxY�w�Y���d�S�) NF� localhostr ���psaT�utf8)�hostr�����passwd�db�use_unicode�charset)�args)r����r����r����� PSA_SHADOWrY���rh��r����r ����MySQLConnectorr*���connect� execute_query)r3����sql�datar���� connectorr���s��� r����fetch_data_from_dbzPlesk.fetch_data_from_dbQ��s��������w�~�~�d�o�.�.�� ��5��d�o�&�&�+�+�-�-�3�3�5�5���,�+�G�47��K�K�E�9=�v�O��O��O� ��� � � � �� 4�B��#�#�C�d�#�3�3� 4�� 4�� 4�� 4�� 4�� 4�� 4�� 4�� 4�� 4�� 4�� 4����� 4�� 4�� 4�� 4�� 4�� 4s����B>�>C�CFc��������������#����p��K����d}|�-d����������������������|������������}|����������������������||g������������}nD|�-d����������������������|������������}|����������������������||g������������}n|����������������������|������������}|D�];\��}}}|p|�j��������}|dk����rdn|}|����������������������||�������������}|r |�|||fV����<dS�)a�� Generate triple with uid, it's package, it's reseller :param bool debug: Do produce debug output or don't :param string reseller_name: filter by this reseller :param string username: filter by this username (ignored if reseller_name set) :rtype: generator of (int, string, string) :return: (uid, package name, reseller name) a��� SELECT sys_user.login, template.name, reseller.login FROM sys_users AS sys_user JOIN hosting AS hosting ON hosting.sys_user_id = sys_user.id JOIN domains AS domain ON hosting.dom_id = domain.id AND domain.webspace_id=0 JOIN clients AS reseller ON domain.vendor_id = reseller.id LEFT JOIN Subscriptions AS subscription ON subscription.object_id = domain.id AND subscription.object_type='domain' LEFT JOIN PlansSubscriptions AS plan ON plan.subscription_id = subscription.id LEFT JOIN Templates AS template ON plan.plan_id = template.id WHERE sys_user.mapped_to IS NULL AND (template.type = 'domain' OR template.type IS NULL) Nz{} AND reseller.login = %sz{} AND sys_user.login = %sr ��r����r��)r1���r���� NO_PACKAGErU���) r3���r8���rz���r<����queryr����rh���rk���rR���s ��� r���r{���zPlesk._get_user_packages[��s����������� ����$�0�7�7��>�>�E��,�,�U�]�O�D�D�F�F� � !�0�7�7��>�>�E��,�,�U�X�J�?�?�F�F��,�,�U�3�3�F�-3�� /�� /�)�X�w���0���G�%��0�0�r�r�h�H��*�*�H�E�*�J�J�C��� /�C�O��G�X�.�.�.�.�� /�� /r���c�����������������������dt����������|�j���������������������z��}|����������������������|������������D�]}t����������|d�����������������������dS�)z� Print packages (exclude reseller's) :param bool debug: Do produce debug output or don't :return: packages names zs SELECT name FROM psa.Templates WHERE owner_id = %(admin_id)s AND type = 'domain'; ��admin_idr���N)�dict�ADMIN_IDr���rO���)r3���r8���r���r����s��� r���rq���zPlesk.list_packages���sZ���������D�M�*�*�*�+�� ��+�+�E�2�2�� �� �D��$�q�'�N�N�N�N� �� r���rR���r8���c������������������F����d}|�j������������������������������t����������|������������������������}|r^d���������������������dgt ����������|������������z��������������}d|z��}|����������������������|t ����������|������������������������}|r|d���������d���������}t����������|dk����rdn|�������������dS�)z� Get reseller name from DB :param string uid: uid of user :param bool debug: Do produce debug output or don't :rtype: string :return: reseller name r����r����z%saJ��SELECT reseller.login FROM sys_users AS sys_user JOIN hosting AS hosting ON hosting.sys_user_id = sys_user.id JOIN domains AS domain ON hosting.dom_id = domain.id JOIN clients AS reseller ON domain.vendor_id = reseller.id WHERE sys_user.login IN (%s)r���r ��N)r+���rP���rQ���r����r����r����tuplerO���)r3���rR���r8���rk���� usernames�format_stringsr���r����s��� r���r����zPlesk.get_reseller���s�����������O�-�-�c�#�h�h�7�7� ��� (� �X�X�t�f�s�9�~�~�&=�>�>�N�0� �3A�A�E���,�,�U�E�)�4D�4D�E�E�F��� (�!�!�9�Q�<�� �H��'�'�b�b�X�6�6�6�6�6r���c�����������������������|�����������������������|�������������}|D�]6\��}}}t����������d���������������������t����������|������������|��������������������������7dS�)z� Print info about user's packages (include resellers) :param bool debug: Do produce debug output or don't :return: pairs "uid package", where uid - unique id of user package - name of user's package r�����{} {}N�r{���rO���r1���r*��)r3���r8���r����rR���rh���r~���s��� r���rf���zPlesk.list_all���s_��������'�'�e�'�4�4��!&�� 5�� 5��S�'�1��'�.�.��S���7�3�3�4�4�4�4� 5�� 5r���c�����������������������|�����������������������|�������������}|D�]7\��}}}t����������d���������������������t����������|������������||��������������������������8dS�)aF�� Print info about user's packages (include resellers) and thouse resellers :param bool debug: Do produce debug output or don't :return: triples "uid,package,reseller", where uid - unique id of user package - name of user's package reseller - name of package's reseller r����z{},{},{}Nr���)r3���r8���r����rR���rh���rk���s��� r���rx���zPlesk.list_users���sg��������'�'�e�'�4�4��(-�� B�� B�$�S�'�8��*�#�#�C��H�H�g�x�@�@�A�A�A�A� B�� Br���c����������������������g�} �|�j������������������������������t����������|������������������������}|D�]8}|����������������������||�������������}|���������������������d��|D�����������������������������9nG#�t ����������j��������$�r}|rt����������|�������������Y�d}~n"d}~wt����������$�r�t����������d�������������Y�nw�xY�w|D�]}t����������|��������������dS�)z� Print all packages for user's uid :param uid: user's unique id :param bool debug: Do produce debug output or don't :return: package name for user's uid )r8���r<���c�����������������������g�|�] }|d������������S�)r����r���r3��s��� r���r����z+Plesk.list_user_package.<locals>.<listcomp>���s������ <� <� <�T��a�� <� <� <r���NrK���) r+���rP���rQ���r{���rB��r ���rN���rO���rL���) r3���rR���r8���rQ���namesr����r����rT���rh���s ��� r���ro���zPlesk.list_user_package���s�������� >��O�-�-�c�#�h�h�7�7�E���� >�� >���0�0�u�t�0�L�L����� <� <�V� <� <� <�=�=�=�=� >�� ��(�� �� �� ��� ��a��������������� '�� '�� '��%�&�&�&�&�&� '����� �� �� �G��'�N�N�N�N� �� s����'A'��'B+�6B�B+�*B+c������������������������dt����������||�j���������������������z��}|����������������������|������������D�]/}t����������|�j�����������������������������|d�����������������������������������0dS�)z� Print all users in package :param package: name of package :param bool debug: Do produce debug output or don't :return: user's uid a��� SELECT t5.login FROM psa.Templates AS t1 JOIN psa.PlansSubscriptions AS t2 ON t2.plan_id = t1.id JOIN psa.Subscriptions AS t3 ON t3.id = t2.subscription_id JOIN psa.domains AS t4 ON t4.id = t3.object_id JOIN psa.hosting AS t6 ON t6.dom_id = t4.id RIGHT JOIN psa.sys_users AS t5 ON t6.sys_user_id = t5.id WHERE t1.name = '%(package)s' AND t1.owner_id = %(admin_id)s AND t1.type = 'domain'; )rh���r���r���N)r���r���r���rO���r+���rM���)r3���rh���r8���r����logins��� r���ri���zPlesk.list_users_in_package���sp������ ���7�T�]�;�;�;� <����,�,�U�3�3�� 5�� 5�E��$�/�)�)�%��(�3�3�4�4�4�4� 5�� 5r���c�����������������������d|z��}|�����������������������|������������}t����������|������������dk����rdS�t����������|d���������d���������������������}dt����������||�������������z��}|�����������������������|������������}|D�]l} �|�j�����������������������������|d���������������������} t ����������t����������| ��������������������������@#�t����������j ��������$�r} |rt ����������| �������������Y�d} ~ �ed} ~ ww�xY�wdS�)z� Print info about users in resellers package :param package: package name :param reseller: name of package's reseller :param bool debug: Do produce debug output or don't :return: users uids zCSELECT id FROM psa.clients WHERE type = 'reseller' AND login = '%s'r����Nr���a��� SELECT t5.login FROM psa.Templates AS t1 JOIN psa.PlansSubscriptions AS t2 ON t2.plan_id = t1.id JOIN psa.Subscriptions AS t3 ON t3.id = t2.subscription_id JOIN psa.domains AS t4 ON t4.id = t3.object_id JOIN psa.hosting AS t6 ON t6.dom_id = t4.id RIGHT JOIN psa.sys_users AS t5 ON t6.sys_user_id = t5.id WHERE t1.type = 'domain' AND t1.name = '%(package)s' AND t1.owner_id = '%(reseller_id)s'; )rh����reseller_id) r���r����rQ���r���r+���rM���rO���r*��r ���rN���)r3���rh���rk���r8����reseller_queryr���r���r����r�����luidrT���s��� r���rl���z$Plesk.list_users_in_reseller_package���s������c�em�m���-�-�n�=�=���{���q� � ��F��+�a�.��+�,�,�� ���7��<�<�<� =����(�(��/�/���� !�� !�D� !���.�.�t�A�w�7�7�� ��c�$�i�i� � � � �� ��,�� �� �� �����!�H�H�H���������� ���� !�� !s����9 B6�6C �C�C c������������������������dt����������|�j���������������������z��}|����������������������|������������D�]C}|d���������}|d���������dk����rdn|d���������}t����������d���������������������||��������������������������DdS�) z� Print list of resellers packages :param bool debug: Do produce debug output or don't :return: pairs "reseller package", where package - package name reseller - package's reseller z�SELECT t2.login, t1.name FROM (SELECT name, owner_id, type FROM psa.Templates) AS t1 JOIN psa.clients AS t2 ON t1.owner_id = t2.id WHERE t1.owner_id != %(admin_id)s AND t1.type = 'domain';r���r����r���r ���rootr���N)r���r���r���rO���r1���)r3���r8���r���r����rh���rk���s��� r���rs���zPlesk.list_resellers_packages��s�������E��HL�UY�Ub�Gc�Gc�Gc�d����+�+�E�2�2�� 5�� 5�D��1�g�G�!%�a��G�!3�!3�v�v��a��H��'�.�.��7�3�3�4�4�4�4� 5�� 5r���r ��c������������������������g�}d}|�����������������������|������������D�]M}|d���������}|d���������dk����rdn|d���������}|d���������}|���������������������||t����������|������������f��������������N|S�)z� Return list of non-reseller packages with the plesk DB id [(reseller, package, plesk_id), (None, package, plesk_id)] z�SELECT t2.login, t1.name, t1.id FROM (SELECT id, name, owner_id, type FROM psa.Templates) AS t1 JOIN psa.clients AS t2 ON t1.owner_id = t2.id WHERE t1.type = 'domain';r����r���r ��r�������)r����appendrQ���)r3���rL��r���r����rh���rk����_ids��� r����list_domain_packages_with_idz"Plesk.list_domain_packages_with_id-��s������� ���%����+�+�E�2�2�� 6�� 6�D��1�g�G�!%�a��G�!3�!3�v�v��a��H��q�'�C��J�J��'�3�s�8�8�4�5�5�5�5�� r���� package_idc������������������P�����d}|�����������������������||f������������}|d���������d���������S�)z8 Return package name by the plesk DB id z7SELECT id, name, type FROM psa.Templates WHERE id = %s;r���r�����r���)r3���r���r���r���s��� r����$get_package_name_by_id_from_plesk_dbz*Plesk.get_package_name_by_id_from_plesk_db>��s/�������J���&�&�u�z�m�<�<���A�w�q�z�r����package_namec������������������P�����d}|�����������������������||f������������}|d���������d���������S�)z8 Return package id by the plesk DB name z9SELECT id, name, type FROM psa.Templates WHERE name = %s;r���r���)r3���r���r���r���s��� r����$get_package_id_by_name_from_plesk_dbz*Plesk.get_package_id_by_name_from_plesk_dbF��s/�������L���&�&�u�|�o�>�>���A�w�q�z�r���c������������������������|dk����rd}t����������j��������d|������������sdS�dt����������||�j���������������������z��}|����������������������|������������D�]}t����������|d�����������������������dS�)z� Print list reseller's packages :param reseller: name of reseller :param bool debug: Do produce debug output or don't :return: packages names r���r ��z^[\w_]*$Nz�SELECT t1.name FROM (SELECT name, owner_id, type FROM psa.Templates) as t1 JOIN psa.clients as t2 ON t1.owner_id = t2.id AND t2.login = '%(reseller)s' WHERE t1.type = 'domain' AND t1.owner_id != %(admin_id)s;)rk���r���r���)r����r����r���r���r���rO���)r3���rk���r8���r���r����s��� r���rv���zPlesk.list_reseller_packagesN��s���������v����H��x��X�.�.�� ��4�E��HL�U]�hl�hu�Gv�Gv�Gv�w����+�+�E�2�2�� �� �D��$�q�'�N�N�N�N� �� r���c�����������������������dgS�)Nr ��r���r7���s��� r���r9���zPlesk.list_adminsb��s �������y�r���r����)FNNr����)r���r���r���r���r���r���r���r+���r4���r���r{���rq���r*���boolr����rf���rx���ro���ri���rl���rs���r���r���r���rQ���r���r���r���rv���r9���r����r����s���@r���r���r���C��s�������������������(�J��H��J��J�0��0��0��0��0�4��4��4��4�&/��&/��&/��&/�P�������"7��7���7�D��7��7��7��7�.5��5��5��5�B��B��B��B��������25��5��5��5�.!!��!!��!!��!!�F5��5��5��5�&�d�5��#���S�9P�3Q�.R���������"�s���s�����������������������������(��������������r���r���c�������������������������e�Zd�Zd��ZdS�)r���c������������������p�����|rt�����������j�����������������������������d�������������t����������j��������d�������������d�S�)Nz"Doesn't support InterWorx anymore r���)r?���r@���rA���r����rB���s��� r���rD���zInterWorx._warningg��s3�������� D��J���B�C�C�C��������r���N�r���r���r���rD���r���r���r���r���r���f��s#����������������������r���r���c�������������������������e�Zd�Zd��ZdS�)r&���c������������������&�����t����������d|z���������������)Nz'%s wasn't implemented for Unknown panel��NotImplementedErrorrB���s��� r���rD���zUnknown._warningn��s������!�"K�k�"Y�Z�Z�Zr���Nr���r���r���r���r&���r&���m��s(��������������[��[��[��[��[r���r&���c�������������������������e�Zd�Zd��ZdS�)r!���c������������������&�����t����������d|z���������������)Nz)%s wasn't implemented for HostingNG panelr���rB���s��� r���rD���zHostingNG._warnings��s������!�"M�P[�"[�\�\�\r���Nr���r���r���r���r!���r!���r��s(��������������]��]��]��]��]r���r!���)*� __future__r���r����builtinsr���r����r����r?���rF���rN���typingr���r���r����clcommonr ���r ����clcommon.clprocr����clcommon.utilsr����clcommon.cpapi.pluginsr ���r���r���r����cldetectlibr"���r����r����r���r'����objectr)���r%���r ���rV��r���r���r���r&���r!���r���r���r����<module>r������s�����&��%��%��%��%��%��&��&��&��&��&��&�������������� � � � �� � � � �� � � � �� � � � ����������(��(��(��(��(��(��(��(��(��(��%��%��%��%��%��%��%��%��#��#��#��#��#��#��������������I��I��I��I��I��I��I��I��I��I��I��I������������ �� �� �� �� �i�� �� �� ������$x4��x4��x4��x4��x4�6��x4��x4��x4�vG>��G>��G>��G>��G>�\��G>��G>��G>�TA@��A@��A@��A@��A@�,��A@��A@��A@�H*��*��*��*��*�Y��*��*��*� y��y��y��y��y���y��y��y�x`��`��`��`��`�L��`��`��`�F ����������������[��[��[��[��[�l��[��[��[� ]��]��]��]��]���]��]��]��]��]r���