Files
planeMapper/src/planemapper/provision.py
T
Matt Edholm 563b0d4665 Implement story 1.3: WiFi hotspot and captive portal form
Implement wifi.py (start_ap/stop_ap/kill_wifi with subprocess and ProvisioningError),
portal.py (Flask captive portal with Android/iOS/Windows probe redirects and 404 catch-all),
updated provision.py provisioning loop, and full test suite (38 passing).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 22:41:05 -04:00

29 lines
797 B
Python

import logging
from planemapper.provisioning import ProvisioningError, wifi
log = logging.getLogger(__name__)
def _reset_to_portal_state() -> None:
log.info("Resetting to portal state")
try:
wifi.stop_ap()
except Exception:
pass
def main() -> None:
logging.basicConfig(level=logging.INFO)
provisioned = False
while not provisioned:
try:
wifi.start_ap()
# Portal runs here (Story 1.3+ wires Flask app)
# Provisioning sequence continues in Story 1.5
log.info("Provisioning sequence started")
provisioned = True # placeholder — full sequence wired in 1.5
except ProvisioningError as e:
log.error("Provisioning failed: %s", e)
_reset_to_portal_state()