prop/lib/microwaveprop_web
Graham McIntire 14b90ee9f3
fix(security,perf): address 9 audit findings (access control, DoS, crashes)
- Beacon detail endpoints (LiveView + REST API) now hide unapproved
  beacons from anonymous and unauthorized viewers; only the submitter
  and admins can see pending records before approval. Adds
  Beacons.get_visible_beacon/2 with scope-aware checks.
- API contact pagination now honors per_page end-to-end.
  Radio.list_contacts/1 accepts :per_page and clamps to 200.
- API rate limiter: ETS table is now owned by a long-lived Sweeper
  GenServer (won't die with a request task); Sweeper periodically
  prunes expired-window rows to bound memory; init_table/0 race is
  rescued.
- /scores/cells and /weather/cells: add per-IP rate limiting and a
  shared GridBounds clamp/413 guard so global / oversized viewports
  no longer drive unbounded binary responses.
- NEXRAD PNG unfilter (sub/up/average/paeth): replace acc++[byte]
  + Enum.at(acc, idx-bpp) with O(n) binary recursion. Decode time
  for the 12200x5400 n0q frame goes from quadratic to linear.
- LiveTableFooter.parse_page and ScoresFile.fetch_bound: switch
  String.to_integer/String.to_float to Integer.parse/Float.parse,
  fall back to defaults instead of raising.
- PathLive and MapLive band-event handlers: replace
  String.to_integer(params["band"]) with parse_int / parse_band_param
  so a non-numeric band parameter no longer crashes the LiveView.
2026-05-11 18:53:21 -05:00
..
api fix(security,perf): address 9 audit findings (access control, DoS, crashes) 2026-05-11 18:53:21 -05:00
components ux: brand title and header label as 'NTMS Microwave Propagation' 2026-05-04 08:21:22 -05:00
controllers fix(security,perf): address 9 audit findings (access control, DoS, crashes) 2026-05-11 18:53:21 -05:00
live fix(security,perf): address 9 audit findings (access control, DoS, crashes) 2026-05-11 18:53:21 -05:00
plugs fix(remote_ip): log IPv6 in canonical hex via :inet.ntoa 2026-04-25 18:05:46 -05:00
endpoint.ex fix(web): suppress HEAD request logs 2026-04-22 16:50:58 -05:00
grid_bounds.ex fix(security,perf): address 9 audit findings (access control, DoS, crashes) 2026-05-11 18:53:21 -05:00
live_helpers.ex refactor: deduplicate helpers and simplify Scorer 2026-04-28 14:14:34 -05:00
live_table_footer.ex fix(security,perf): address 9 audit findings (access control, DoS, crashes) 2026-05-11 18:53:21 -05:00
live_table_resource.ex fix(dialyzer): actually fix LiveTable warnings instead of hiding them 2026-04-21 12:58:10 -05:00
location_resolver.ex refactor: deduplicate helpers and simplify Scorer 2026-04-28 14:14:34 -05:00
metrics_plug.ex fix(metrics): defer ETS cron flusher on /metrics scrape 2026-05-02 10:59:24 -05:00
router.ex feat(settings): manage /api/v1 tokens from user settings UI 2026-05-09 09:59:56 -05:00
skew_t.ex Rename ERA5 → NARR across the codebase 2026-04-16 09:22:23 -05:00
telemetry.ex test: gate Oban queue-depth poller on :start_telemetry_poller flag 2026-05-08 10:40:45 -05:00
user_auth.ex fix(dialyzer): clear 125+ warnings under strict flags 2026-04-21 10:30:06 -05:00