mirror of
https://github.com/msoedov/agentic_security.git
synced 2026-06-27 07:39:56 +02:00
94 lines
3.3 KiB
Python
94 lines
3.3 KiB
Python
from pyfiglet import Figlet, FontNotFound
|
|
from termcolor import colored
|
|
|
|
try:
|
|
from importlib.metadata import version
|
|
except ImportError:
|
|
from importlib_metadata import version
|
|
|
|
|
|
def generate_banner(
|
|
title: str = "Agentic Security",
|
|
font: str = "slant",
|
|
version: str = "v2.1.0",
|
|
tagline: str = "Proactive Threat Detection & Automated Security Protocols",
|
|
author: str = "Developed by: [Security Team]",
|
|
website: str = "Website: https://github.com/msoedov/agentic_security",
|
|
warning: str | None = "", # Using Optional for warning since it might be None
|
|
) -> str:
|
|
"""Generate a visually enhanced banner with dynamic width and borders."""
|
|
# Define the text elements
|
|
|
|
# Initialize Figlet with the specified font, fallback to default if not found
|
|
try:
|
|
f = Figlet(font=font)
|
|
except FontNotFound:
|
|
f = Figlet() # Fallback to default font
|
|
|
|
# Render the title text and calculate the maximum width of Figlet lines
|
|
banner_text = f.renderText(title)
|
|
banner_lines = banner_text.splitlines()
|
|
figlet_max_width = max(len(line) for line in banner_lines) if banner_lines else 0
|
|
|
|
# Create the details line and calculate its width
|
|
details_line = f"Version: {version} | {website}"
|
|
details_width = len(details_line)
|
|
|
|
# Calculate widths of other text elements
|
|
warning_width = len(warning)
|
|
tagline_width = len(tagline)
|
|
|
|
# Determine the overall maximum width for centering
|
|
overall_max_width = max(
|
|
figlet_max_width, warning_width, tagline_width, details_width
|
|
)
|
|
|
|
# Pad the Figlet lines to the overall maximum width
|
|
padded_banner_lines = [line.center(overall_max_width) for line in banner_lines]
|
|
|
|
# Define decorative characters and colors
|
|
decor_chars = ["▄", "■", "►"]
|
|
decor_colors = ["blue", "red", "yellow"]
|
|
|
|
# Create and color the content lines
|
|
content_lines = []
|
|
for line in padded_banner_lines:
|
|
content_lines.append(colored(line, "blue"))
|
|
content_lines.append(colored(decor_chars[0] * overall_max_width, decor_colors[0]))
|
|
content_lines.append(
|
|
colored(warning.center(overall_max_width), "red", attrs=["blink", "bold"])
|
|
)
|
|
content_lines.append(colored(decor_chars[1] * overall_max_width, decor_colors[1]))
|
|
content_lines.append(colored(tagline.center(overall_max_width), "red"))
|
|
content_lines.append(colored(decor_chars[2] * overall_max_width, decor_colors[2]))
|
|
content_lines.append(colored(details_line.center(overall_max_width), "magenta"))
|
|
|
|
# Define border color and create top and bottom borders
|
|
border_color = "blue"
|
|
top_border = colored("╔" + "═" * (overall_max_width + 2) + "╗", border_color)
|
|
bottom_border = colored("╚" + "═" * (overall_max_width + 2) + "╝", border_color)
|
|
|
|
# Add side borders to each content line with padding
|
|
bordered_content = [
|
|
colored("║ ", border_color) + line + colored(" ║", border_color)
|
|
for line in content_lines
|
|
]
|
|
|
|
# Assemble the full banner
|
|
banner = top_border + "\n" + "\n".join(bordered_content) + "\n" + bottom_border
|
|
return banner
|
|
|
|
|
|
def init_banner():
|
|
return
|
|
ver = version("agentic_security")
|
|
try:
|
|
print(generate_banner(version=ver))
|
|
except Exception:
|
|
# UnicodeEncodeError with codec on some systems
|
|
pass
|
|
|
|
|
|
if __name__ == "__main__":
|
|
init_banner()
|