mirror of https://github.com/OWASP/Nettacker.git
203 lines
4.8 KiB
Python
203 lines
4.8 KiB
Python
import sys
|
|
from enum import Enum
|
|
from functools import cached_property
|
|
|
|
from nettacker.core.utils import time
|
|
|
|
|
|
class TerminalCodes(Enum):
|
|
RESET = "\033[0m"
|
|
|
|
# Colors \033[1;
|
|
GREY = "\033[1;30m"
|
|
RED = "\033[1;31m"
|
|
GREEN = "\033[1;32m"
|
|
YELLOW = "\033[1;33m"
|
|
BLUE = "\033[1;34m"
|
|
PURPLE = "\033[1;35m"
|
|
CYAN = "\033[1;36m"
|
|
WHITE = "\033[1;37m"
|
|
|
|
|
|
class Logger:
|
|
"""Nettacker logger."""
|
|
|
|
@staticmethod
|
|
def log(text):
|
|
print(text, end="", flush=True) # noqa: T201
|
|
|
|
@cached_property
|
|
def run_from_api(self):
|
|
"""
|
|
check if framework run from API to prevent any alert
|
|
|
|
Returns:
|
|
True if run from API otherwise False
|
|
"""
|
|
return "--start-api" in sys.argv
|
|
|
|
@cached_property
|
|
def verbose_mode_is_enabled(self):
|
|
return "--verbose" in sys.argv or "-v" in sys.argv
|
|
|
|
@cached_property
|
|
def event_verbose_mode_is_enabled(self):
|
|
return "--verbose-event" in sys.argv
|
|
|
|
def info(self, content):
|
|
"""
|
|
build the info message, log the message in database if requested,
|
|
rewrite the thread temporary file
|
|
|
|
Args:
|
|
content: content of the message
|
|
|
|
Returns:
|
|
None
|
|
"""
|
|
if not self.run_from_api:
|
|
self.log(
|
|
TerminalCodes.YELLOW.value
|
|
+ "[{0}][+] ".format(time.now())
|
|
+ TerminalCodes.GREEN.value
|
|
+ content
|
|
+ TerminalCodes.RESET.value
|
|
+ "\n",
|
|
)
|
|
|
|
def verbose_event_info(self, content):
|
|
"""
|
|
build the info message, log the message in database if requested,
|
|
rewrite the thread temporary file
|
|
|
|
Args:
|
|
content: content of the message
|
|
|
|
Returns:
|
|
None
|
|
"""
|
|
if not self.run_from_api and (
|
|
self.verbose_mode_is_enabled or self.event_verbose_mode_is_enabled
|
|
): # prevent to stdout if run from API
|
|
self.log(
|
|
TerminalCodes.YELLOW.value
|
|
+ "[{0}][+] ".format(time.now())
|
|
+ TerminalCodes.GREEN.value
|
|
+ content
|
|
+ TerminalCodes.RESET.value
|
|
+ "\n",
|
|
)
|
|
|
|
def write(self, content):
|
|
"""
|
|
simple print a message
|
|
|
|
Args:
|
|
content: content of the message
|
|
|
|
Returns:
|
|
None
|
|
"""
|
|
if not self.run_from_api:
|
|
self.log(content)
|
|
|
|
def success_event_info(self, content):
|
|
"""
|
|
build the info message, log the message in database if requested,
|
|
rewrite the thread temporary file
|
|
|
|
Args:
|
|
content: content of the message
|
|
|
|
Returns:
|
|
None
|
|
"""
|
|
if not self.run_from_api:
|
|
self.log(
|
|
TerminalCodes.RED.value
|
|
+ "[{0}][+++] ".format(time.now())
|
|
+ TerminalCodes.CYAN.value
|
|
+ content
|
|
+ TerminalCodes.RESET.value
|
|
+ "\n",
|
|
)
|
|
|
|
def verbose_info(self, content):
|
|
"""
|
|
build the info message, log the message in database if requested,
|
|
rewrite the thread temporary file
|
|
|
|
Args:
|
|
content: content of the message
|
|
|
|
Returns:
|
|
None
|
|
"""
|
|
if self.verbose_mode_is_enabled:
|
|
self.log(
|
|
TerminalCodes.YELLOW.value
|
|
+ "[{0}][+] ".format(time.now())
|
|
+ TerminalCodes.PURPLE.value
|
|
+ content
|
|
+ TerminalCodes.RESET.value
|
|
+ "\n",
|
|
)
|
|
|
|
def warn(self, content):
|
|
"""
|
|
build the warn message
|
|
|
|
Args:
|
|
content: content of the message
|
|
|
|
Returns:
|
|
the message in warn structure - None
|
|
"""
|
|
if not self.run_from_api:
|
|
self.log(
|
|
TerminalCodes.BLUE.value
|
|
+ "[{0}][!] ".format(time.now())
|
|
+ TerminalCodes.YELLOW.value
|
|
+ content
|
|
+ TerminalCodes.RESET.value
|
|
+ "\n",
|
|
)
|
|
|
|
def error(self, content):
|
|
"""
|
|
build the error message
|
|
|
|
Args:
|
|
content: content of the message
|
|
|
|
Returns:
|
|
the message in error structure - None
|
|
"""
|
|
self.log(
|
|
TerminalCodes.RED.value
|
|
+ "[{0}][X] ".format(time.now())
|
|
+ TerminalCodes.YELLOW.value
|
|
+ content
|
|
+ TerminalCodes.RESET.value
|
|
+ "\n"
|
|
)
|
|
|
|
def write_to_api_console(self, content):
|
|
"""
|
|
simple print a message in API mode
|
|
|
|
Args:
|
|
content: content of the message
|
|
|
|
Returns:
|
|
None
|
|
"""
|
|
self.log(content)
|
|
|
|
def reset_color(self):
|
|
self.log(TerminalCodes.RESET.value)
|
|
|
|
|
|
def get_logger():
|
|
return Logger()
|