Commit graph

829 commits

Author SHA1 Message Date
a028695d3b
format 2026-02-14 13:57:25 -06:00
35fc993db0 ui: remove border above nav tabs on org and user settings 2026-02-14 13:57:03 -06:00
ea7d82a489 fix: make Configure button toggle - clicking again collapses the form 2026-02-14 13:48:22 -06:00
00a0e73821 fix: only show Gaiia webhook config when Configure is clicked 2026-02-14 13:45:18 -06:00
392b1e135c fix: trace page crash - detected_at → changed_at to match ConfigChangeEvent schema 2026-02-14 13:44:07 -06:00
950f4d9ae0 fix: implement Gaiia webhook signature verification per their spec
- Header: X-Gaiia-Webhook-Signature with t=timestamp,v1=signature format
- Signed payload: timestamp.body (not just body)
- 5-minute timestamp tolerance to prevent replay attacks
- Updated tests to match new 4-arity verify_signature/4
2026-02-14 13:37:26 -06:00
9b5647a055 fix: Gaiia webhook secret is user-pasted from Gaiia, not auto-generated; update setup instructions 2026-02-14 13:34:32 -06:00
86acb04353 feat: add help sections for insights, map, API tokens, REST/GraphQL APIs; remove Gaiia webhook secret UI, update setup to use All Events 2026-02-14 13:33:27 -06:00
596b404baf docs: add Network Insights, Network Map, API Tokens, REST API, and GraphQL API sections to help page 2026-02-14 13:32:48 -06:00
afa58df888
fix: add Permissions-Policy header to suppress browsing-topics warning
Added Permissions-Policy header with browsing-topics=() to suppress console
warnings about unrecognized Privacy Sandbox API features. Header is now applied
in all environments (dev and prod) while other security headers remain
production-only.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-14 13:31:08 -06:00
5df5c97c45 feat: add geographic location to sites with geocoding, address fields, and Leaflet.js network map 2026-02-14 13:07:14 -06:00
2ea849d622 feat: add developer and product links to marketing footer 2026-02-14 13:07:14 -06:00
74f112642d feat: make network insights actionable with affected device links and metadata 2026-02-14 13:07:14 -06:00
146f5745cf
fix: resolve compilation errors, test failures, and credo issues
- Escape HEEx template braces in GraphQL/API docs with raw(~S[...])
- Fix test assertions for updated marketing copy and UI text
- Extract helper functions in GraphQL resolvers to reduce nesting depth
- Create shared ErrorHelpers module for API controllers
- Fix ETS race condition in brute force whitelist cache for async tests
- Fix property test generators to use ASCII instead of printable unicode
- Add alert_severity helper to site_live/show
- Update accounts fixtures for explicit user confirmation
2026-02-14 12:23:10 -06:00
eb76f9475e feat: add GraphQL API with Absinthe, full schema, resolvers, and documentation 2026-02-14 11:28:57 -06:00
59a786d8de docs: add API documentation for all new endpoints 2026-02-14 11:28:57 -06:00
9d437a8119 ux: improve PagerDuty integration clarity
- Replace terse helper text with step-by-step setup guide in config form
- Add what-gets-synced breakdown when PagerDuty is enabled
- Clear visual hierarchy with numbered steps and inline callout
2026-02-14 11:28:57 -06:00
bb4ff232e3 feat: add PagerDuty Events API v2 integration with 2-way alert sync 2026-02-14 11:28:57 -06:00
a8339797fa feat: expand REST API with alerts, agents, org settings, members, integrations, metrics, activity endpoints 2026-02-14 11:28:57 -06:00
685e131cb9 copy: emphasize 'first 10 devices always free' across marketing page 2026-02-14 11:28:57 -06:00
75f64d0109 docs: add concrete docker-compose example to remote pollers help section
Show the actual docker-compose.yml with agent + watchtower setup.
Emphasize lightweight nature and auto-updates.
2026-02-14 11:28:57 -06:00
ab6968eb50 copy: 'You have LibreNMS' instead of 'You've got' 2026-02-14 11:28:57 -06:00
301c3c1803 fix: simplify pricing to single plan — 10 free devices, $3/device/month after
All features available to everyone. No tiered plans.
2026-02-14 11:28:57 -06:00
2c45b09588 fix: remove business plan, change pro CTA to 'get started free' 2026-02-14 11:28:57 -06:00
cd6fe453a5 fix: use hi@towerops.net consistently (was hello@ on home page) 2026-02-14 11:28:57 -06:00
f326eb5dd4 feat: require email verification before first login
- Remove auto-confirmation on registration (register_user and register_user_with_organization)
- Add deliver_user_confirmation_instructions/2 and confirm_user/1 to Accounts context
- Add verify_email_token_query/2 and by_user_and_contexts_query/2 to UserToken
- Make deliver_confirmation_email public in UserNotifier
- Send confirmation email after registration in both flows
- Block unconfirmed users at password login with helpful message
- Add UserConfirmationController with confirm/resend routes
- Add resend confirmation link to login page
- Update test fixtures to confirm users after registration
2026-02-14 11:28:57 -06:00
b897330a7e docs: add integrations and org settings sections to in-app help page 2026-02-14 11:28:57 -06:00
95ce9ad06d refactor: org settings into tabbed interface with integrations 2026-02-14 11:28:57 -06:00
8d00a04187
feat: add FluxCD image automation, fix Preseem duplicate AP crash
Switch deployment pipeline from GitLab Agent kubectl to FluxCD image
automation. CI now only builds and pushes tagged images to Forgejo
registry; FluxCD detects new tags and updates the deployment manifest.

Fix Ecto.MultipleResultsError on /dashboard when a device has multiple
Preseem access point records by using limit(1) instead of Repo.get_by.
2026-02-14 10:30:12 -06:00
c37ae76ceb fix: device index uses device_role instead of nonexistent device_type, last_checked_at instead of last_seen_at; make TimescaleDB migrations conditional for dev/test 2026-02-14 10:13:03 -06:00
715a20dd09 fix: dashboard activity feed uses correct field names (summary/timestamp instead of description/inserted_at) 2026-02-14 09:57:37 -06:00
e195e5c9e8 fix: close UDP sockets in error paths to prevent fd leak
get_bulk, set, and get_multi used 'with' chains that skipped
close_socket when the operation failed, leaking file descriptors.
Over time this exhausted the fd limit causing EMFILE crashes.

Switched to case + try/after to guarantee socket cleanup.
2026-02-14 09:50:12 -06:00
12b1a64f8d fix: use atom for Ecto.Enum alert_type in activity feed query 2026-02-13 19:52:29 -06:00
0fc36524b4 fix: resolve 500 errors on /activity and /changelog
- Activity feed: use schema modules instead of string table names in Ecto
  queries to fix UUID encoding (Postgrex expected binary, got string)
- Changelog parser: remove plain hyphen from separator character class
  to prevent splitting on date hyphens (2026-02-13)
2026-02-13 19:49:12 -06:00
67eac2f1c9 fix: prevent cascading crash in error email handler when SES not configured 2026-02-13 19:44:51 -06:00
9e7ee5099d refactor: fix all credo strict issues, format all code, fix broken routes
- Fix broken route paths in dashboard (/discovery, /subscribers/trace, /config-changes)
- Fix insights empty state settings link (org-scoped route)
- Add underscores to all 86400 literals across 6 files
- Alphabetize aliases in search.ex and agent_channel.ex
- Extract changelog parser helper to reduce nesting
- Extract dashboard impact calculation to reduce nesting
- Refactor agent_channel config change detection (pattern match, extract function)
- Combine double Enum.reject into single call in trace.ex
- Fix line length in trace.ex search query
- Replace length/1 > 0 with != [] in trace_live
- Run mix format on all files
2026-02-13 19:34:40 -06:00
493b1e8001 fix: correct broken route paths in dashboard and insights templates 2026-02-13 19:27:32 -06:00
bc128388ba feat: add loading skeletons and page transitions 2026-02-13 19:18:28 -06:00
ad6e9b91a3 feat: add global CSS polish — transitions, hover effects, scrollbar styling, status pulse 2026-02-13 19:17:38 -06:00
2389e11469 feat: add search trigger button with ⌘K hint in navbar 2026-02-13 19:13:11 -06:00
bfe552cb47 feat: enhance dashboard with uptime, quick actions, mini activity feed 2026-02-13 19:13:04 -06:00
88b5b55a01 feat: enhance activity feed with real-time updates, time grouping, search 2026-02-13 19:12:49 -06:00
314ed610d3 feat: add polished empty states across all pages 2026-02-13 19:11:54 -06:00
b7204b604d fix: remove experimental badges from Alerts and Network Map nav items 2026-02-13 19:11:34 -06:00
dec6f0f271 feat: rewrite marketing landing page for WISP operators
- Pain point section: disconnected tools, slow impact assessment
- WISP-specific features: impact dashboard, subscriber trace, alert triage, config tracking
- Pricing tiers: Starter (free/10 devices), Pro (/dev/mo), Business (/dev/mo)
- Use case sections: NOC, Help Desk, Owner perspectives
- Tech details: 786 device profiles, secure agent arch, SNMP v1/v2c/v3
- Updated both changelogs
2026-02-13 19:07:04 -06:00
608bad0cf6 Add What's New changelog page
- ChangelogParser: parses priv/static/changelog.txt into structured entries
- ChangelogLive: timeline view with DaisyUI styling
- Route at /changelog in authenticated scope
- What's New link in org dropdown menu
2026-02-13 19:01:19 -06:00
f64a1690fd fix: remove duplicate age_text/severity_color that conflicted with sub-agent's versions 2026-02-13 19:00:46 -06:00
eb4556300e fix: safer float formatting in site show template 2026-02-13 18:59:02 -06:00
08b876b207 fix: add missing age_text and severity_color helpers to alert_live 2026-02-13 18:58:13 -06:00
2c1b749487 fix: prevent nil crashes in trace template (Decimal, Calendar) 2026-02-13 18:56:55 -06:00