From 116c9c6dc2e5b354136a49e6369e937c8262bf29 Mon Sep 17 00:00:00 2001 From: glides Date: Thu, 30 Jan 2020 11:24:00 -0500 Subject: [PATCH 1/4] Context get_selected bug fix Added a check to see if we are switching to the sessions context before trying to the 'get_selected' function (which doesn't exist in the sessions context) --- silenttrinity/core/client/cmdloop.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/silenttrinity/core/client/cmdloop.py b/silenttrinity/core/client/cmdloop.py index 6d702540..5865442d 100644 --- a/silenttrinity/core/client/cmdloop.py +++ b/silenttrinity/core/client/cmdloop.py @@ -184,12 +184,13 @@ async def switched_context(self, text): if text.lower() == ctx.name: if ctx._remote is True: try: - response = await self.teamservers.send( - ctx=ctx.name, - cmd="get_selected" - ) - if response.result: - ctx.selected = response.result + if ctx.name != "sessions": + response = await self.teamservers.send( + ctx=ctx.name, + cmd="get_selected" + ) + if response.result: + ctx.selected = response.result except AttributeError: break From 8c145b1fa33e352760bbbe119bc3710206143f71 Mon Sep 17 00:00:00 2001 From: glides Date: Thu, 30 Jan 2020 11:42:20 -0500 Subject: [PATCH 2/4] Add Attribute check before using it Checks if the context has the "available" attribute before using it. --- silenttrinity/core/client/cmdloop.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/silenttrinity/core/client/cmdloop.py b/silenttrinity/core/client/cmdloop.py index 5865442d..b74051f4 100644 --- a/silenttrinity/core/client/cmdloop.py +++ b/silenttrinity/core/client/cmdloop.py @@ -57,13 +57,14 @@ def get_completions(self, document, complete_event): if self.cli_menu.teamservers.selected: if cmd_line[0] == 'use': - for loadable in self.cli_menu.current_context.available: - if word_before_cursor in loadable: - # Apperently document.get_word_before_cursor() breaks if there's a forward slash in the command line ? - try: - yield Completion(loadable, -len(cmd_line[1])) - except IndexError: - yield Completion(loadable, -len(word_before_cursor)) + if hasattr(self.cli_menu.current_context, 'available'): + for loadable in self.cli_menu.current_context.available: + if word_before_cursor in loadable: + # Apperently document.get_word_before_cursor() breaks if there's a forward slash in the command line ? + try: + yield Completion(loadable, -len(cmd_line[1])) + except IndexError: + yield Completion(loadable, -len(word_before_cursor)) return if hasattr(self.cli_menu.current_context, 'selected') and self.cli_menu.current_context.selected: From 3e755791becc177e51f3244a949a97492ed0384b Mon Sep 17 00:00:00 2001 From: glides Date: Thu, 30 Jan 2020 12:17:41 -0500 Subject: [PATCH 3/4] Add debug option to Teamserver Set default log level to INFO and add --debug option when starting the teamserver --- silenttrinity/core/teamserver/__init__.py | 4 ++-- silenttrinity/core/teamserver/__main__.py | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/silenttrinity/core/teamserver/__init__.py b/silenttrinity/core/teamserver/__init__.py index 8c362cb2..bf65b5e3 100644 --- a/silenttrinity/core/teamserver/__init__.py +++ b/silenttrinity/core/teamserver/__init__.py @@ -2,8 +2,8 @@ import multiprocessing from silenttrinity.core.ipcserver import IPCServer logging.basicConfig( - format="%(asctime)s %(process)d %(threadName)s - [%(levelname)s] %(filename)s: %(funcName)s - %(message)s", - level=logging.DEBUG + format="[%(levelname)s] %(message)s", + level=logging.INFO ) # disable all loggers from different files diff --git a/silenttrinity/core/teamserver/__main__.py b/silenttrinity/core/teamserver/__main__.py index 74327e3a..48f8d0fb 100644 --- a/silenttrinity/core/teamserver/__main__.py +++ b/silenttrinity/core/teamserver/__main__.py @@ -1,12 +1,13 @@ #!/usr/bin/env python3 """ -Usage: teamserver [-h] [--port ] [--insecure] +Usage: teamserver [-h] [--port ] [--insecure][--debug] optional arguments: -h, --help Show this help message and exit -p, --port Port to bind to [default: 5000] --insecure Start server without TLS + --debug Enable debug logging """ import asyncio @@ -198,4 +199,12 @@ def start(args): if args['--insecure']: logging.warning('SECURITY WARNING: --insecure flag passed, communication between client and server will be in cleartext!') + if args['--debug']: + logger = logging.getLogger() + logger_handler = logging.StreamHandler() # Handler for the logger + logger.addHandler(logger_handler) + logger_handler.setFormatter(logging.Formatter( + '[%(levelname)s] %(process)d %(threadName)s - %(filename)s: %(funcName)s - %(message)s')) + logging.getLogger().setLevel(logging.DEBUG) + loop.run_until_complete(server(stop, args, teamserver_digest)) From c0b9df4119611eae37458114423208998907fa17 Mon Sep 17 00:00:00 2001 From: glides Date: Thu, 30 Jan 2020 15:10:19 -0500 Subject: [PATCH 4/4] Failed command notice Fixes #97 Display a message when the user fails to use a command properly. --- silenttrinity/core/client/cmdloop.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/silenttrinity/core/client/cmdloop.py b/silenttrinity/core/client/cmdloop.py index b74051f4..8efd644e 100644 --- a/silenttrinity/core/client/cmdloop.py +++ b/silenttrinity/core/client/cmdloop.py @@ -218,7 +218,9 @@ async def parse_command_line(self, text): print_bad(f"Error parsing command: {e}") except AttributeError as e: print_bad(f"Unknown command '{command[0]}'") - except (DocoptExit, SystemExit): + except DocoptExit: + print_bad("Check command usage") + except SystemExit: pass else: if command[0] in self._cmd_registry or self.current_context._remote is False: