Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Z4nzu
GitHub Repository: Z4nzu/hackingtool
Path: blob/master/core.py
1267 views
1
import os
2
import sys
3
import webbrowser
4
from platform import system
5
from traceback import print_exc
6
from typing import Callable
7
from typing import List
8
from typing import Tuple
9
10
11
def clear_screen():
12
os.system("cls" if system() == "Windows" else "clear")
13
14
15
def validate_input(ip, val_range):
16
val_range = val_range or []
17
try:
18
ip = int(ip)
19
if ip in val_range:
20
return ip
21
except Exception:
22
return None
23
return None
24
25
26
class HackingTool(object):
27
# About the HackingTool
28
TITLE: str = "" # used to show info in the menu
29
DESCRIPTION: str = ""
30
31
INSTALL_COMMANDS: List[str] = []
32
INSTALLATION_DIR: str = ""
33
34
UNINSTALL_COMMANDS: List[str] = []
35
36
RUN_COMMANDS: List[str] = []
37
38
OPTIONS: List[Tuple[str, Callable]] = []
39
40
PROJECT_URL: str = ""
41
42
def __init__(self, options = None, installable: bool = True,
43
runnable: bool = True):
44
options = options or []
45
if isinstance(options, list):
46
self.OPTIONS = []
47
if installable:
48
self.OPTIONS.append(('Install', self.install))
49
if runnable:
50
self.OPTIONS.append(('Run', self.run))
51
self.OPTIONS.extend(options)
52
else:
53
raise Exception(
54
"options must be a list of (option_name, option_fn) tuples")
55
56
def show_info(self):
57
desc = self.DESCRIPTION
58
if self.PROJECT_URL:
59
desc += '\n\t[*] '
60
desc += self.PROJECT_URL
61
os.system(f'echo "{desc}"|boxes -d boy | lolcat')
62
63
def show_options(self, parent = None):
64
clear_screen()
65
self.show_info()
66
for index, option in enumerate(self.OPTIONS):
67
print(f"[{index + 1}] {option[0]}")
68
if self.PROJECT_URL:
69
print(f"[{98}] Open project page")
70
print(f"[{99}] Back to {parent.TITLE if parent is not None else 'Exit'}")
71
option_index = input("Select an option : ").strip()
72
try:
73
option_index = int(option_index)
74
if option_index - 1 in range(len(self.OPTIONS)):
75
ret_code = self.OPTIONS[option_index - 1][1]()
76
if ret_code != 99:
77
input("\n\nPress ENTER to continue:").strip()
78
elif option_index == 98:
79
self.show_project_page()
80
elif option_index == 99:
81
if parent is None:
82
sys.exit()
83
return 99
84
except (TypeError, ValueError):
85
print("Please enter a valid option")
86
input("\n\nPress ENTER to continue:").strip()
87
except Exception:
88
print_exc()
89
input("\n\nPress ENTER to continue:").strip()
90
return self.show_options(parent = parent)
91
92
def before_install(self):
93
pass
94
95
def install(self):
96
self.before_install()
97
if isinstance(self.INSTALL_COMMANDS, (list, tuple)):
98
for INSTALL_COMMAND in self.INSTALL_COMMANDS:
99
os.system(INSTALL_COMMAND)
100
self.after_install()
101
102
def after_install(self):
103
print("Successfully installed!")
104
105
def before_uninstall(self) -> bool:
106
""" Ask for confirmation from the user and return """
107
return True
108
109
def uninstall(self):
110
if self.before_uninstall():
111
if isinstance(self.UNINSTALL_COMMANDS, (list, tuple)):
112
for UNINSTALL_COMMAND in self.UNINSTALL_COMMANDS:
113
os.system(UNINSTALL_COMMAND)
114
self.after_uninstall()
115
116
def after_uninstall(self):
117
pass
118
119
def before_run(self):
120
pass
121
122
def run(self):
123
self.before_run()
124
if isinstance(self.RUN_COMMANDS, (list, tuple)):
125
for RUN_COMMAND in self.RUN_COMMANDS:
126
os.system(RUN_COMMAND)
127
self.after_run()
128
129
def after_run(self):
130
pass
131
132
def is_installed(self, dir_to_check = None):
133
print("Unimplemented: DO NOT USE")
134
return "?"
135
136
def show_project_page(self):
137
webbrowser.open_new_tab(self.PROJECT_URL)
138
139
140
class HackingToolsCollection(object):
141
TITLE: str = "" # used to show info in the menu
142
DESCRIPTION: str = ""
143
TOOLS = [] # type: List[Any[HackingTool, HackingToolsCollection]]
144
145
def __init__(self):
146
pass
147
148
def show_info(self):
149
os.system("figlet -f standard -c {} | lolcat".format(self.TITLE))
150
# os.system(f'echo "{self.DESCRIPTION}"|boxes -d boy | lolcat')
151
# print(self.DESCRIPTION)
152
153
def show_options(self, parent = None):
154
clear_screen()
155
self.show_info()
156
for index, tool in enumerate(self.TOOLS):
157
print(f"[{index} {tool.TITLE}")
158
print(f"[{99}] Back to {parent.TITLE if parent is not None else 'Exit'}")
159
tool_index = input("Choose a tool to proceed: ").strip()
160
try:
161
tool_index = int(tool_index)
162
if tool_index in range(len(self.TOOLS)):
163
ret_code = self.TOOLS[tool_index].show_options(parent = self)
164
if ret_code != 99:
165
input("\n\nPress ENTER to continue:").strip()
166
elif tool_index == 99:
167
if parent is None:
168
sys.exit()
169
return 99
170
except (TypeError, ValueError):
171
print("Please enter a valid option")
172
input("\n\nPress ENTER to continue:").strip()
173
except Exception:
174
print_exc()
175
input("\n\nPress ENTER to continue:").strip()
176
return self.show_options(parent = parent)
177
178