in modular_api_cli/modular_handler/policy_handler.py [0:0]
def add_policy_handler(self, policy: str, policy_path: str) -> CommandResponse:
"""
Add policy to ModularPolicy table
:param policy: Policy name
:param policy_path: Path to file which contains allowed/denied actions
:return: CommandResponse
"""
_LOG.info(f'Going to add policy named \'{policy}\' from \'{policy_path}\'')
existing_policy = self.policy_service.describe_policy(
policy_name=policy
)
if existing_policy:
if existing_policy.state == REMOVED_STATE:
_LOG.error('Policy already exists')
raise ModularApiBadRequestException(
f'Policy with name \'{policy}\' already exists and marked as '
f'\'{REMOVED_STATE}\'.')
elif existing_policy.state == ACTIVATED_STATE:
_LOG.error('Policy already exists')
raise ModularApiBadRequestException(
f'Policy with name \'{policy}\' already exists. Please '
f'change name to another one or update existing '
f'\'{policy}\' policy with new permissions by command:'
f'{line_sep}modular policy update --policy {policy} '
f'--policy_path {policy_path}\'')
_LOG.error('Policy already exists')
raise ModularApiConflictException(
f'Policy with name \'{policy}\' already exists with invalid '
f'\'{existing_policy.state}\' state')
policy_content = open_json_file(file_path=policy_path)
policy_validation(policy_content=policy_content)
policy_item = self.policy_service.create_policy_entity(
policy_name=policy,
policy_content=policy_content
)
policy_hash_sum = self.policy_service.calculate_policy_hash(
policy_item=policy_item
)
policy_item.hash = policy_hash_sum
self.policy_service.save_policy(policy_item=policy_item)
_LOG.info('Policy successfully added')
return CommandResponse(
message=f'Policy with name \'{policy}\' successfully added')