Commit Graph

602 Commits

Author SHA1 Message Date
Louis King f8c2a7bb40 Rename channel visibility 'public' to 'community'
- Rename ChannelVisibility.PUBLIC to ChannelVisibility.COMMUNITY
- Update stored value from 'public' to 'community' across model, schema, API, CLI, and frontend
- Add Alembic migration to update existing database rows
- Consolidate upgrade docs: merge v0.11.0, v0.12.0, v0.13.0 into single v0.11.0 section
- Add i18n visibility level translation keys (en, nl)
- Update section headings on channels page to use t() for i18n
- Keep visibility badges lowercase per UI design
2026-06-04 14:07:12 +01:00
Louis King 1491c49ef7 Refactor channels page layout and improve nav ordering
- Group channel cards by visibility with section headings
- Move channels before messages in all nav menus for logical grouping
- Add optgroup labels (Standard/Custom) to message channel filter
- Capitalize built-in "Test" channel name for consistency
- Shorten "Advertisements" to "Adverts" in UI labels
- Lay out channel cards with side-by-side QR codes
- Shrink homepage nav cards for better fit
2026-05-20 15:14:41 +01:00
Louis King 3ad288433d Removed old agent skills 2026-05-20 14:13:22 +01:00
Louis King 5f6d44c7b8 Add database-backed channels with role-based visibility and web dashboard
Replaces env-var channel keys with a Channel database model and periodic
DB refresh in the collector. Adds Channels dashboard page with QR codes,
channel visibility filtering on messages/dashboard APIs, and channel card
navigation to filtered messages view.
2026-05-20 00:37:05 +01:00
JingleManSweep d2579dd51d Merge pull request #221 from ipnet-mesh/docs/fix-readme-observer-notes
Update README observer section to match current packetcapture config
2026-05-19 20:33:34 +01:00
JingleManSweep 7638f21e93 Merge branch 'main' into docs/fix-readme-observer-notes 2026-05-19 20:31:42 +01:00
JingleManSweep 9a98e35d53 Merge pull request #209 from ipnet-mesh/renovate/lit-html-3.x-lockfile
chore(deps): update dependency lit-html to v3.3.3
2026-05-19 20:25:07 +01:00
JingleManSweep dd2d1006aa Merge branch 'main' into docs/fix-readme-observer-notes 2026-05-19 20:23:32 +01:00
JingleManSweep 09907efa0f Merge branch 'main' into renovate/lit-html-3.x-lockfile 2026-05-19 20:23:06 +01:00
JingleManSweep 564f81fc6f Merge pull request #220 from ipnet-mesh/renovate/daisyui-5.x-lockfile
chore(deps): update dependency daisyui to v5.5.20
2026-05-19 20:22:48 +01:00
Louis King 1d4d046b41 Update README observer section to match current contrib/packetcapture config 2026-05-19 20:21:40 +01:00
renovate[bot] dda36d70d4 chore(deps): update dependency daisyui to v5.5.20 2026-05-19 00:59:34 +00:00
renovate[bot] b1c58d0124 chore(deps): update dependency lit-html to v3.3.3 2026-05-18 20:47:32 +00:00
JingleManSweep 50609016a3 Merge pull request #219 from ipnet-mesh/fix/packet-capture-default-compose-vars
Added default Compose vars
2026-05-18 21:46:57 +01:00
Louis King c7ec0362c3 Added default Compose vars 2026-05-18 21:44:45 +01:00
JingleManSweep 197992c0a9 Merge pull request #218 from ipnet-mesh/chore/gitignore-fixes
Updated gitignore
2026-05-18 21:39:52 +01:00
Louis King 4c6f8d19e8 Updated gitignore 2026-05-18 21:37:34 +01:00
JingleManSweep 452a1a270b Merge pull request #217 from ipnet-mesh/fix/packet-capture-typo
Updates
2026-05-18 21:19:38 +01:00
Louis King bd21044c84 Updates 2026-05-18 21:12:22 +01:00
JingleManSweep 8f9cc8219b Merge pull request #216 from ipnet-mesh/chore/packet-capture-tweaks
Updates
2026-05-18 21:09:08 +01:00
Louis King 994ecb61aa Updates 2026-05-18 21:06:47 +01:00
JingleManSweep f2ebaacb22 Merge pull request #215 from ipnet-mesh/chore/add-meshrank-contrib
Updated meshcore-packet-capture contrib example to support MeshRank
2026-05-18 16:43:49 +01:00
Louis King 59c24dd64a Updated meshcore-packet-capture contrib example to support MeshRank 2026-05-18 16:41:46 +01:00
JingleManSweep 9f184da07e Merge pull request #214 from ipnet-mesh/feat/sqlite3-docker-image
feat: add sqlite3 CLI to Docker image for database debugging
2026-05-17 16:45:11 +01:00
Louis King 66f3578bfe feat: add sqlite3 CLI to Docker image for database debugging
Operators can now exec into containers to inspect and query the SQLite
database directly without ad-hoc package installs that are lost on restart.
2026-05-17 16:43:05 +01:00
JingleManSweep cdb0c4ab4c Merge pull request #213 from ipnet-mesh/fix/advertisement-frequency
feat: add route type tracking and flood-only defaults for advertisements
v0.10.5
2026-05-15 21:06:59 +01:00
Louis King ec897e21e8 fix: improve advert type badge and observer count UX
- Move route type badge left of observer count on mobile cards
- Hide route type badge when unknown instead of showing 'Unknown'
- Change observer count badge to badge-primary for visibility
- Remove satellite dish icon from observer count badge
2026-05-15 21:05:08 +01:00
Louis King 9afff5bc70 feat: add route type tracking and flood-only defaults for advertisements
Track advertisement route type (flood/transport_flood/direct/transport_direct)
and node advert timestamp to distinguish zero-hop from flood adverts, improve
deduplication with 300s buckets, and default all dashboard/ad-API queries to
flood-only (including NULL for historical records).
2026-05-15 20:55:48 +01:00
JingleManSweep 2d5bea2460 Merge pull request #212 from ipnet-mesh/fix/recent-adverts-timestamps
fix: add public_key filter to advertisements API
2026-05-15 19:20:52 +01:00
Louis King f716e34bf5 fix: add public_key filter to advertisements API endpoint
The node detail page sends a public_key query param when fetching
recent advertisements, but the API silently ignored it (FastAPI
ignores unknown query params). This returned the 10 most recent ads
network-wide instead of for the specific node, making all dates
appear as today.
2026-05-15 19:18:35 +01:00
JingleManSweep 282281c52d Merge pull request #211 from ipnet-mesh/fix/node-retention-foreign-key
fix: enable async SQLite FK enforcement and clean up orphaned node relations
v0.10.4
2026-05-15 16:46:31 +01:00
Louis King 78d54b76e0 fix: enable async SQLite FK enforcement and clean up orphaned node relations
The async SQLAlchemy engine was missing PRAGMA foreign_keys=ON, causing
ondelete="CASCADE" constraints to be silently ignored when the collector
deleted inactive nodes. This left orphaned rows in user_profile_nodes,
event_observers, and node_tags, which crashed the API with AttributeError
when accessing assoc.node.public_key on null relationships.

- Add FK PRAGMA listener to async engine (database.py)
- Add null-guard in _build_adopted_nodes() and refactor list_profiles()
- Add cleanup_orphaned_node_relations() covering all 3 dependent tables
- Integrate orphan cleanup into scheduled retention cycle (subscriber.py)
- Add --node-cleanup/--node-cleanup-days flags to CLI cleanup command
- Fix truncate cascade warning to include user_profile_nodes/event_observers
- Add FK PRAGMA to test fixtures for cascade verification
- Add upgrade note to docs/upgrading.md
2026-05-15 16:43:38 +01:00
JingleManSweep 19d04b2a3b Merge pull request #208 from ipnet-mesh/chore/add-hub-networks-readme
docs: add MeshCore Hub Networks section and reorder translation alert
v0.10.3
2026-05-11 22:12:52 +01:00
Louis King 8fa56337bf docs: use bullet list for networks and move section after Overview 2026-05-11 22:10:57 +01:00
Louis King 13e915feef docs: separate UK and non-UK networks onto own lines 2026-05-11 22:07:52 +01:00
Louis King 0168d98990 docs: add MeshCore Hub Networks section and move translation alert to Contributing 2026-05-11 22:05:28 +01:00
JingleManSweep 4dae1a2e0a Merge pull request #203 from ipnet-mesh/renovate/tailwindcss-monorepo
chore(deps): update tailwindcss monorepo to v4.3.0
2026-05-11 22:02:20 +01:00
renovate[bot] b234183ad3 chore(deps): update tailwindcss monorepo to v4.3.0 2026-05-11 20:34:36 +00:00
JingleManSweep 069afca74c Merge pull request #207 from ipnet-mesh/chore/member-operator-fixes
fix: member count badge and operator-only filter dropdowns
2026-05-11 21:33:47 +01:00
Louis King 6385f22ac3 fix: member count badge and operator-only filter dropdowns
- Fix Members page badge showing higher count than displayed profiles
  by counting operators + members instead of all profiles
- Filter dropdowns on Nodes, Advertisements, and Map pages to show
  only operators (since only operators can adopt nodes)
- Add roles field to /map/data profiles for client-side filtering
- Add all_operators and filter_operator_label i18n keys (en, nl)
- Fix flash banner test isolation from .env NETWORK_ANNOUNCEMENT
2026-05-11 21:30:59 +01:00
JingleManSweep 92f56fa24b Merge pull request #206 from ipnet-mesh/feat/flash-banner
feat: add network announcement flash banner
v0.10.2
2026-05-09 12:29:47 +01:00
Louis King dd36a240ba feat: add network announcement flash banner with Markdown support
Add NETWORK_ANNOUNCEMENT env var that displays a dismissible flash banner
on every page when set. Announcement text supports Markdown (bold, italic,
links, inline code) rendered to HTML server-side at startup.
2026-05-09 12:27:20 +01:00
JingleManSweep 46b9c37eb9 Merge pull request #205 from ipnet-mesh/chore/hide-test-users
feat: hide users with test OIDC role from public views
v0.10.1
2026-05-09 00:33:24 +01:00
Louis King cee487ef42 feat: hide users with test OIDC role from public views
Add OIDC_ROLE_TEST config var (default: 'test') to exclude test users
from dashboard stats, member counts, and the Members page. Uses
server-side filtering with exclude_test query param (default: true) and
client-side defense-in-depth filter in members.js.

- Add oidc_role_test to WebSettings in config.py
- Exclude test users from operator/member count queries in dashboard.py
- Add exclude_test param to GET /api/v1/user/profiles in user_profiles.py
- Filter test users client-side in members.js via role_names.test config
- Wire oidc_role_test into app.state and frontend config in web/app.py
- Document OIDC_ROLE_TEST in AGENTS.md and .env.example
2026-05-09 00:31:03 +01:00
JingleManSweep bbc51531b5 Merge pull request #204 from ipnet-mesh/fix/members-profile
fix: allow role-less OIDC users to save their own profile
2026-05-08 23:51:53 +01:00
Louis King 829971c174 fix: allow role-less OIDC users to save their own profile
The web proxy's endpoint access mapping previously required one of
(admin/operator/member) roles for PUT /api/v1/user/profile. This
blocked OIDC users with no assigned roles from saving their own profile.

Add an _AUTHENTICATED sentinel access level that grants access to any
logged-in user regardless of roles, and apply it to the profile PUT
endpoint. The API layer already enforces owner-only checks via
RequireUserOwner, so the proxy role gate was redundant.
2026-05-08 23:49:21 +01:00
JingleManSweep fbb2ebc9c6 Merge pull request #201 from ipnet-mesh/chore/prerelease-tidying
docs: sync documentation with source code before release
v0.10.0
2026-05-06 19:26:04 +01:00
Louis King e034dfe81d docs: sync documentation with source code before release
Remove stale members.yaml references (post-members-refactor), add
missing env vars to AGENTS.md (API_HOST, WEB_HOST, CORS_ORIGINS,
NETWORK_*), fix project structure tree, add backward-compat note for
MQTT_TOPIC_PREFIX, and update nl.json/i18n.md members section.
2026-05-06 19:23:35 +01:00
JingleManSweep 3c343eb2fe Merge pull request #200 from ipnet-mesh/chore/markdown-parsing-map-filters
feat: improve markdown prose styling, map popup overlay, and collapsible filters
2026-05-06 19:04:56 +01:00
Louis King 9a65018235 chore: update web dashboard screenshot 2026-05-06 19:02:34 +01:00