mirror of
https://github.com/smittix/intercept.git
synced 2026-04-24 22:59:59 -07:00
- Add AIS Vessel Tracking and Spy Stations to GitHub Pages site - Update mode count from 10+ to 12+ - Add feature sections to FEATURES.md - Update README.md features list and acknowledgments - Add AIS-catcher and Priyom.org to acknowledgments - Bump version to 2.10.0 in config.py - Update CHANGELOG.md with new release notes Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
151 lines
4.8 KiB
Python
151 lines
4.8 KiB
Python
"""Configuration settings for intercept application."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
# Application version
|
|
VERSION = "2.10.0"
|
|
|
|
# Changelog - latest release notes (shown on welcome screen)
|
|
CHANGELOG = [
|
|
{
|
|
"version": "2.10.0",
|
|
"date": "January 2026",
|
|
"highlights": [
|
|
"AIS vessel tracking with real-time maritime map",
|
|
"Spy Stations database (number stations & diplomatic HF)",
|
|
"Multi-SDR support for AIS (RTL-SDR, HackRF, LimeSDR, etc.)",
|
|
"UI improvements: renamed modes for clarity",
|
|
]
|
|
},
|
|
{
|
|
"version": "2.9.5",
|
|
"date": "January 2026",
|
|
"highlights": [
|
|
"Enhanced TSCM with MAC-randomization resistant detection",
|
|
"Clickable score cards and device detail expansion",
|
|
"RF scanning improvements with status feedback",
|
|
"Root privilege check and warning display",
|
|
]
|
|
},
|
|
{
|
|
"version": "2.9.0",
|
|
"date": "January 2026",
|
|
"highlights": [
|
|
"New dropdown navigation menus for cleaner UI",
|
|
"TSCM baseline recording now captures device data",
|
|
"Device identity engine integration for threat detection",
|
|
"Welcome screen with mode selection",
|
|
]
|
|
},
|
|
{
|
|
"version": "2.8.0",
|
|
"date": "December 2025",
|
|
"highlights": [
|
|
"Added TSCM counter-surveillance mode",
|
|
"WiFi/Bluetooth device correlation engine",
|
|
"Tracker detection (AirTag, Tile, SmartTag)",
|
|
"Risk scoring and threat classification",
|
|
]
|
|
},
|
|
{
|
|
"version": "2.7.0",
|
|
"date": "November 2025",
|
|
"highlights": [
|
|
"Multi-SDR hardware support via SoapySDR",
|
|
"LimeSDR, HackRF, Airspy, SDRplay support",
|
|
"Improved aircraft database with photo lookup",
|
|
"GPS auto-detection and integration",
|
|
]
|
|
},
|
|
]
|
|
|
|
|
|
def _get_env(key: str, default: str) -> str:
|
|
"""Get environment variable with default."""
|
|
return os.environ.get(f'INTERCEPT_{key}', default)
|
|
|
|
|
|
def _get_env_int(key: str, default: int) -> int:
|
|
"""Get environment variable as integer with default."""
|
|
try:
|
|
return int(os.environ.get(f'INTERCEPT_{key}', str(default)))
|
|
except ValueError:
|
|
return default
|
|
|
|
|
|
def _get_env_float(key: str, default: float) -> float:
|
|
"""Get environment variable as float with default."""
|
|
try:
|
|
return float(os.environ.get(f'INTERCEPT_{key}', str(default)))
|
|
except ValueError:
|
|
return default
|
|
|
|
|
|
def _get_env_bool(key: str, default: bool) -> bool:
|
|
"""Get environment variable as boolean with default."""
|
|
val = os.environ.get(f'INTERCEPT_{key}', '').lower()
|
|
if val in ('true', '1', 'yes', 'on'):
|
|
return True
|
|
if val in ('false', '0', 'no', 'off'):
|
|
return False
|
|
return default
|
|
|
|
|
|
# Logging configuration
|
|
_log_level_str = _get_env('LOG_LEVEL', 'WARNING').upper()
|
|
LOG_LEVEL = getattr(logging, _log_level_str, logging.WARNING)
|
|
LOG_FORMAT = _get_env('LOG_FORMAT', '%(asctime)s - %(levelname)s - %(message)s')
|
|
|
|
# Server settings
|
|
HOST = _get_env('HOST', '0.0.0.0')
|
|
PORT = _get_env_int('PORT', 5050)
|
|
DEBUG = _get_env_bool('DEBUG', False)
|
|
THREADED = _get_env_bool('THREADED', True)
|
|
|
|
# Default RTL-SDR settings
|
|
DEFAULT_GAIN = _get_env('DEFAULT_GAIN', '40')
|
|
DEFAULT_DEVICE = _get_env('DEFAULT_DEVICE', '0')
|
|
|
|
# Pager defaults
|
|
DEFAULT_PAGER_FREQ = _get_env('PAGER_FREQ', '929.6125M')
|
|
|
|
# Timeouts
|
|
PROCESS_TIMEOUT = _get_env_int('PROCESS_TIMEOUT', 5)
|
|
SOCKET_TIMEOUT = _get_env_int('SOCKET_TIMEOUT', 5)
|
|
SSE_TIMEOUT = _get_env_int('SSE_TIMEOUT', 1)
|
|
|
|
# WiFi settings
|
|
WIFI_UPDATE_INTERVAL = _get_env_float('WIFI_UPDATE_INTERVAL', 2.0)
|
|
AIRODUMP_HEADER_LINES = _get_env_int('AIRODUMP_HEADER_LINES', 2)
|
|
|
|
# Bluetooth settings
|
|
BT_SCAN_TIMEOUT = _get_env_int('BT_SCAN_TIMEOUT', 10)
|
|
BT_UPDATE_INTERVAL = _get_env_float('BT_UPDATE_INTERVAL', 2.0)
|
|
|
|
# ADS-B settings
|
|
ADSB_SBS_PORT = _get_env_int('ADSB_SBS_PORT', 30003)
|
|
ADSB_UPDATE_INTERVAL = _get_env_float('ADSB_UPDATE_INTERVAL', 1.0)
|
|
|
|
# Satellite settings
|
|
SATELLITE_UPDATE_INTERVAL = _get_env_int('SATELLITE_UPDATE_INTERVAL', 30)
|
|
SATELLITE_TRAJECTORY_POINTS = _get_env_int('SATELLITE_TRAJECTORY_POINTS', 30)
|
|
SATELLITE_ORBIT_MINUTES = _get_env_int('SATELLITE_ORBIT_MINUTES', 45)
|
|
|
|
# Admin credentials
|
|
ADMIN_USERNAME = _get_env('ADMIN_USERNAME', 'admin')
|
|
ADMIN_PASSWORD = _get_env('ADMIN_PASSWORD', 'admin')
|
|
|
|
def configure_logging() -> None:
|
|
"""Configure application logging."""
|
|
logging.basicConfig(
|
|
level=LOG_LEVEL,
|
|
format=LOG_FORMAT,
|
|
stream=sys.stderr
|
|
)
|
|
# Suppress Flask development server warning
|
|
logging.getLogger('werkzeug').setLevel(LOG_LEVEL)
|