Compare commits

...

3 Commits
2.2.2 ... 2.2.3

Author SHA1 Message Date
Richard Mwewa
c296f09e0e Fixed issues that affected Windows machines
[Errno 22] Invalid argument: This error occurred in Windows machines on session start up, the datetime format used a symbol that is reserved by the windows system, thus breaking octosuite whenever it attempted to log an activity to a file.

[Error 2] The system cannot find the file specified: This error occurred whenever the clear command was entered, since the command was being passed through subprocess with shell set to False.
2022-09-14 18:34:04 +02:00
Richard Mwewa
04ea880276 Update README.md 2022-09-14 18:05:42 +02:00
Richard Mwewa
eef44716d5 Update setup.py 2022-09-01 11:53:35 +02:00
9 changed files with 494 additions and 412 deletions

View File

@@ -49,15 +49,13 @@
- [x] ...And more - [x] ...And more
## Note ## Note
> octosuite automatically logs network and minor user activity of each session. The logs are saved by date and time in the .logs folder > Octosuite automatically logs network and user activity of each session, the logs are saved by date and time in the .logs folder
>> If you believe octosuite can be better, feel free to open a pull request with your improvements✌🏾🙂
## License ## License
![license](https://user-images.githubusercontent.com/74001397/137917929-2f2cdb0c-4d1d-4e4b-9f0d-e01589e027b5.png) ![license](https://user-images.githubusercontent.com/74001397/137917929-2f2cdb0c-4d1d-4e4b-9f0d-e01589e027b5.png)
## Donations ## Donations
Love octosuite and would like to donate? You can buy me a coffee using the button below. Buy a coffee to the creator of *Octosuite*
<a href="https://www.buymeacoffee.com/189381184" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a> <a href="https://www.buymeacoffee.com/189381184" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a>
Your support is much appreciated!☕👌🏾😊

View File

@@ -1,11 +1,11 @@
import getpass import getpass
from octosuite.colors import red, white, green, reset from octosuite.colors import red, white, green, reset
''' """
banner.py banner.py
This file holds the program's banner logo and version tag This file holds the program's banner logo and version tag
''' """
version_tag = "2.2.2" version_tag = "2.2.3"
name_logo = f"""{white} name_logo = f"""{white}
_______ __ _______ __ __ _______ __ _______ __ __
| |.----.| |_.-----.| __|.--.--.|__| |_.-----. | |.----.| |_.-----.| __|.--.--.|__| |_.-----.

View File

@@ -5,39 +5,39 @@ from datetime import datetime
# This file gets called first at start up before any other file gets called # This file gets called first at start up before any other file gets called
# colors.py is the reason why users get to choose whether to enable/disable colors # colors.py is the reason why users get to choose whether to enable/disable colors
system_info = [("Processor",platform.processor), system_info = [("Processor",platform.processor),
("Node", platform.node), ("Node", platform.node),
("Release", platform.release), ("Release", platform.release),
("Architecture", platform.architecture), ("Architecture", platform.architecture),
("Version", platform.version)] ("Version", platform.version)]
banner = f""" banner = f"""
OCTOSUITE © 2022 Richard Mwewa OCTOSUITE © 2022 Richard Mwewa
{datetime.now().strftime('%A %d %B %Y, %H:%M:%S%p')} {datetime.now().strftime('%A %d %B %Y, %H:%M:%S%p')}
""" """
print(banner) print(banner)
print(f"\t{platform.system()}") print(f"\t{platform.system()}")
for key, value in system_info: for key, value in system_info:
print(f"\t├─ {key}: {value()}") print(f"\t├─ {key}: {value()}")
print("\n") print("\n")
while True: while True:
try: try:
color_chooser = input(f"[ ? ] Welcome, would you like to enable colors for this session? (Y/n) ").lower() color_chooser = input(f"[ ? ] Welcome, would you like to enable colors for this session? (Y/n) ").lower()
if color_chooser == "y": if color_chooser == "y":
header_title = "bold white" header_title = "bold white"
red = "[red]" red = "[red]"
white = "[white]" white = "[white]"
green = "[green]" green = "[green]"
red_bold = "[white bold]" red_bold = "[white bold]"
white_bold = "[white bold]" white_bold = "[white bold]"
green_bold = "[green bold]" green_bold = "[green bold]"
reset = "[/]" reset = "[/]"
break break
elif color_chooser == "n": elif color_chooser == "n":
header_title = red = white = green = red_bold = white_bold = green_bold = reset = "" header_title = red = white = green = red_bold = white_bold = green_bold = reset = ""
break break
else: else:
print(f"\n[ ! ] Your response '{color_chooser}' is invalid (expected y or n)") print(f"\n[ ! ] Your response '{color_chooser}' is invalid (expected y or n)")
except KeyboardInterrupt: except KeyboardInterrupt:
exit(f"[ ! ] Process interrupted with [Ctrl+C].") exit(f"[ ! ] Process interrupted with [Ctrl+C].")

View File

@@ -5,10 +5,11 @@ from octosuite.sign_vars import SignVar
from octosuite.log_roller import logRoller from octosuite.log_roller import logRoller
from octosuite.colors import red, white, green, reset from octosuite.colors import red, white, green, reset
''' """
csvLogger csvLogger
This class holds the methods for creating .csv files of each functionality in main This class holds the methods for creating .csv files of each functionality in main
''' """
class csvLogger: class csvLogger:
# .csv for organization' profile # .csv for organization' profile
def logOrgProfile(response): def logOrgProfile(response):

View File

@@ -1,93 +1,106 @@
from rich.table import Table from rich.table import Table
from rich import print as xprint from rich import print as xprint
from octosuite.colors import white, green, white_bold, green_bold, header_title, reset from octosuite.colors import white, green, white_bold, green_bold, header_title, reset
""" """
Help Help
This class holds the help text for available commands. This class holds the help text for available commands.
""" """
class Help: class Help:
usageText = 'Use syntax {} to get started with %s{}%s.' % (green_bold, reset) usageText = 'Use syntax {} to get started with %s{}%s.' % (green_bold, reset)
usageText1 = '%sUse {} to view all available subcommands.%s' % (white, reset) usageText1 = '%sUse {} to view all available subcommands.%s' % (white, reset)
usageText2 = "%sThe {} command works with subcommands. %s" % (white, reset) usageText2 = "%sThe {} command works with subcommands. %s" % (white, reset)
def Org(): def Org():
xprint(Help.usageText2.format(f"{green_bold}org{reset}") + Help.usageText1.format(f"{green_bold}help:org{reset}")) xprint(
Help.usageText2.format(f"{green_bold}org{reset}") + Help.usageText1.format(f"{green_bold}help:org{reset}"))
def Repo(): def Repo():
xprint(Help.usageText2.format(f"{green_bold}repo{reset}") + Help.usageText1.format(f"{green_bold}help:repo{reset}")) xprint(Help.usageText2.format(f"{green_bold}repo{reset}") + Help.usageText1.format(
f"{green_bold}help:repo{reset}"))
def User(): def User():
xprint(Help.usageText2.format(f"{green_bold}user{reset}") + Help.usageText1.format(f"{green_bold}help:user{reset}")) xprint(Help.usageText2.format(f"{green_bold}user{reset}") + Help.usageText1.format(
f"{green_bold}help:user{reset}"))
def Search(): def Search():
xprint(Help.usageText2.format(f"{green_bold}search{reset}") + Help.usageText1.format(f"{green_bold}help:search{reset}")) xprint(Help.usageText2.format(f"{green_bold}search{reset}") + Help.usageText1.format(
f"{green_bold}help:search{reset}"))
def Source(): def Source():
xprint(Help.usageText2.format(f"{green_bold}source{reset}") + Help.usageText1.format(f"{green_bold}help:source{reset}")) xprint(Help.usageText2.format(f"{green_bold}source{reset}") + Help.usageText1.format(
f"{green_bold}help:source{reset}"))
def Logs(): def Logs():
xprint(Help.usageText2.format(f"{green_bold}logs{reset}") + Help.usageText1.format(f"{green_bold}help:logs{reset}")) xprint(Help.usageText2.format(f"{green_bold}logs{reset}") + Help.usageText1.format(
f"{green_bold}help:logs{reset}"))
def Version(): def Version():
xprint(Help.usageText2.format(f"{green_bold}version{reset}") + Help.usageText1.format(f"{green_bold}help:version{reset}")) xprint(Help.usageText2.format(f"{green_bold}version{reset}") + Help.usageText1.format(
f"{green_bold}help:version{reset}"))
def Csv(): def Csv():
xprint(Help.usageText2.format(f"{green_bold}csv{reset}") + Help.usageText1.format(f"{green_bold}help:csv{reset}")) xprint(
Help.usageText2.format(f"{green_bold}csv{reset}") + Help.usageText1.format(f"{green_bold}help:csv{reset}"))
def versionCommand(): def versionCommand():
version_cmd_table =Table(show_header=True, header_style=header_title) version_cmd_table = Table(show_header=True, header_style=header_title)
version_cmd_table.add_column("Command", style="dim", width=12) version_cmd_table.add_column("Command", style="dim", width=12)
version_cmd_table.add_column("Description") version_cmd_table.add_column("Description")
version_cmd_table.add_row("check", "Check for new release(s)") version_cmd_table.add_row("check", "Check for new release(s)")
version_cmd_table.add_row("info", "Version information") version_cmd_table.add_row("info", "Version information")
syntax = f"{green}version:<command>{reset}" syntax = f"{green}version:<command>{reset}"
xprint(f"{Help.usageText.format(syntax, 'version management')}") xprint(f"{Help.usageText.format(syntax, 'version management')}")
xprint(version_cmd_table) xprint(version_cmd_table)
def sourceCommand(): def sourceCommand():
source_cmd_table =Table(show_header=True, header_style=header_title) source_cmd_table = Table(show_header=True, header_style=header_title)
source_cmd_table.add_column("Command", style="dim", width=12) source_cmd_table.add_column("Command", style="dim", width=12)
source_cmd_table.add_column("Description") source_cmd_table.add_column("Description")
source_cmd_table.add_row("zipball", "Download source code Zipball") source_cmd_table.add_row("zipball", "Download source code Zipball")
source_cmd_table.add_row("tarball", "Download source code Tarball") source_cmd_table.add_row("tarball", "Download source code Tarball")
syntax = f"{green}source:<command>{reset}" syntax = f"{green}source:<command>{reset}"
xprint(f"{Help.usageText.format(syntax, 'source code downloads')}") xprint(f"{Help.usageText.format(syntax, 'source code downloads')}")
xprint(source_cmd_table) xprint(source_cmd_table)
def searchCommand(): def searchCommand():
search_cmd_table =Table(show_header=True, header_style=header_title) search_cmd_table = Table(show_header=True, header_style=header_title)
search_cmd_table.add_column("Command", style="dim", width=12) search_cmd_table.add_column("Command", style="dim", width=12)
search_cmd_table.add_column("Description") search_cmd_table.add_column("Description")
search_cmd_table.add_row("users", "Search user(s)") search_cmd_table.add_row("users", "Search user(s)")
search_cmd_table.add_row("repos", "Search repositor[y][ies]") search_cmd_table.add_row("repos", "Search repositor[y][ies]")
search_cmd_table.add_row("topics", "Search topic(s)") search_cmd_table.add_row("topics", "Search topic(s)")
search_cmd_table.add_row("issues", "Search issue(s)") search_cmd_table.add_row("issues", "Search issue(s)")
search_cmd_table.add_row("commits", "Search commit(s)") search_cmd_table.add_row("commits", "Search commit(s)")
syntax = f"{green}search:<command>{reset}" syntax = f"{green}search:<command>{reset}"
xprint(f"{Help.usageText.format(syntax, 'target discovery')}") xprint(f"{Help.usageText.format(syntax, 'target discovery')}")
xprint(search_cmd_table) xprint(search_cmd_table)
def userCommand(): def userCommand():
user_cmd_table =Table(show_header=True, header_style=header_title) user_cmd_table = Table(show_header=True, header_style=header_title)
user_cmd_table.add_column("Command", style="dim", width=12) user_cmd_table.add_column("Command", style="dim", width=12)
user_cmd_table.add_column("Description") user_cmd_table.add_column("Description")
user_cmd_table.add_row("profile", "Get a target's profile info") user_cmd_table.add_row("profile", "Get a target's profile info")
user_cmd_table.add_row("gists", "Return a users's gists") user_cmd_table.add_row("gists", "Return a users's gists")
user_cmd_table.add_row("org", "Return organizations that a target belongs to/owns") user_cmd_table.add_row("org", "Return organizations that a target belongs to/owns")
user_cmd_table.add_row("repos", "Return a target's repositories") user_cmd_table.add_row("repos", "Return a target's repositories")
user_cmd_table.add_row("events", "Return a target's events") user_cmd_table.add_row("events", "Return a target's events")
user_cmd_table.add_row("follows", "Check if user(A) follows user(B)") user_cmd_table.add_row("follows", "Check if user(A) follows user(B)")
user_cmd_table.add_row("followers", "Return a target's followers") user_cmd_table.add_row("followers", "Return a target's followers")
user_cmd_table.add_row("following", "Return a list of users the target is following") user_cmd_table.add_row("following", "Return a list of users the target is following")
@@ -96,13 +109,13 @@ class Help:
syntax = f"{green}user:<command>{reset}" syntax = f"{green}user:<command>{reset}"
xprint(f"{Help.usageText.format(syntax, 'user investigation(s)')}") xprint(f"{Help.usageText.format(syntax, 'user investigation(s)')}")
xprint(user_cmd_table) xprint(user_cmd_table)
def orgCommand(): def orgCommand():
org_cmd_table =Table(show_header=True, header_style=header_title) org_cmd_table = Table(show_header=True, header_style=header_title)
org_cmd_table.add_column("Command", style="dim", width=12) org_cmd_table.add_column("Command", style="dim", width=12)
org_cmd_table.add_column("Description") org_cmd_table.add_column("Description")
org_cmd_table.add_row("profile", "Get a target organization' profile info") org_cmd_table.add_row("profile", "Get a target organization' profile info")
org_cmd_table.add_row("repos", "Return a target organization' repositories") org_cmd_table.add_row("repos", "Return a target organization' repositories")
org_cmd_table.add_row("events", "Return a target organization' events") org_cmd_table.add_row("events", "Return a target organization' events")
org_cmd_table.add_row("member", "Check if a specified user is a public member of the target organization") org_cmd_table.add_row("member", "Check if a specified user is a public member of the target organization")
@@ -110,68 +123,68 @@ class Help:
syntax = f"{green}org:<command>{reset}" syntax = f"{green}org:<command>{reset}"
xprint(f"{Help.usageText.format(syntax, 'organization investigation(s)')}") xprint(f"{Help.usageText.format(syntax, 'organization investigation(s)')}")
xprint(org_cmd_table) xprint(org_cmd_table)
def repoCommand(): def repoCommand():
repo_cmd_table =Table(show_header=True, header_style=header_title) repo_cmd_table = Table(show_header=True, header_style=header_title)
repo_cmd_table.add_column("Command", style="dim", width=12) repo_cmd_table.add_column("Command", style="dim", width=12)
repo_cmd_table.add_column("Description") repo_cmd_table.add_column("Description")
repo_cmd_table.add_row("profile", "Get a repository's info") repo_cmd_table.add_row("profile", "Get a repository's info")
repo_cmd_table.add_row("issues", "Return a repository's issues") repo_cmd_table.add_row("issues", "Return a repository's issues")
repo_cmd_table.add_row("forks", "Return a repository's forks") repo_cmd_table.add_row("forks", "Return a repository's forks")
repo_cmd_table.add_row("releases", "Return a repository's releases") repo_cmd_table.add_row("releases", "Return a repository's releases")
repo_cmd_table.add_row("stargazers", "Return a repository's stargazers") repo_cmd_table.add_row("stargazers", "Return a repository's stargazers")
repo_cmd_table.add_row("path_contents", "List contents in a path of a repository") repo_cmd_table.add_row("path_contents", "List contents in a path of a repository")
syntax = f"{green}repo:<command>{reset}" syntax = f"{green}repo:<command>{reset}"
xprint(f"{Help.usageText.format(syntax, 'repository investigation(s)')}") xprint(f"{Help.usageText.format(syntax, 'repository investigation(s)')}")
xprint(repo_cmd_table) xprint(repo_cmd_table)
def logsCommand(): def logsCommand():
logs_cmd_table =Table(show_header=True, header_style=header_title) logs_cmd_table = Table(show_header=True, header_style=header_title)
logs_cmd_table.add_column("Command", style="dim", width=12) logs_cmd_table.add_column("Command", style="dim", width=12)
logs_cmd_table.add_column("Description") logs_cmd_table.add_column("Description")
logs_cmd_table.add_row("view", "View logs") logs_cmd_table.add_row("view", "View logs")
logs_cmd_table.add_row("read", "Read log") logs_cmd_table.add_row("read", "Read log")
logs_cmd_table.add_row("delete", "Delete log") logs_cmd_table.add_row("delete", "Delete log")
syntax = f"{green}logs:<command>{reset}" syntax = f"{green}logs:<command>{reset}"
xprint(f"{Help.usageText.format(syntax, 'log(s) management')}") xprint(f"{Help.usageText.format(syntax, 'log(s) management')}")
xprint(logs_cmd_table) xprint(logs_cmd_table)
def csvCommand(): def csvCommand():
csv_cmd_table =Table(show_header=True, header_style=header_title) csv_cmd_table = Table(show_header=True, header_style=header_title)
csv_cmd_table.add_column("Command", style="dim", width=12) csv_cmd_table.add_column("Command", style="dim", width=12)
csv_cmd_table.add_column("Description") csv_cmd_table.add_column("Description")
csv_cmd_table.add_row("view", "View csv files") csv_cmd_table.add_row("view", "View csv files")
csv_cmd_table.add_row("read", "Read csv") csv_cmd_table.add_row("read", "Read csv")
csv_cmd_table.add_row("delete", "Delete csv") csv_cmd_table.add_row("delete", "Delete csv")
syntax = f"{green}csv:<command>{reset}" syntax = f"{green}csv:<command>{reset}"
xprint(f"{Help.usageText.format(syntax, 'csv management')}") xprint(f"{Help.usageText.format(syntax, 'csv management')}")
xprint(csv_cmd_table) xprint(csv_cmd_table)
def helpCommand(): def helpCommand():
core_cmd_table =Table(show_header=True, header_style=header_title) core_cmd_table = Table(show_header=True, header_style=header_title)
core_cmd_table.add_column("Command", style="dim", width=12) core_cmd_table.add_column("Command", style="dim", width=12)
core_cmd_table.add_column("Description") core_cmd_table.add_column("Description")
core_cmd_table.add_row("help", "Help menu") core_cmd_table.add_row("help", "Help menu")
core_cmd_table.add_row("exit", "Close session") core_cmd_table.add_row("exit", "Close session")
core_cmd_table.add_row("clear", "Clear screen") core_cmd_table.add_row("clear", "Clear screen")
core_cmd_table.add_row("about", "Program's info") core_cmd_table.add_row("about", "Program's info")
core_cmd_table.add_row("author", "Developer's info") core_cmd_table.add_row("author", "Developer's info")
help_sub_cmd_table =Table(show_header=True, header_style=header_title) help_sub_cmd_table = Table(show_header=True, header_style=header_title)
help_sub_cmd_table.add_column("Command", style="dim", width=12) help_sub_cmd_table.add_column("Command", style="dim", width=12)
help_sub_cmd_table.add_column("Description") help_sub_cmd_table.add_column("Description")
help_sub_cmd_table.add_row("csv", "List all csv management commands") help_sub_cmd_table.add_row("csv", "List all csv management commands")
help_sub_cmd_table.add_row("logs", "List all logs management commands") help_sub_cmd_table.add_row("logs", "List all logs management commands")
help_sub_cmd_table.add_row("org", "List all organization investigation commands") help_sub_cmd_table.add_row("org", "List all organization investigation commands")
help_sub_cmd_table.add_row("user", "List all users investigation commands") help_sub_cmd_table.add_row("user", "List all users investigation commands")
help_sub_cmd_table.add_row("repo", "List all repository investigation commands") help_sub_cmd_table.add_row("repo", "List all repository investigation commands")
help_sub_cmd_table.add_row("search", "List all target discovery commands") help_sub_cmd_table.add_row("search", "List all target discovery commands")
help_sub_cmd_table.add_row("source", "List all source code download commands (for developers)") help_sub_cmd_table.add_row("source", "List all source code download commands (for developers)")
help_sub_cmd_table.add_row("version", "List all version management commands") help_sub_cmd_table.add_row("version", "List all version management commands")

View File

@@ -1,8 +1,9 @@
""" """
logRoller logRoller This class is where the main notification strings/messages are held, and are being used in two different
This class is where the main notification strings/messages are held, cases (they're being used by logging to be written to log files, and being printed out to the screen).
and are being used in two different cases (they're beig used by logging to be written to log files, and being printed out to the screen).
""" """
class logRoller: class logRoller:
Ctrl = "Session terminated with {}." Ctrl = "Session terminated with {}."
Error = "An error occurred: {}" Error = "An error occurred: {}"

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,14 @@
from octosuite.colors import red, white, green, reset from octosuite.colors import red, white, green, reset
''' """
SignVar SignVar *Even here, I couldn't think of a good name.* The Attributes class holds the signs/symbols that show what
*Even here, I couldn't think of a good name.* a notification in OctoSuite might be all about. This might not be very important or necessary in some cases,
The Attributes class holds the signs/symbols that show what a notification in OctoSuite might be all about. but I think it's better to know the severity of the notifications you get in a program.
This might not be very important or necessary in some cases, but I think it's better to know the severerity of the notifications you get in a program. """
'''
class SignVar: class SignVar:
prompt = f"{white}[{green} ? {white}]{reset}" prompt = f"{white}[{green} ? {white}]{reset}"
warning = f"{white}[{red} ! {white}]{reset}" warning = f"{white}[{red} ! {white}]{reset}"
error = f"{white}[{red} x {white}]{reset}" error = f"{white}[{red} x {white}]{reset}"
positive = f"{white}[{green} + {white}]{reset}" positive = f"{white}[{green} + {white}]{reset}"
negative = f"{white}[{red} - {white}]{reset}" negative = f"{white}[{red} - {white}]{reset}"
info = f"{white}[{green} * {white}]{reset}" info = f"{white}[{green} * {white}]{reset}"

View File

@@ -5,9 +5,9 @@ with open("README.md", "r", encoding="utf-8") as file:
setuptools.setup( setuptools.setup(
name="octosuite", name="octosuite",
version="2.2.2", version="2.2.3",
author="Richard Mwewa", author="Richard Mwewa",
author_email="richardmwewa@duck.com", author_email="rly0nheart@duck.com",
packages=["octosuite"], packages=["octosuite"],
description="Advanced Github OSINT Framework", description="Advanced Github OSINT Framework",
long_description=long_description, long_description=long_description,