feat: Add OSINT features (v0.1.2)

- MAC vendor lookup (IEEE OUI database)
- BLE company_id to manufacturer mapping
- Device profile enrichment in API responses
- Export endpoints: devices.csv, devices.json, alerts.csv, probes.csv
- Auto-populate vendor on device creation
- CLI command: flask download-oui
- Makefile target: make oui

13 tests passing
This commit is contained in:
user
2026-02-05 21:14:27 +01:00
parent 924d28aab0
commit 3ad39cfaeb
16 changed files with 365 additions and 7 deletions

View File

@@ -0,0 +1 @@
"""Utils tests."""

View File

@@ -0,0 +1,25 @@
"""BLE company lookup tests."""
from esp32_web.utils.ble_companies import lookup_ble_company, get_all_companies
def test_lookup_apple():
"""Test Apple company ID lookup."""
assert lookup_ble_company(0x004C) == 'Apple, Inc.'
def test_lookup_google():
"""Test Google company ID lookup."""
assert lookup_ble_company(0x00E0) == 'Google'
def test_lookup_unknown():
"""Test unknown company ID lookup."""
assert lookup_ble_company(0xFFFF) is None
def test_get_all_companies():
"""Test getting all companies."""
companies = get_all_companies()
assert isinstance(companies, dict)
assert len(companies) > 0
assert 0x004C in companies

View File

@@ -0,0 +1,18 @@
"""OUI lookup tests."""
from esp32_web.utils.oui import _normalize_mac, lookup_vendor
def test_normalize_mac():
"""Test MAC normalization."""
assert _normalize_mac('aa:bb:cc:dd:ee:ff') == 'AABBCC'
assert _normalize_mac('AA-BB-CC-DD-EE-FF') == 'AABBCC'
assert _normalize_mac('aabbccddeeff') == 'AABBCC'
assert _normalize_mac('short') == ''
def test_lookup_vendor_no_db():
"""Test vendor lookup without database."""
# Should return None when no database loaded
result = lookup_vendor('aa:bb:cc:dd:ee:ff')
# Result depends on whether OUI db exists
assert result is None or isinstance(result, str)