Commit graph

19 commits

Author SHA1 Message Date
fc5e91479b
refactor: pattern-match CoreComponents.safe_row_id + CallsignController
- CoreComponents.safe_row_id: four function heads dispatch on the row
  shape (atom-key map, string-key map, other map fallback, non-map)
  instead of a cond with Map.has_key? checks.
- Api.V1.CallsignController.validate_callsign: check_callsign_format/2
  splits the validation success/failure branches into two clauses; the
  binary-vs-everything-else dispatch stays in validate_callsign/1.

Adds 5 integration tests for the CallsignController covering invalid,
not-found, success, case-normalization, and length-limit paths. The
test file is async:false because it shares the rate-limiter ETS with
other API tests and could otherwise trip the 100/min per-IP cap.
2026-04-23 14:18:30 -05:00
288b9fbbb2
fix: address security vulnerabilities and concurrency issues
- Fix SQL injection in partition_manager, db_optimizer, and release.ex
- Fix XSS vulnerabilities with proper HTML escaping in LiveViews
- Add proper error handling for email delivery functions
- Fix race conditions with advisory locks and atomic operations
- Replace unsupervised spawn/Task.start with supervised alternatives
- Convert ETS operations to GenServer serialization for thread safety
- Change ETS tables from :public to :protected access
- Add client limits to prevent unbounded memory growth
- Add PubSub cleanup in GenServer terminate callbacks
- Fix device upsert to use atomic Repo.insert_all
2026-03-23 16:59:09 -05:00
6072eebe5b
vendor heroicons SVGs, remove GitHub dependency
Only the 7 SVGs actually used are vendored into priv/heroicons/.
Also fixes the icon component path resolution (was missing the 24/
size directory) and corrects hero-x-mark/hero-map-pin icon names
that included an erroneous hero- prefix.
2026-03-03 13:34:23 -06:00
0061c4b169
Apply TailwindCSS Plus design patterns across site
Dark navbar header with radio icon, refined slideover control panel
with branded header and section cards, polished cards/tables/badges
on info, packets, and about pages using ring borders and shadow-xs.
2026-02-20 17:56:06 -06:00
4de48294c6
Remove DaisyUI, migrate to pure Tailwind CSS with TailwindUI patterns
Replace all DaisyUI component classes with pure Tailwind CSS utility
classes following TailwindUI conventions. Use dark: variants for dark
mode instead of DaisyUI's data-theme semantic color system.

- Remove DaisyUI plugin and theme vendor files
- Configure Tailwind v4 custom dark variant for data-theme attribute
- Migrate all components: cards, tables, badges, buttons, forms,
  navigation, dropdowns, modals, alerts, star ratings, spinners
- Update all auth pages (login, register, settings, password reset,
  confirmation) to TailwindUI card layout
- Update content pages (about, API docs, status, packets, bad packets,
  info, weather) to TailwindUI patterns
- Replace opacity-based text styling with semantic gray colors
- Update test assertions to match new class names
2026-02-19 10:07:50 -06:00
aca0571a3e
Replace JS hooks with LiveView patterns for map page styling, slideover, and theme switching
- Remove BodyClassHook: use CSS :has() selectors on data-map-page attribute
  instead of JS toggling body.map-page class
- Remove ResponsiveSlideoverHook: pass viewport_width via LiveSocket connect
  params and determine initial slideover state server-side
- Convert theme selector from data-set-theme attributes with DOMContentLoaded
  listeners to JS.dispatch("phx:set-theme") with a single event handler
- Fix buggy reRenderAllCharts that incorrectly used `new MapAPRSMap()` as a
  Map constructor; charts now re-render via themeChanged event directly
2026-02-19 09:26:53 -06:00
3e47a83f9d
Fix sidebar panel layout and dark mode support
- Remove duplicate slideover panel that was hidden behind the controls panel
- Fix toggle button positioning (was rendered above viewport at top:-9px)
- Remove conflicting high-specificity CSS that prevented mobile display:none
- Remove width:100vw on map so it properly resizes when panel opens
- Use theme-aware colors for panel background and navigation links
- Wrap navigation links in proper ul.menu for valid HTML and DaisyUI styling
2026-02-18 13:15:03 -06:00
318eb30046
Fix additional nesting depth issues across multiple files
Extracts nested logic into helper functions to comply with Credo
requirements (max nesting depth 2):

- data_builder.ex: Extract historical packet distance filtering
  (filter_historical_by_distance/3, packet_far_enough_from_most_recent?/3)
  Reduces depth 5 -> depth 3

- streaming_packets_pubsub.ex: Extract subscriber message sending
  (send_to_subscriber_if_alive/3)
  Reduces depth 4 -> depth 2

- aprs_symbol.ex: Extract symbol code calculation
  (get_symbol_code_ord/1)
  Reduces depth 3 -> depth 2

- mobile_channel.ex: Extract subscription bounds update
  (update_subscription_bounds/2)
  Reduces depth 3 -> depth 2

- core_components.ex: Extract SVG tag class insertion
  (add_class_to_svg_tag/2)
  Reduces depth 3 -> depth 2

- info_live/show.ex: Extract row mapping for database queries
  (map_digipeater_row/2, map_station_heard_row/2)
  Reduces depth 3 -> depth 2 (2 instances)

Also updates .sobelow-skips with new line numbers from code changes.

Fixes 7 Credo nesting depth issues (2 remaining)
2026-02-09 12:32:42 -06:00
5aae01e66c
add more translations 2025-07-18 11:18:04 -05:00
566198afa7
clean up warnings 2025-07-16 08:55:46 -05:00
fa89712587
main map improvements 2025-07-13 14:58:13 -05:00
41eaec5c8e
add user auth 2025-07-09 08:53:50 -05:00
32cfb36ee9
show dev mode, more imperial 2025-07-07 12:48:51 -05:00
18e3ef183a
more translation 2025-07-06 08:47:05 -05:00
142900c759
liveview links 2025-07-05 13:33:30 -05:00
53dc32f8fc
use daisyui components 2025-07-05 09:22:47 -05:00
172da7d393
upgrade more with modern phoenix 2025-07-05 08:04:06 -05:00
0beb278371
add packet batcher 2025-06-24 15:06:09 -05:00
ce7c50caa1
refactor to use external parser 2025-06-24 14:22:09 -05:00
Renamed from lib/aprs_web/components/core_components.ex (Browse further)