Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

start wardriving session only if in AUTO/AI mode #14

Merged
merged 2 commits into from
Apr 11, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 52 additions & 15 deletions wardriver.py
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,7 @@ def on_loaded(self):
logging.info('[WARDRIVER] Plugin loaded (join the Discord server: https://discord.gg/5vrJbbW3ve)')

self.__lock = Lock()
self.ready = False
self.__gps_available = True

try:
Expand Down Expand Up @@ -345,19 +346,23 @@ def on_loaded(self):
self.__last_ap_refresh = None
self.__last_ap_reported = []

logging.info(f'[WARDRIVER] Saving session files inside {self.__path}')
logging.info(f'[WARDRIVER] Wardriver DB can be found in {self.__path}')

if self.__wigle_enabled:
logging.info('[WARDRIVER] Previous sessions will be uploaded to WiGLE once internet is available')
logging.info('[WARDRIVER] Join the WiGLE group: search "The crew of the Black Pearl" and start wardriving with us!')

self.__import_old_csv()
self.__session_id = -1

self.__session_id = self.__db.new_wardriving_session()
self.ready = True
self.__import_old_csv()

def on_ready(self, agent):
if not agent.mode == 'MANU':
self.__session_id = self.__db.new_wardriving_session()
self.ready = True

if len(self.__whitelist) > 0:
logging.info(f'[WARDRIVER] Ignoring {len(self.__whitelist)} networks')
if len(self.__whitelist) > 0:
logging.info(f'[WARDRIVER] Ignoring {len(self.__whitelist)} networks')

def __load_global_whitelist(self):
try:
Expand Down Expand Up @@ -545,7 +550,7 @@ def on_unfiltered_ap_list(self, agent, aps):
else:
self.__gps_available = False
logging.warning("[WARDRIVER] GPS not available... skip wardriving log")

def __upload_session_to_wigle(self, session_id):
if self.__wigle_api_key != '':
headers = {
Expand Down Expand Up @@ -580,6 +585,7 @@ def __upload_session_to_wigle(self, session_id):
return False
else:
return False

def on_internet_available(self, agent):
if self.__wigle_enabled and not self.__lock.locked():
with self.__lock:
Expand All @@ -595,10 +601,19 @@ def on_webhook(self, path, request):
if path == '/' or not path:
return render_template_string(HTML_PAGE, plugin_version = self.__version__)
elif path == 'current-session':
data = self.__db.current_session_stats(self.__session_id)
data['last_ap_refresh'] = self.__last_ap_refresh.astimezone(timezone.utc).strftime("%Y-%m-%d %H:%M:%S") if self.__last_ap_refresh else None
data['last_ap_reported'] = self.__last_ap_reported
return json.dumps(data)
if self.__session_id == -1:
return json.dumps({
"id": -1,
"created_at": None,
"networks": None,
"last_ap_refresh": None,
"last_ap_reported": None
})
else:
data = self.__db.current_session_stats(self.__session_id)
data['last_ap_refresh'] = self.__last_ap_refresh.astimezone(timezone.utc).strftime("%Y-%m-%d %H:%M:%S") if self.__last_ap_refresh else None
data['last_ap_reported'] = self.__last_ap_reported
return json.dumps(data)
elif path == 'general-stats':
stats = self.__db.general_stats()
stats['config'] = {
Expand Down Expand Up @@ -699,6 +714,16 @@ def draw(self, canvas, drawer):
margin-right: 15px;
font-size: 16px;
}
#manu-alert p {
background-color: #fff5a5;
padding: 10px 20px!important;
text-align: center;
margin: auto!important;
border-radius: var(--pico-border-radius);
color: #000;
width: fit-content!important;
margin-bottom: 20px!important;
}
</style>
{% endblock %}

Expand Down Expand Up @@ -733,29 +758,32 @@ def draw(self, canvas, drawer):
<div id="data-container">
<div id="current-session">
<h3>Current session</h3>
<div id="manu-alert" class="hidden">
<p><i class="fa-solid fa-triangle-exclamation"></i> Pwnagotchi is in MANU mode, therefore currently it's not scanning. Restart in AUTO/AI mode to start a new wardriving session</p>
</div>
<div class="grid">
<div>
<article class="center">
<header>Session id</header>
<span id="current-session-id"></span>
<span id="current-session-id">-</span>
</article>
</div>
<div>
<article class="center">
<header>Started at </header>
<span id="current-session-start"></span>
<span id="current-session-start">-</span>
</article>
</div>
<div>
<article class="center">
<header>Networks count</header>
<span id="current-session-networks"></span>
<span id="current-session-networks">-</span>
</article>
</div>
<div>
<article class="center">
<header>Last APs refresh</header>
<span id="current-session-last-update"></span>
<span id="current-session-last-update">-</span>
</article>
</div>
</div>
Expand Down Expand Up @@ -927,6 +955,15 @@ def draw(self, canvas, drawer):

function getCurrentSessionStats() {
request('GET', "/plugins/wardriver/current-session", function(data) {
if(data.id == -1) {
document.getElementById("manu-alert").className = 'visible'
document.getElementById("current-session-id").innerHTML = '-'
document.getElementById("current-session-networks").innerHTML = '-'
document.getElementById("current-session-last-update").innerHTML = '-'
document.getElementById("current-session-start").innerHTML = '-'
return
}
document.getElementById("manu-alert").className = 'hidden'
document.getElementById("current-session-id").innerHTML = data.id
document.getElementById("current-session-networks").innerHTML = data.networks
document.getElementById("current-session-last-update").innerHTML = data.last_ap_refresh ? "<time class='timeago' datetime='" + parseUTCDate(data.last_ap_refresh).toISOString() + "'>-</time>" : "-"
Expand Down