%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/imunify360/venv/lib64/python3.8/site-packages/defence360agent/simple_rpc/
Upload File :
Create Path :
Current File : //opt/imunify360/venv/lib64/python3.8/site-packages/defence360agent/simple_rpc/schema.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 cerberus.errors import BaseErrorHandler, BasicErrorHandler

from defence360agent.contracts.config import UserType
from defence360agent.rpc_tools.middleware import (
    add_eula,
    add_license,
    add_license_user,
    add_malicious_count,
    add_version,
    counts,
    default_to_items,
    max_count,
    preserve_remote_addr,
    send_command_invoke_message,
)
from defence360agent.rpc_tools.utils import prepare_schema


class ErrorHandler(BaseErrorHandler):
    messages = BasicErrorHandler.messages.copy()

    def collect_errors(self, error):
        if error.child_errors:
            for err in error.child_errors:
                yield from self.collect_errors(err)
        else:
            # avoid abstract error: required field
            yield "field: '{}', value: '{}', error: {}".format(
                error.field, error.value,
                self.messages.get(error.code, "").format(
                    *error.info, constraint=error.constraint,
                    field=error.field, value=error.value))

    def __call__(self, errors):
        string_representation = []
        for error in errors:
            for info in self.collect_errors(error):
                string_representation.append(info)

        return string_representation


def init_validator(schema_validator, validate_middleware, schema_paths):
    _validator = schema_validator(
        prepare_schema(schema_paths),
        error_handler=ErrorHandler)

    # NOTE: it is processed in the reversed order, see _apply_middleware
    _middleware = {
        None: [
            (send_command_invoke_message, (UserType.ROOT, UserType.NON_ROOT)),

            # validation before processing the data
            (
                validate_middleware(_validator),
                (UserType.ROOT, UserType.NON_ROOT)
            ),

            # inject license for root
            (add_license, (UserType.ROOT,)),

            # inject license for regular user
            (add_license_user, (UserType.NON_ROOT,)),

            # inject eula
            (add_eula, (UserType.ROOT,)),

            # inject version
            (add_version, (UserType.ROOT, UserType.NON_ROOT)),

            # for backward compatibility
            (default_to_items, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('malware', 'ignore', 'list'): [
            # need for backward compatibility
            # convert result -> tuple (max_items, items) ->
            # dict {max_items:<int>, items:[...]}
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('whitelist', 'ip', 'list'): [
            (counts, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('blacklist', 'ip', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('graylist', 'ip', 'list'): [
            (counts, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('whitelist', 'ip', 'add'): [
            (preserve_remote_addr, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('blacklist', 'ip', 'add'): [
            (preserve_remote_addr, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('whitelist', 'country', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('blacklist', 'country', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('graylist', 'country', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('blacklist',): [
            (counts, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('malware', 'malicious', 'list'): [
            (add_malicious_count, (UserType.ROOT, UserType.NON_ROOT)),
            (max_count, (UserType.ROOT, UserType.NON_ROOT)),
        ],
        ('malware', 'history', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('malware', 'user', 'list'): [
            (add_malicious_count, (UserType.ROOT, UserType.NON_ROOT)),
            (max_count, (UserType.ROOT, UserType.NON_ROOT)),
        ],
        ('malware', 'suspicious', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('malware', 'on-demand', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('malware', 'on-demand', 'list-user'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('whitelisted-crawlers', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],

        ('blocked-port', 'list'): [
            (counts, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('blocked-port-ip', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('rules', 'list-disabled'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('proactive', 'ignore', 'list'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('feature-management', 'show'): [
            (max_count, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('ip-list', 'synced'): [
            (counts, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('ip-list', 'local', 'list'): [
            (counts, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('ip-list', 'local', 'add'): [
            (preserve_remote_addr, (UserType.ROOT, UserType.NON_ROOT))
        ],
        ('ip-list', 'local', 'delete'): [
            (preserve_remote_addr, (UserType.ROOT, UserType.NON_ROOT))
        ],
    }

    _middleware_exclude = {
        ('enable-plugin', ): [
            add_eula
        ],
        ('disable-plugin', ): [
            add_eula
        ],
        ('install-vendors', ): [
            add_eula
        ],
        ('uninstall-vendors', ): [
            add_eula
        ],
        ('add-sudouser', ): [
            add_eula
        ],
        ('delete-sudouser', ): [
            add_eula
        ],
        ('doctor', ): [
            add_eula
        ],
        ('captcha', 'update-localizations'): [
            add_eula
        ],
        ('captcha', 'compile-localizations'): [
            add_eula
        ],
        ('update', ): [
            add_eula
        ],
        ('kcarectl', 'disable-auto-update'): [
            add_eula
        ],
        ('kcarectl', 'enable-auto-update'): [
            add_eula
        ],
        ('kcarectl', 'plugin-info'): [
            add_eula
        ],
        ('register', ): [
            add_eula
        ],
        ('unregister', ): [
            add_eula
        ],
        ('rstatus', ): [
            add_eula
        ],
        ('update-license', ): [
            add_eula
        ],
        ('3rdparty', 'list'): [
            add_eula
        ],
        ('admin-emails', ): [
            add_eula
        ],
        ('list-docroots',): [
            add_eula
        ],
        ('features', 'list'): [
            add_eula
        ],
        ('features', 'status'): [
            add_eula
        ],
        ('features', 'install'): [
            add_eula
        ],
        ('features', 'remove'): [
            add_eula
        ],
        ('feature-management', 'native', 'enable'): [
            add_eula
        ],
        ('feature-management', 'native', 'disable'): [
            add_eula
        ],
        ('feature-management', 'native', 'status'): [
            add_eula
        ],
        ('rules', 'update-app-specific-rules'): [
            add_eula
        ],
        ('support', 'send'): [
            add_eula
        ],
        ('3rdparty', 'conflicts'): [
            add_eula
        ],
        ('smtp-blocking', 'reset'): [
            add_eula
        ],
        ('smtp-blocking', 'sync'): [
            add_eula
        ],
        ('malware', 'on-demand', 'check-detached'): [
            add_eula
        ],
        ('checkdb', ): [
            add_eula
        ],
        ('restore-configs', ): [
            add_eula
        ],
    }

    return _validator, _middleware, _middleware_exclude

Zerion Mini Shell 1.0