class UsageCommand(Command): def __init__(self): self.params = None def initialize(self): if self.params is None: '[-] Error: chori is not a valid command' self.params = Parameter() for cmd in cmd_manager.cmds: self.params.add_parameter(cmd, Parameter(lambda __, _, cmd=cmd: output_manager.normal(' {0}'.format(cmd_manager.cmds[cmd].usage(cmd))).line_break())) def blah(self, data): output_manager.normal(' {0}'.format(data)).line_break() def execute(self, mole, params): self.initialize() self.params.execute(mole, params) def parameters(self, mole, current_params): self.initialize() return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' <CMD_NAME>'
class UsageCommand(Command): def __init__(self): self.params = None def initialize(self): if self.params is None: '[-] Error: chori is not a valid command' self.params = Parameter() for cmd in cmd_manager.cmds: self.params.add_parameter( cmd, Parameter(lambda __, _, cmd=cmd: output_manager.normal( ' {0}'.format(cmd_manager.cmds[cmd].usage(cmd))). line_break())) def blah(self, data): output_manager.normal(' {0}'.format(data)).line_break() def execute(self, mole, params): self.initialize() self.params.execute(mole, params) def parameters(self, mole, current_params): self.initialize() return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' <CMD_NAME>'
def __import_filters(self, mole, filter_manager, filters): for filter_node in filters: name = b64decode(filter_node.get('name').encode()).decode() init_params = loads(b64decode(filter_node.get('init_params').encode())) filter_object = filter_manager.add_filter(name, init_params) configurator = Parameter() configurator.set_param_generator(lambda mole, _: filter_object.configuration_parameters()) for config_node in filter_node: config_params = loads(b64decode(config_node.get('config_params').encode())) configurator.execute(mole, config_params)
class BaseFilterCommand(Command): def __init__(self, functor): self.functor = functor self.params = Parameter(lambda mole, _: self.print_filters(mole)) add_param = Parameter() add_param.set_param_generator( lambda mole, _: self.generate_add_filters(mole)) del_param = Parameter() del_param.set_param_generator( lambda mole, _: self.generate_del_filters(mole)) self.params.add_parameter('add', add_param) self.params.add_parameter('del', del_param) def generate_add_filters(self, mole): ret = {} for i in self.functor(mole).available_filters(): ret[i] = Parameter( lambda mole, params, i=i: self.add_filter(mole, i, params)) return ret def generate_del_filters(self, mole): ret = {} for i in self.functor(mole).active_filters(): ret[i] = Parameter( lambda mole, params, i=i: self.functor(mole).remove_filter(i)) return ret def add_filter(self, mole, name, params): try: self.functor(mole).add_filter(name, params) except FilterCreationError as ex: raise CommandException( 'Filter {0} failed to initialize({1})'.format(name, str(ex))) def print_filters(self, mole): filters = self.functor(mole).active_filters_to_string() if len(filters) == 0: output_manager.normal('No filters added yet.').line_break() else: for i in filters: output_manager.normal(i).line_break() def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' [add|del|config] [FILTER_NAME [ARGS]]'
def __import_filters(self, mole, filter_manager, filters): for filter_node in filters: name = b64decode(filter_node.get('name').encode()).decode() init_params = loads( b64decode(filter_node.get('init_params').encode())) filter_object = filter_manager.add_filter(name, init_params) configurator = Parameter() configurator.set_param_generator( lambda mole, _: filter_object.configuration_parameters()) for config_node in filter_node: config_params = loads( b64decode(config_node.get('config_params').encode())) configurator.execute(mole, config_params)
class QueryModeCommand(Command): def __init__(self): self.params = Parameter(lambda mole, _: output_manager.normal(mole.mode).line_break()) self.params.add_parameter('union', Parameter(lambda mole, _: mole.set_mode('union'))) self.params.add_parameter('blind', Parameter(lambda mole, _: mole.set_mode('blind'))) def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' <union|blind>'
class RequestSenderCommand(Command): def __init__(self): self.params = Parameter(lambda mole, _: output_manager.normal(str(mole.requester.sender)).line_break()) self.params.add_parameter('headsender', Parameter(lambda mole, _: self.set_sender(mole, HttpHeadRequestSender))) self.params.add_parameter('httpsender', Parameter(lambda mole, _: self.set_sender(mole, HttpRequestSender))) def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def set_sender(self, mole, sender): mole.requester.sender = sender() mole.initialized = False mole.requester.encoding = None
class QueryModeCommand(Command): def __init__(self): self.params = Parameter( lambda mole, _: output_manager.normal(mole.mode).line_break()) self.params.add_parameter( 'union', Parameter(lambda mole, _: mole.set_mode('union'))) self.params.add_parameter( 'blind', Parameter(lambda mole, _: mole.set_mode('blind'))) def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' <union|blind>'
class OutputCommand(Command): def __init__(self): self.params = Parameter(lambda mole, _: output_manager.normal(output_manager.result_output).line_break()) self.params.add_parameter('pretty', Parameter(lambda mole, _: self.set_output('pretty'))) self.params.add_parameter('plain', Parameter(lambda mole, _: self.set_output('plain'))) def set_output(self, value): output_manager.result_output = value def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' <pretty|plain>'
class VerboseCommand(Command): def __init__(self): self.params = Parameter(lambda mole, _: output_manager.normal('on' if mole.verbose else 'off').line_break()) self.params.add_parameter('on', Parameter(lambda mole, _: self.set_verbose(mole, True))) self.params.add_parameter('off', Parameter(lambda mole, _: self.set_verbose(mole, False))) def set_verbose(self, mole, value): mole.verbose = value def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' <on|off>'
class RedirectCommand(Command): def __init__(self): self.params = Parameter(lambda mole, _: output_manager.normal('on' if mole.requester.sender.follow_redirects else 'off').line_break()) self.params.add_parameter('on', Parameter(lambda mole, _: self.set_follow_redirects(mole, True))) self.params.add_parameter('off', Parameter(lambda mole, _: self.set_follow_redirects(mole, False))) def set_follow_redirects(self, mole, value): mole.requester.sender.follow_redirects = value def execute(self, mole, params): self.params.execute(mole, params) def usage(self, cmd_name): return cmd_name + ' [on|off]' def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params)
class BaseFilterCommand(Command): def __init__(self, functor): self.functor = functor self.params = Parameter(lambda mole, _: self.print_filters(mole)) add_param = Parameter() add_param.set_param_generator(lambda mole, _: self.generate_add_filters(mole)) del_param = Parameter() del_param.set_param_generator(lambda mole, _: self.generate_del_filters(mole)) self.params.add_parameter('add', add_param) self.params.add_parameter('del', del_param) def generate_add_filters(self, mole): ret = {} for i in self.functor(mole).available_filters(): ret[i] = Parameter(lambda mole, params, i=i: self.add_filter(mole, i, params)) return ret def generate_del_filters(self, mole): ret = {} for i in self.functor(mole).active_filters(): ret[i] = Parameter(lambda mole, params, i=i: self.functor(mole).remove_filter(i)) return ret def add_filter(self, mole, name, params): try: self.functor(mole).add_filter(name, params) except FilterCreationError as ex: raise CommandException('Filter {0} failed to initialize({1})'.format(name, str(ex))) def print_filters(self, mole): filters = self.functor(mole).active_filters_to_string() if len(filters) == 0: output_manager.normal('No filters added yet.').line_break() else: for i in filters: output_manager.normal(i).line_break() def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' [add|del|config] [FILTER_NAME [ARGS]]'
class OutputCommand(Command): def __init__(self): self.params = Parameter(lambda mole, _: output_manager.normal( output_manager.result_output).line_break()) self.params.add_parameter( 'pretty', Parameter(lambda mole, _: self.set_output('pretty'))) self.params.add_parameter( 'plain', Parameter(lambda mole, _: self.set_output('plain'))) def set_output(self, value): output_manager.result_output = value def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' <pretty|plain>'
class VerboseCommand(Command): def __init__(self): self.params = Parameter(lambda mole, _: output_manager.normal( 'on' if mole.verbose else 'off').line_break()) self.params.add_parameter( 'on', Parameter(lambda mole, _: self.set_verbose(mole, True))) self.params.add_parameter( 'off', Parameter(lambda mole, _: self.set_verbose(mole, False))) def set_verbose(self, mole, value): mole.verbose = value def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def usage(self, cmd_name): return cmd_name + ' <on|off>'
class RequestSenderCommand(Command): def __init__(self): self.params = Parameter(lambda mole, _: output_manager.normal( str(mole.requester.sender)).line_break()) self.params.add_parameter( 'headsender', Parameter( lambda mole, _: self.set_sender(mole, HttpHeadRequestSender))) self.params.add_parameter( 'httpsender', Parameter( lambda mole, _: self.set_sender(mole, HttpRequestSender))) def execute(self, mole, params): self.params.execute(mole, params) def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params) def set_sender(self, mole, sender): mole.requester.sender = sender() mole.initialized = False mole.requester.encoding = None
class RedirectCommand(Command): def __init__(self): self.params = Parameter(lambda mole, _: output_manager.normal( 'on' if mole.requester.sender.follow_redirects else 'off').line_break()) self.params.add_parameter( 'on', Parameter(lambda mole, _: self.set_follow_redirects(mole, True))) self.params.add_parameter( 'off', Parameter(lambda mole, _: self.set_follow_redirects(mole, False))) def set_follow_redirects(self, mole, value): mole.requester.sender.follow_redirects = value def execute(self, mole, params): self.params.execute(mole, params) def usage(self, cmd_name): return cmd_name + ' [on|off]' def parameters(self, mole, current_params): return self.params.parameter_list(mole, current_params)