%PDF- %PDF-
Direktori : /opt/imunify360/venv/lib64/python3.8/site-packages/defence360agent/feature_management/ |
Current File : //opt/imunify360/venv/lib64/python3.8/site-packages/defence360agent/feature_management/checkers.py |
""" This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Copyright © 2019 Cloud Linux Software Inc. This software is also available under ImunifyAV commercial license, see <https://www.imunify360.com/legal/eula> """ from typing import List from copy import deepcopy from .exceptions import FeatureDisabledError from .constants import CONFIG_MAPPINGS from .model import FeatureManagementPerms def check_feature(feature: str, permissions: List[str], user: str): """ Raise exception if feature is disabled for user :param feature: feature name :param permissions: permissions required :param user: user name :return: None :raises FeatureDisabledError: if user is prohibited from use of the feature """ if user is None: return perm = FeatureManagementPerms.get_perm(user) permission_value = perm.get_feature(feature) if permission_value not in permissions: raise FeatureDisabledError("Feature '{name}' is disabled for user " "'{user}'".format(name=feature, user=user)) def check_config(feature: str, user: str, section: str, raise_=False): """ Check if section is allowed to be read or write by user :param feature: feature name :param user: user name :param section: section name to check :param raise_: True to raise exception, otherwise return True or False :return: True if config sections is allowed to user, False otherwise :raises FeatureDisabledError: raised if raise_=True """ if user is None: return True if feature not in CONFIG_MAPPINGS: return True if section not in CONFIG_MAPPINGS[feature]: return True try: check_feature(feature, CONFIG_MAPPINGS[feature][section], user) except FeatureDisabledError: if raise_: raise return False return True def config_cleanup(data: dict, user: str = None) -> dict: """ Remove prohibited sections from user config :param data: config data :param user: user name :return: new config data """ new_data = deepcopy(data) for feature in CONFIG_MAPPINGS: for section in data: if not check_config(feature, user, section): del new_data[section] return new_data def config_validation(data: dict, user: str): """ Raise exception if user is making changes on prohibited sections of config :param data: config data :param user: user name :return: None :raises FeatureDisabledError: if user is prohibited """ for feature in CONFIG_MAPPINGS: for section in data: check_config(feature, user, section, raise_=True)