Skip to content

Commit 8b51b30

Browse files
author
netevert
committed
fixed #3, #15
1 parent a110fbe commit 8b51b30

File tree

2 files changed

+59
-24
lines changed

2 files changed

+59
-24
lines changed

pockint.py

Lines changed: 53 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -113,17 +113,20 @@ class Gui(tk.Frame):
113113
def __init__(self, master=None, *args, **kwargs):
114114
super().__init__(master, *args, **kwargs)
115115
self.icon = load_icon()
116+
self.multi_select = tk.BooleanVar()
116117
self.build_menu()
117118
self.build_interface()
118119
self.id_tracker = dict()
120+
self.transforms_tracker = set()
119121

120122
def build_menu(self):
121123
"""Initializes and builds program menu bar"""
122124
self.top = tk.Menu(self)
123125

124126
# create run menu
125127
self.run = tk.Menu(self.top, tearoff=False)
126-
self.run.add_command(label='Search', accelerator='Ctrl+S',
128+
self.run.add_checkbutton(label="Multi-select", onvalue=True, offvalue=False, variable=self.multi_select, command=self.config_menu)
129+
self.run.add_command(label='Run transform', accelerator='Ctrl+R',
127130
command=self.run_data_mining, compound=tk.LEFT, underline=0)
128131
self.run.add_separator()
129132
self.run.add_command(label='Exit', command=self.quit_program,
@@ -142,7 +145,7 @@ def build_menu(self):
142145
compound=tk.LEFT, underline=0)
143146
self.top.add_cascade(label='?', menu=self.info, underline=0)
144147

145-
self.run.entryconfig("Search", state="disabled")
148+
self.run.entryconfig("Run transform", state="disabled")
146149

147150
def build_interface(self):
148151
"""Builds the gui interface"""
@@ -161,7 +164,13 @@ def build_interface(self):
161164
# create data mining action selection drop down
162165
self.selector = ttk.Combobox(labelframe_1, values=[""], state="readonly")
163166
self.selector.pack(expand=True, fill='x', side="top", padx=2, pady=2)
164-
167+
168+
#self.checkBox1 = tk.Checkbutton(labelframe_1, variable=None, onvalue=1, offvalue=0, text="Multi-select")
169+
#self.checkBox1.pack(expand=False, side="left", padx=2, pady=2, anchor="w")
170+
171+
#self.entry2 = tk.Entry(labelframe_1)
172+
#self.entry2.pack(expand=True, fill='x', side="left", padx=2, pady=2, anchor="w")
173+
165174
# create results frame
166175
frame_2 = tk.Frame()
167176
frame_2.pack(expand=True, fill='both', anchor="n")
@@ -191,13 +200,25 @@ def build_interface(self):
191200

192201
# gui bindings
193202
self.entry.bind('<Return>', self.validate_input)
203+
self.entry.bind('<FocusOut>', self.validate_input)
194204
self.selector.bind("<<ComboboxSelected>>", self.run_data_mining)
195205
self.selector.bind("<Return>", self.run_data_mining)
206+
self.selector.bind("<ButtonRelease-1>", self.config_menu)
196207
self.treeview.bind('<ButtonRelease-1>', self.selectItem)
208+
self.bind_all('<Control-r>', self.run_data_mining)
197209

198210
# focus on entry widget
199211
self.entry.focus()
200212

213+
def config_menu(self, event=None):
214+
"""Ensures search menu option is properly enabled and disabled"""
215+
if self.multi_select.get():
216+
self.run.entryconfig("Run transform", state="disabled")
217+
elif self.selector.get() == "":
218+
self.run.entryconfig("Run transform", state="disabled")
219+
else:
220+
self.run.entryconfig("Run transform", state="active")
221+
201222
def validate_input(self, event=None):
202223
"""Validates and sanitizes user input"""
203224
self.validator = InputValidator()
@@ -209,36 +230,46 @@ def validate_input(self, event=None):
209230
self.selector['values'] = validated_input[2]
210231
self.selector.current(0)
211232
self.selector.focus()
212-
self.run.entryconfig("Search", state="active")
233+
self.config_menu()
213234
else:
214235
self.selector["values"] = [""]
215236
self.selector.set("")
216-
self.run.entryconfig("Search", state="disabled")
237+
self.run.entryconfig("Run transform", state="disabled")
217238
self.status['text'] = "input: invalid"
218239
elif not _input:
219240
self.status['text'] = "ready"
220241
self.selector["values"] = [""]
221-
self.run.entryconfig("Search", state="disabled")
242+
self.run.entryconfig("Run transform", state="disabled")
222243
self.selector.current(0)
223244

224245
def run_data_mining(self, event=None):
225246
"""Performs the select OSINT data mining operation"""
226-
self.status['text'] = "running..."
227-
_input = self.entry.get().split(",")
228-
transform = self.selector.get()
229-
try:
230-
for i in _input:
231-
data = self.validator.execute_transform(i, transform)
232-
for item in data:
233-
self.treeview.insert(self.getID(i), "end", values=(transform, item))
234-
# todo: focus on last treeview output to be able to hit enter and iterate
235-
# item = self.treeview.insert('', 'end', text=_input, values=(transform, data))
236-
# self.treeview.focus_set()
237-
# self.treeview.selection_set(item)
238-
self.entry.focus()
239-
self.status['text'] = "ready"
240-
except Exception as e:
241-
messagebox.showerror("Error", "Error message:" + str(e))
247+
if self.multi_select.get():
248+
self.transforms_tracker.add(self.selector.get())
249+
self.status['text'] = "multi-select: [{}]".format(" - ".join([transform for transform in self.transforms_tracker]))
250+
else:
251+
self.status['text'] = "running..."
252+
_input = self.entry.get().split(",")
253+
if _input[0]:
254+
transform = self.selector.get()
255+
self.transforms_tracker.add(transform)
256+
try:
257+
for i in _input:
258+
for transform in self.transforms_tracker:
259+
data = self.validator.execute_transform(i, transform)
260+
for item in data:
261+
self.treeview.insert(self.getID(i), "end", values=(transform, item))
262+
# todo: focus on last treeview output to be able to hit enter and iterate
263+
# item = self.treeview.insert('', 'end', text=_input, values=(transform, data))
264+
# self.treeview.focus_set()
265+
# self.treeview.selection_set(item)
266+
self.entry.focus()
267+
self.status['text'] = "ready"
268+
self.transforms_tracker.clear()
269+
except Exception as e:
270+
messagebox.showerror("Error", "Error message:" + str(e))
271+
else:
272+
self.status['text'] = "no inputs"
242273

243274
def getID(self, item):
244275
"""Grabs the ID of the queried treeview item"""

utils.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import socket as sock
99
import shodan
1010
import sqlite3
11+
import sys
1112
import tempfile
1213
from urllib.parse import urlparse
1314
import validators
@@ -19,7 +20,10 @@ def __init__(self):
1920
"""Initialises application database, if app db doesn't exist, it creates one"""
2021

2122
# verify that db folder exists, if not create one
22-
self.db_path = os.getenv("LOCALAPPDATA")+ "\\pockint\\"
23+
if sys.platform == "win32":
24+
self.db_path = os.getenv("LOCALAPPDATA")+ "\\pockint\\"
25+
else:
26+
self.path_db = os.path.expanduser(os.path.join("~", ".pockint"))
2327
if not os.path.exists(self.db_path):
2428
os.makedirs(self.db_path)
2529
self.create_database()
@@ -654,7 +658,7 @@ def make_vt_api_request(url: str, api_key: str, search_params: dict):
654658
try:
655659
params = {"apikey": api_key}
656660
params.update(search_params)
657-
headers = {'User-Agent': 'Pockint v.1.0.0-beta'}
661+
headers = {'User-Agent': 'Pockint v.1.0.0'}
658662
return requests.get(url, params=params, headers=headers)
659663
except Exception as e:
660664
return e

0 commit comments

Comments
 (0)