#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Server-side Trips report page for .wifitrip import/export.
"""
from html import escape
from reports.template import (
ReportContext,
page_begin,
page_end,
)
def _stat_card(label, value):
return f"""
{escape(str(label))}
{escape(str(value))}
"""
def _message(message):
if not message:
return ""
message_type = escape(
str(message.get("type", "info"))
)
message_text = escape(
str(message.get("text", ""))
)
return f"""
"""
def _import_result(result):
if not result:
return ""
html = """
Import result
"""
html += _stat_card(
"Sessions in file",
result.get("sessions", 0),
)
html += _stat_card(
"Imported",
result.get("imported", 0),
)
html += _stat_card(
"Duplicates",
result.get("duplicates", 0),
)
html += _stat_card(
"Failed",
result.get("failed", 0),
)
html += """
"""
failed_sessions = result.get(
"failed_sessions",
[],
)
if failed_sessions:
html += """
Failed sessions
| Session hash |
Error |
"""
for item in failed_sessions:
html += f"""
{escape(str(item.get("session_hash", "")))}
|
{escape(str(item.get("error", "")))}
|
"""
html += """
"""
html += """
"""
return html
def _validation_result(validation):
if not validation:
return ""
if not validation.get("valid"):
return f"""
Package validation
{escape(
str(
validation.get(
"error",
"Package is invalid."
)
)
)}
"""
return f"""
Package validation
Package is valid and contains
{escape(str(validation.get("sessions", 0)))}
session(s).
{_stat_card(
"Sessions",
validation.get("sessions", 0)
)}
{_stat_card(
"Access points",
validation.get("access_points", 0)
)}
{_stat_card(
"GPS points",
validation.get("gps_points", 0)
)}
{_stat_card(
"Observations",
validation.get("observations", 0)
)}
{_stat_card(
"Handshakes",
validation.get("handshakes", 0)
)}
{_stat_card(
"Handshake Cracked",
validation.get("credentials", 0)
)}
"""
def render_trips_page(
conn,
context=None,
message=None,
import_result=None,
validation=None,
):
if context is None:
context = ReportContext(
mode="server",
page="trips",
)
session_count = conn.execute(
"""
SELECT COUNT(*) AS count
FROM capture_sessions
"""
).fetchone()["count"]
html = page_begin(
"Trips",
(
"Export and import capture sessions "
"as .wifitrip packages."
),
"trips",
context,
)
html += _message(
message
)
html += """
Export capture sessions
Export all capture sessions into one
.wifitrip package.
The package contains logical session data:
GPS track, access-point observations,
handshakes and credentials. Physical capture
files are not included.
"""
html += _stat_card(
"Sessions available",
session_count,
)
html += """
"""
html += """
Import capture sessions
Import one .wifitrip package.
The complete package is validated before
any database changes are made.
"""
html += _validation_result(
validation
)
html += _import_result(
import_result
)
html += page_end()
return html