OwlCyberSecurity - MANAGER
Edit File: lve_storage.cpython-311.pyc
� ������h|A�����������������������(����d�dl�mZ�d�dlmZmZmZmZmZmZ�d�dl m Z �d�dlmZm Z �d�dlmZmZmZmZmZ�d�dlmZmZmZmZmZ��edg�d�������������Z�ed g�d �������������Z�edg�d�������������Z�ed ddg������������ZdZdZdZ dZ!dZ"dZ#�G�d��d������������Z$dS�)�����)� namedtuple)�Dict�Iterator�List�Optional�Tuple�Union)�ClPwd)�NotSupported� resellers)�DEFAULT_PROVIDER�EMPTY_LIMITS�InheritedLimits�Limits�XmlConfigReader)�DEFAULT_PACKAGE�LVE_DEFAULT�LVP_DEFAULT�panelpackagesdict�paneluserslist�Package��name�provider�limits�Reseller�r����defaultsr����User��id�packager����reseller� is_panel_user� IneritedLimit�value�source�DEFAULTS�ownr"���r#����global�builtinc������������������������e�Zd�ZdZ�eedd�������������Z�eeed�������������Z dd�Z ed����������������Zd��Z ed����������������Zd ��Zd ��Zd��Zd��Zed ����������������Zed����������������Zed����������������Zed����������������Zd��Zd��Zd��Zd��Zd��Zd��ZdS�)�LimitsDataStoragea��� This class is designed to merge data from xml config & control panel and provide user-friendy interface to work with lve limits (packages, resellers, defaults) What this class can do: - process information from xml config and control panel - re-pack structures for easy data access What this class should not do: - set limits in kernel - know anything about kernel limits Nr���r���c�����������������������t������������������������|�_��������|p t������������������������|�_��������d�|�_��������d�|�_��������d�|�_��������d�|�_��������d�|�_��������d�S��N) r ����_pwdr����_xml_source�_panel_resellers_list� _packages�_users� _resellers� _defaults)�self�_xml_config_readers��� �Q/opt/cloudlinux/venv/lib64/python3.11/site-packages/cllimitslib_v2/lve_storage.py�__init__zLimitsDataStorage.__init__@���sH�������G�G�� �-�B��1B�1B���%)��"�������������������c������������������(�����|�dk����rd}�n|�dk����rd}�|�S�)z2 Convert mem to vmem and reversed �vmem�mem��)� limit_names��� r9����_limit_name_convertz%LimitsDataStorage._limit_name_convertI���s,������������J�J� �5� � ��J��r;���c������������������v�����|�j����������, �t������������������������|�_���������n#�t����������$�r �g�|�_���������Y�nw�xY�w|�j���������S�)z� Get list of names of panel resellers. If cpapi panel plugin don't support that method, we return empty list )r2���r���r����r7���s��� r9����_get_panel_resellersz&LimitsDataStorage._get_panel_resellersW���sS��������%�-� 0�-6�[�[��*�*���� 0�� 0�� 0�-/��*�*�*� 0�����)�)s������1�1c�����������������������|�j���������duS�)z@ Not activated reseller doesn't have any limits N)r���)r#���s��� r9����_is_active_resellerz%LimitsDataStorage._is_active_resellerf���s�������� ��,�,r;���c��������������#����J���K����|�j��������������������������������������������D�]}|V����d�S�r/���)r1���� users_lve_ids�r7����uids��� r9����_list_uids_from_ve_cfgz(LimitsDataStorage._list_uids_from_ve_cfgn���s9�����������#�1�1�3�3�� �� �C��I�I�I�I� �� r;���c�����������������������||�j���������v�r |�j���������|���������S�t����������||�j��������|�j�����������������������������|������������|�j��������d�������������S�)ax�� This method will return User by uid. If we will pass uid of nonexistent user, method return User without any limits, with with DEFAULT_RESELLER_OBJ and with DEFAULT_PKG_OBJ. This trick is needed for validating of limits for nonexistent user in case of migrating limits and entities from another server. Fr ���)�usersr����DEFAULT_PKG_OBJr1����get_user_limits�DEFAULT_RESELLER_OBJrI���s��� r9����get_user_by_uidz!LimitsDataStorage.get_user_by_uids���sZ��������$�*����:�c�?�"����(��#�3�3�C�8�8��.�� �� �� �� r;���c������������������������||f|�j���������v�r|�j���������||f���������S�t����������|f|�j���������v�r|�j���������t����������|f���������S�t����������||�j��������|�j�����������������������������|t�����������������������������������S�)a'�� This method is needed because of lvectl bug "by design" our api designed only for situations when user's owner is the owner of the package that contains that user but sometimes user can be in admin's package. We will return entity Package without any limits and with DEFAULT_RESELLER_OBJ if we request name of nonexistent package. This trick is needed for validating of limits for nonexistent package in case of migrating limits and entities from another server r���)�packagesr ���r���rP���r1����get_package_limits)r7���r���r#���s��� r9���� get_package_by_name_and_resellerz2LimitsDataStorage.get_package_by_name_and_reseller����s�������� �d��t�}�,�,��=�(�D�!1�2�2��d�#�t�}�4�4��=�!1�4�!7�8�8����.��#�6�6�� ���� �� �� �� r;���c������������������<�����||�j���������v�r |�j���������|���������S�|�j��������S�r/���)r���rP����r7���r���s��� r9����get_reseller_by_namez&LimitsDataStorage.get_reseller_by_name����s%�������4�>�!�!��>�$�'�'��(�(r;���c������������������������|�j����������fi�|�_���������|������������������������������������D�]$}|�j�����������������������������|������������|�j���������|<����%|�j�������������������������������������������|�j���������t ����������<���|�j���������S�r/���)r6���rD���r1����get_reseller_default_limitsr���r(���rW���s��� r9���r���zLimitsDataStorage.defaults����st��������>�!��D�N��1�1�3�3�� Z�� Z��'+�'7�'S�'S�TX�'Y�'Y���t�$�$�'+�'7�'@�'@�'B�'B�D�N�8�$��~�r;���c����������� �����������|�j����������zi�|�_���������t�����������������������������������������������������������D�]R\��}}|D�]J}t����������||����������������������|������������|�j�����������������������������||�������������������������|�j���������||f<����K�S|�j���������S�)Nr���)r3���r����itemsr���rX���r1���rT���)r7���r����provider_packages�package_names��� r9���rS���zLimitsDataStorage.packages����s���������>�!��D�N�/@�/B�/B�/H�/H�/J�/J�� �� �+��+�$5�����L�?F�)�!%�!:�!:�8�!D�!D�#�/�B�B�(�$� �� �@��@��@�D�N�H�l�#;�<�<����~�r;���c����������� ������������|�j�����������i�|�_���������t������������������������D�]a\��}}}t����������||����������������������|������������|����������������������||������������|�j�����������������������������|������������d�������������|�j���������|<����b|������������������������������������D�]I}||�j���������vr>t����������||�j��������|�j�����������������������������|������������|�j ��������d�������������|�j���������|<����J|�j���������S�)NT)r!���r#���r"���r���r$���Fr ���) r4���r���r���rX���rU���r1���rO���rK���rN���rP���)r7���rJ���r#���r"���s��� r9���rM���zLimitsDataStorage.users����s�������;���D�K�*8�*:�*:�� �� �&��X�w�#'��!�6�6�x�@�@� �A�A�'�8�T�T��+�;�;�C�@�@�"&�$��$��$���C� � ���2�2�4�4�� �� ���d�k�)�)�'+�� $� 4�#�/�?�?��D�D�!%�!:�&+�(��(��(�D�K��$����{�r;���c������������������������|�j����������hi�|�_���������|������������������������������������D�]L}t����������||�j�����������������������������|������������|�j�����������������������������|�������������������������|�j���������|<����M|�j���������S�)Nr���)r5���rD���r���r1���rZ����get_reseller_limits)r7���� reseller_names��� r9���r���zLimitsDataStorage.resellers����s���������?�"� �D�O�!%�!:�!:�!<�!<�� �� � �19�&�!�-�I�I�-�X�X��+�?�?� �N�N�2��2��2��� �.�.� ���r;���c������������������H�����d��|�j��������������������������������������������D���������������S�)Nc������������������H�����i�|�]\��}}|j����������|j���������t����������k�����||�� S�r/���)r���r���)�.0�keyr"���s��� r9���� <dictcomp>zELimitsDataStorage.get_packages_with_custom_limits.<locals>.<dictcomp>����s<������� �� �� �)�S�'��~�)�g�n��.L�.L�� ��.L�.L�.Lr;���)rS���r\���rC���s��� r9����get_packages_with_custom_limitsz1LimitsDataStorage.get_packages_with_custom_limits����s1������ �� �-1�]�-@�-@�-B�-B� �� �� �� r;���c������������������H�����d��|�j��������������������������������������������D���������������S�)Nc������������������V�����i�|�]&\��}}|j����������|j���������t����������k�����|j���������#||��'S�r/���)r���r���r$���)re���rJ����users��� r9���rg���zBLimitsDataStorage.get_users_with_custom_limits.<locals>.<dictcomp>����sD������� �� �� �#�#�t��{�&�4�;�,�+F�+F�4�K]�+F�� ��+F�+F�+Fr;���)rM���r\���rC���s��� r9����get_users_with_custom_limitsz.LimitsDataStorage.get_users_with_custom_limits����s1������ �� �'+�z�'7�'7�'9�'9� �� �� �� r;���c������������������\����|j���������j��������}|�j��������t�������������������}|j��������pt���������������������������������������������}|�����������������������������������D�]�\��}}|��t����������||d������������}t����������||d������������}t����������|�� ��������������������|���������������������} |�t����������|t�����������������������||<����e|�4|����������������������|j���������������������st����������|t�����������������������||<�����t����������| t�����������������������||<�����t����������|t�����������������������||<�����t!����������di�|��S�)zA Method will return inherited limits for package N�r&���r'���r?���)r���r���r(���r���r����_asdictr\����getattrr���rA����InheritedLimit�RESELLER_SOURCErF���� GLOBAL_SOURCE�BUILTIN_SOURCE� OWN_SOURCEr���) r7���r"����reseller_defaults�global_defaults�package_own_limitsrf���r&����reseller_default_value�global_default_value�builtin_default_values ��� r9���rT���z$LimitsDataStorage.get_package_limits����sc������$�,�5���-��1��%�n�<��E�E�G�G��,�2�2�4�4�� �� �J�C���}�)0�1B�C��)N�)N�&�'.���T�'J�'J�$�(3�D�4L�4L�S�4Q�4Q�(R�%�)�5�.<�4�.�/��/��/�&�s�+�+��*�5�d�>V�>V�W^�Wg�>h�>h�5�.<�2�,�/��/��/�&�s�+�+� �/=�3�-�/��/��/�&�s�+�+� �+9��%�+��+��+�"�3�'�'���4�4�!3�4�4�4r;���c�����������������������|�j���������t�������������������}|j��������j���������}|j��������j��������}|j��������pt ���������������������������������������������}|�����������������������������������D�]�\��}}|��t����������||d������������}t����������||d������������} t����������||d������������} t����������|�� ��������������������|���������������������}|�t����������|t�����������������������||<����v| �t����������| t�����������������������||<�����| �4|����������������������|j��������������������st����������| t�����������������������||<�����t����������|t �����������������������||<�����t����������|t"�����������������������||<�����t%����������di�|��S�)z> Method will return inherited limits for user Nrn���r?���)r���r(���r#���r"���r���r���ro���r\���rp���r���rA���rq����PACKAGE_SOURCErr���rF���rs���rt���ru���r���)r7���rk���rw���rv����package_limits�user_limitsrf���r&���� package_valuery���rz���r{���s��� r9���rO���z!LimitsDataStorage.get_user_limits"��s��������-��1�� �M�2����,���{�2�l�;�;�=�=��%�+�+�-�-��" ��" �J�C���}� '���T� B� B� �)0�1B�C��)N�)N�&�'.���T�'J�'J�$�(3�D�4L�4L�S�4Q�4Q�(R�%� �,�'5�+�-�(��(��(�K��$�$��,�7�'5�4�.�(��(��(�K��$�$��*�5�d�>V�>V�W[�Wd�>e�>e�5�'5�2�,�(��(��(�K��$�$� �(6�3�-�(��(��(�K��$�$� �$2��%�$��$��$��C� � ���-�-��-�-�-r;���c����������� �������t����|�����������������������|�������������st����������t����������t����������d���������t�����������������������t����������t����������d���������t�����������������������t����������t����������d���������t�����������������������t����������t����������d���������t�����������������������t����������t����������d���������t�����������������������t����������t����������d���������t�����������������������t����������t����������d���������t�����������������������t����������t����������d ���������t������������������������ ������������S�|j�������������������������������������������}|�����������������������������������D�]Z\��}}|�:t����������|����������������������|���������������������}t����������|t�����������������������||<����At����������|t�����������������������||<����[t����������di�|��S�) z� Method will return limits equal builtin for non-activated reseller and inherited limits for activated reseller �cpurn����ncpu�ior>����pmem�nproc�ep�iops)r����r����r����r=���r����r����r����r����Nr?���) rF���r���rq���r���rt���r���ro���r\���rA���ru���)r7���r#����reseller_limitsrf���r&���r{���s��� r9���ra���z%LimitsDataStorage.get_reseller_limitsQ��s��������'�'��1�1��" �"�"�%�e�,�)�������$�%�f�-�)�������"�%�d�+�)�������$�%�e�,�)�������$�%�f�-�)�������%�%�g�.�)�������"�%�d�+�)�������$�%�f�-�)������;!��!��!��! �F�#�/�1�1�3�3��)�/�/�1�1�� �� �J�C���}�(3�D�4L�4L�S�4Q�4Q�(R�%�'5�/�)�(��(��(���$�$� �(6��%�(��(��(���$�$���1�1��1�1�1r;���c�����������������������|�j���������t�������������������}|t����������k����r|�����������������������������������}nK|����������������������|������������st ����������di�t����������j������������������������S�|j��������������������������������������������}|�����������������������������������D�]Z\��}}|�:t����������|����������������������|���������������������}t����������|t�����������������������||<����At����������|t�����������������������||<����[t ����������di�|��S�)z� Method will return empty inherited defaults limits for non-activated reseller or inherited defaults limits for activated reseller. For global defaults method will return inherited limits Nrn���r?���)r���r(���ro���rF���r���r���r\���r���rA���rq���rt���ru���)r7���r#���rw���rv���rf���r&���r{���s��� r9����get_defaults_limitsz%LimitsDataStorage.get_defaults_limits���s�������-��1���x��� /� 7� 7� 9� 9�����+�+�H�5�5�� A�&�@�@��)=�)?�)?�@�@�@� (� 1� 9� 9� ;� ;��+�1�1�3�3�� �� �J�C���}�(3�D�4L�4L�S�4Q�4Q�(R�%�)7�/�)�*��*��*�!�#�&�&� �*8��%�*��*��*�!�#�&�&���3�3�!2�3�3�3r;���r/���)�__name__� __module__�__qualname__�__doc__r���r ���rP���r���r���rN���r:����staticmethodrA���rD���rF���rK���rQ���rU���rX����propertyr���rS���rM���r���rh���rl���rT���rO���ra���r����r?���r;���r9���r-���r-��� ���s����������������� �$�8� �����������g� �%�������O���������������\�� *�� *�� *���-��-���\�-������ �� �� �, �� �� �6)��)��)��������X���������X�� �������X��0�� �� ���X� � �� �� � �� �� �&5��&5��&5�P-.��-.��-.�^;2��;2��;2�z4��4��4��4��4r;���r-���N)%�collectionsr����typingr���r���r���r���r���r ����clcommonr ����clcommon.cpapir���r���� clveconfigr ���r���r���r���r���� lvectllibr���r���r���r���r���r���r���r���rq���r(���ru���r}���rr���rs���rt���r-���r?���r;���r9����<module>r�������s������#��"��"��"��"��"��?��?��?��?��?��?��?��?��?��?��?��?��?��?��?��?��������������2��2��2��2��2��2��2��2��_��_��_��_��_��_��_��_��_��_��_��_��_��_��b��b��b��b��b��b��b��b��b��b��b��b��b��b� �*�Y� >� >� >� ?� ?���:�j�"@�"@�"@�A�A���z�&�R�R�R�S�S����O�g�x�-@�A�A������� ������ ���K4��K4��K4��K4��K4��K4��K4��K4��K4��K4r;���