release: Mark VIII 1.0
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# Design: PineAP Overview — Mark VII stats + mode quick toggle (Pager-supported)
|
||||
|
||||
Date: 2026-08-11
|
||||
Status: Approved
|
||||
|
||||
## Problem
|
||||
|
||||
The Pager WebUI PineAP overview (`#/pineap`) currently shows only a mode badge, an
|
||||
intro line, two Quick Settings checkboxes, and four status cards (Karma / Open
|
||||
Network / Evil WPA / Evil Enterprise). Compared with the WiFi Pineapple Mark VII
|
||||
PineAP overview it is missing:
|
||||
|
||||
1. The three overall dashboard counters: **Total SSIDs in Pool**, **Clients
|
||||
Connected**, **Handshakes Captured**.
|
||||
2. The **Passive / Active / Advanced** quick mode toggle.
|
||||
|
||||
All required data is already served by existing, on-device-verified webui
|
||||
endpoints; the backend is not involved in this change.
|
||||
|
||||
## Data sources (all verified live)
|
||||
|
||||
| Card | Endpoint | Value | Link |
|
||||
|---|---|---|---|
|
||||
| Total SSIDs in Pool | `GET /api/pineap/ssids` | `data.ssids.length` (hak5cmd `PINEAPPLE_SSID_POOL_LIST`) | `#/pineap/impersonation` |
|
||||
| Clients Connected | `GET /api/pineap/clients` | `data.count` (iwinfo assoclist) | `#/pineap/clients` |
|
||||
| Handshakes Captured | `GET /api/pineap/handshakes` | `data.files.length` (loot dir scan) | `#/pineap/evilwpa` |
|
||||
|
||||
## Pager constraints (drives the design)
|
||||
|
||||
- **Karma (mimic) state is not readable.** The daemon exposes only
|
||||
`mimic/enable` and `mimic/disable` (POST); `get_config` has no karma field and
|
||||
there is no `mimic` GET route. The webui therefore tracks karma in a
|
||||
view-local variable; on a fresh page load the true state is unknown.
|
||||
- **SSID Pool Broadcasting cannot start** (`ssidpool/enable` returns 500 because
|
||||
no `wlan0open` interface exists on the Pager). The mode presets do NOT touch
|
||||
broadcast; it remains a manual Quick Settings toggle that surfaces the daemon
|
||||
error.
|
||||
|
||||
## Design
|
||||
|
||||
### 1. Stats row (3 clickable cards)
|
||||
|
||||
A new `.cards` row placed above the existing status cards. Each card shows a
|
||||
large numeric value via the existing `.card-label` / `.card-value` styles and a
|
||||
`View`/`Configure` ghost button that navigates to the tab listed above. The row
|
||||
is populated inside the existing 5-second `load()` loop by adding the three GETs
|
||||
above to the current `Promise.all`.
|
||||
|
||||
### 2. Mode quick toggle (Passive / Active / Advanced)
|
||||
|
||||
A segmented control (new `.seg` / `.seg button` styles in `app.css`, modeled on
|
||||
`.tabbar`) rendered directly under the mode badge in the header section. It has
|
||||
three mutually exclusive buttons: Passive, Active, Advanced.
|
||||
|
||||
Preset actions (only Pager-supported features):
|
||||
|
||||
- **Passive**: `POST /api/pineap/enable {enable:true}` (PineAP on),
|
||||
`POST /api/pineap/mimic {enable:false}` (Karma off).
|
||||
- **Active**: `enable:true` + `mimic:true` (Karma on).
|
||||
- **Advanced**: `enable:true` + `mimic:true`; Evil WPA / Evil Enterprise are left
|
||||
as configured (customizable from their cards/tabs).
|
||||
|
||||
Apply flow: on click, disable the buttons, fire the preset requests (Promise.all),
|
||||
then reload state. On any failure, revert the selection and toast "Failed". The
|
||||
mode badge remains computed from readable state (`pineap_disabled`, Evil WPA /
|
||||
Enterprise enabled) and the toggle highlight is synced to that computed mode.
|
||||
|
||||
Under the toggle, a short muted line describes the currently selected mode
|
||||
(Mk7-style, adapted):
|
||||
- Passive: "PineAP is on; network impersonation (Karma) is off."
|
||||
- Active: "PineAP and Karma are on; the open network is impersonated."
|
||||
- Advanced: "All PineAP features are enabled and customizable."
|
||||
|
||||
### 3. Karma status card
|
||||
|
||||
Replaces the current always-`null` value with the locally-tracked karma state
|
||||
('On' / 'Off'; '—' if never set this session).
|
||||
|
||||
### 4. Quick Settings
|
||||
|
||||
Unchanged: "Capture SSIDs to Pool" and "Advertise AP Impersonation Pool".
|
||||
**Randomize Source MAC is explicitly out of scope** — the Pager has no backing
|
||||
route.
|
||||
|
||||
## Files touched
|
||||
|
||||
- `payload/user/general/pager-webui/www/js/views.js` — `views.pineap` overview
|
||||
section (stats row, mode toggle, karma card, feature-list line).
|
||||
- `payload/user/general/pager-webui/www/css/app.css` — add `.seg` segmented
|
||||
control styles.
|
||||
|
||||
No backend changes. No test-module changes (frontend-only; verified by JS
|
||||
delimiter balance check, the 13-module unittest loop, deploy, and an on-device
|
||||
walk).
|
||||
|
||||
## Verification
|
||||
|
||||
1. JS delimiter balance check (no node available; Python checker).
|
||||
2. All 13 test modules still pass (unchanged).
|
||||
3. Deploy via `scripts/deploy.ps1` (password supplied securely).
|
||||
4. On-device: confirm the three stat endpoints return counts; user walks the
|
||||
overview UI to confirm stats populate, cards navigate, and the mode toggle
|
||||
applies presets (karma tracking, error toast on failure).
|
||||
Reference in New Issue
Block a user