Release notes
Se även
- [[news_feeds_setup]] — deploy-workflow för Nyhetsnavet
- [[news_feeds_backlog]] — backlog och prioriterade förbättringar
- [[news_feeds_security_ux_2026-04-12]] — säkerhet och UX-session 2026-04-12
- [[shared-homelab-state]] — Nyhetsnavet k8s-status och version
0.3.18 (2026-05-26)
- Säkerhet: DOM XSS-ytan reducerad — alla innerHTML-anrop ersatta med replaceChildren()/textContent/createElement (Qualys QID 150938)
- Säkerhet: NameError-fix för _client_ip i login, export.csv, export.json, export.rss — 500-fel på dessa endpoints åtgärdat
0.3.17 (2026-05-24)
- SEO: ny /om-sida med bakgrundshistoria, kategoribeskrivningar och kontaktuppmaning
- SEO: förbättrad sitemap.xml — 16 URL:er med lastmod, priority och changefreq; inkluderar /trending, YouTube-kategorier och /om
- SEO: statisk og-hero.svg skapad (1200×630) — används som og:image-fallback istf icon.svg
- SEO: kategoriintro-text (1 mening) visas under kategori-flikarna för bättre indexerbart innehåll
- UX: "Om Nyhetsnavet"-länk tillagd i nav-drawern
0.3.16 (2026-05-24)
- Säkerhet: CSP aktiveras nu i enforce-läge (ej längre report-only) — XSS-attacker blockeras aktivt
- Säkerhet: Login-formuläret har nu rate limiting — brute-force-attacker begränsas
- Säkerhet: Export-endpoints (/export.csv, .json, .rss) har nu rate limiting för anonyma anrop
- Säkerhet: /status.json döljer intern diagnostik (failed_sources, refresh_count m.m.) för anonyma — visas bara för admin
- Säkerhet: HSTS max-age höjd till 1 år (31 536 000 s) med preload-direktiv
- Säkerhet: `notice`-meddelanden i admin renderas med escape-filter istf `| safe`
- Performance: ~27 KB onödiga duplicerade data-attribut borttagna från HTML (data-full, data-short, data-preview var identiska med data-entry-summary/short)
0.3.15 (2026-05-24)
- YouTube: kategorifiltrering — Trending, IT & Tech, AI-nyheter, IT-säkerhet, Gaming, Nyheter
- YouTube: AI-nyheter och IT-säkerhet hämtas via YouTube Search API (sökordsbaserat) med view-count-berikning
- YouTube: övriga kategorier (IT & Tech, Gaming, Nyheter) filtrerar YouTube trending-listan per videokategori
- YouTube: separat cache per kategori (300 s TTL) för att inte blanda resultat
- YouTube: förbättrad kortdesign med lazy-loading på thumbnails
0.3.14 (2026-05-24)
- Bugg: "Skicka till backlog" kraschade med 500 om bilagekopiering gav OSError/IntegrityError — nu fångat med loggning och användarmeddelande
- Statistik: HEAD-anrop (NPM-monitoring), kända bots (GPTBot m.fl.) och interna IPs loggas inte längre som besök
- Statistik: historisk data filtreras i alla statistikfrågor — bots, HEAD, interna IPs exkluderas från Besök/Unika IP/Senaste besök
- Statistik: "Unika IP" sorteras nu efter besöksantal (mest besök överst)
0.3.13 (2026-05-24)
- Performance: Flask development server ersatt med gunicorn (2 workers, 120s timeout) — parallell request-hantering, ingen mer "WARNING: This is a development server"
- Ny `src/wsgi.py` — gunicorn WSGI-entry-point som läser `NEWS_FEEDS_LIMIT` och `NEWS_FEEDS_REFRESH_SECONDS` från env med fallback till standardvärden
0.3.12 (2026-05-24)
- Bugg: Backlog-knappen på admin/kontaktsidan gav 500 Internal Server Error vid SQLite-lås — nu hanteras `database is locked` med användarvänligt felmeddelande
- Bugg: Pod-krasch (CrashLoopBackOff) vid start när SQLite var låst — `_ensure_admin_user()` har nu retry-loop med backoff
- Drift: Hälsokontrollens tröskel för inaktuell cache ändrad från `refresh × 2` (10 min) till `refresh × 4` (20 min) — förhindrar falska 502-felkoder under normalt långa refresh-cykler
- Drift: `_persist_cache()` skriver nu atomärt via temp-fil + rename och loggar fel istället för att svälja dem tyst
0.3.9 (2026-05-08)
- UX: kollapsande header vid scroll — topbar (titel, sökruta, knappar) gömmer sig mjukt när man skrollar ner, visas igen vid uppåtskrollning; enbart kategori-flikarna kvarstår synliga
- UX: CSS-transition på `max-height` + `opacity` för topbar (0.28s) och padding på header-inner (0.25s) — ingen layout-hopp
- UX: JS scroll-riktningsdetektering — header kollapsar efter 80px nedåtskrollning, öppnar direkt vid uppåtskrollning
0.3.8 (2026-04-26)
- Tillgänglighet: skip-nav-länk, `aria-current` på kategorinavigation, `aria-pressed` på toggle-knappar, `aria-label` på modal-backdrop
- Tillgänglighet: fokus-trap och fokus-återlämning i filterdrawer, förbättrade alt-texter på bilder
- Tillgänglighet: `<div class="section-title">` → `<h2>` för korrekt rubrikhierarki
- UX: j/k-tangentbordsnavigation mellan artiklar (Feedly-stil)
- UX: AJAX load-more med IntersectionObserver — laddar nästa sida utan sidladdning
- UX: "Markera alla som lästa" — optimistisk UI-uppdatering med batchendpoint (`/entries/read-all`)
- UX: JS-baserad soft-refresh ersätter `<meta http-equiv="refresh">` — respekterar öppna modaler
- Performance: CSS externaliserad till cachebar fil (`news-feeds.css`) — sparar ~140 kB per sidladdning
- Performance: Google Fonts laddas icke-blockerande via `media="print" onload`
- SEO: `og:image` och `twitter:image` med dynamisk hjältebildsURL
- Säkerhet: rate limiting på publika GET-endpoints (IP-baserat)
- Drift: `logging`-modul integrerad i alla bare-except-block
0.3.7 (2026-04-13)
- Säkerhet: DNS rebinding-skydd — `_resolve_and_validate_host()` resolvar och validerar alla IP:n mot SSRF-blocklistan *innan* varje HTTP-anrop i OG-bild- och image-proxy-hämtning
- Säkerhet: rate limiting på `/entries/read`, `/entries/save` och `/entries/mute` (120 req / 60 s per användare, returnerar HTTP 429)
- UX: toast-notiser vid nätverksfel, serverfél (5xx) och rate limit (429) — fade-in/fade-out, svenska texter
- Tester: 28 nya pytest-tester i `tests/test_ssrf.py` för SSRF-skyddsfunktionerna
0.3.6 (2026-04-12)
- Säkerhet: SSRF-skydd för image proxy och OG-bild-hämtning — blockerar RFC 1918, länk-lokal (169.254.x.x), loopback och IPv6 ULA/link-local
- Säkerhet: OG-bild-hämtning begränsad till 5 MB och 5 s timeout
- Säkerhet: `security_widget_sections`-whitelist i admin för att förhindra obehörig åtkomst
- Säkerhet: `load_user` skyddad med try/except för robustare sessionshantering
- UX: focus trap i modaler — Tab-navigering stänns inne i öppna dialoger
- UX: `:focus-visible`-CSS för tydligare tangentbordsfokus
- Drift: service worker uppdaterad till v2 med förbättrad cache-strategi
0.3.5 (2026-03-02)
- Admin: ny knapp `Skanning cleanup` som rensar kända scanner-artefakter (Qualys/ZAP) i både konton och kontaktmeddelanden
- Admin: `Radera alla gömda` använder nu samma DB-lock-retry som övriga tunga delete-operationer
- Tester: utökad regression för `scan-cleanup` i admin
0.3.4 (2026-03-02)
- Admin: fix för `Radera testmeddelanden` så databaslås inte längre ger 500; operationen retry:as och visar tydligt felmeddelande vid upptagen DB
- Admin: bulk-radering av e-post/domän stödjer nu flera värden samtidigt (kommaseparerat eller mellanslag), t.ex. `qualys.com, example.com`
- Tester: ny regression för admin bulk cleanup av användare/kontaktmeddelanden
0.3.3 (2026-03-02)
- Adminpanel: omarbetad responsiv layout för mobil/surfplatta/desktop med förbättrad navigering och bättre section-hantering
- Adminpanel: ny topprad med snabbåtgärder (status.json, release notes, exportlänkar)
- Adminpanel: nya summary-kort för väntande konton, öppna backlogpunkter, olösta kontaktärenden och senaste refresh-tid
- Adminpanel: ny funktion för CSV-export (`users`, `contacts`, `backlog`, `views`) via `/admin/export.csv`
- Adminpanel: inbyggd snabbsökning som filtrerar sektioner i realtid
0.3.2 (2026-03-02)
- UI: story-modal i Trending visas nu ovanpå header/filterpanel och klipps inte
- UX: förbättrad viewport-hantering i modal (`dvh`/`vh`) så hela storyn blir nåbar via scroll
- Mobil: mjukare scroll i modal via `-webkit-overflow-scrolling: touch`
0.3.1 (2026-02-09)
- UI: stabilare fallback för källikoner (favicon först, Clearbit som fallback)
- Media: image-proxy hanterar HTML-escapade URL:er för färre 404:or
- Stabilitet: minskad risk för SQLite “database is locked” via WAL/busy-timeout
- Säkerhet: security headers även för statiska assets
- Drift: dokumenterad snabb ZAP-baseline fallback
0.3.0 (2026-02-08)
- UI: export och sekundära länkar samlade i menyer
- UX: filter-knapp visar aktivt antal filter
- UI: tydligare segmenterade toggles för Magasin/Kompakt och Story-läge
- UX: sticky kategoribar för snabb navigering
- UI: tydligare hierarki i trending‑actions (primär/sekundär)
- UI: progressive bildbakgrunder för mjukare laddning
0.2.9 (2026-02-08)
- Prestanda: pagination/ladda fler för nyhetslistan (lägre DOM och snabbare render)
- UX: refresh-status visar “Uppdaterar…” tills första uppdatering finns
- UI: delning samlad i en meny per artikel (mindre visuell brus)
0.2.8 (2026-01-31)
- Prestanda: caching av feeds, parallell hämtning och extern refresh‑worker (valbart)
- Arkiv & sök: 30‑dagars historik, fulltextsökning och tidsfilter
- Export: CSV/JSON/RSS för vyer + SOC‑CSV
- Profiler: sparar tidsfilter, visningsläge och dubblett‑val
- Sparat: förbättrad tom‑state och export av sparade artiklar
- Social delning på kort (X/LinkedIn/Facebook/Kopiera)
- SOC: CVE‑highlight, snabbfilter (inkl. CVE) och risk‑badge
- Admin: status.json, refresh‑logg, per‑källa statuspanel
- Säkerhet: CSP report‑to + rotation, same‑origin‑skydd, sanitizing av innehåll
- Stabilitet: endpoint‑aliaser + normaliserade url_for‑länkar
- UX: fler snabbfilter, top stories‑polish, release notes‑sida
- Feed‑fix: tolererar trailing junk i RSS (ScienceDaily)
- Tester: utökad pytest‑täckning + UI‑tester
0.2.7 (2026-01-29)
- SOC-vy: CVE-case cards med expanderbar tidslinje och källor
- Server-side enrichment för security (CVE/type/vendor/risk) + riskbadges
- Nya tidsfilter (1h/6h/24h/7d/custom) med persistering
- Avancerade SOC-filter: vendor, risknivå, typ
0.2.6 (2026-01-25)
- Bytte ut blockerad MyFitnessPal-feed mot Harvard Nutrition Source
0.2.5 (2026-01-25)
- Uppdaterade Hälsa & träning-källor med fungerande RSS-länkar
- Lade till nya källor: BBC Health, NYTimes Well, The Guardian Health, NPR Health
0.2.4 (2026-01-25)
- Fixade brutna RSS-länkar för Hälsa & träning-kategorin
0.2.3 (2026-01-25)
- Ny kategori Hälsa & träning med subkategorier och fler RSS-källor
- Filter för delkategorier i snabbchips och Drawer
0.2.2 (2026-01-25)
- Snabbfilter och dedupe i listflödet (visa dubbletter vid behov)
- Scroll-återgång och retry-knapp vid fel
- Story-vy visar bild och extra polish i metadata
- CSP report-only-stöd + extra säkerhetsheaders
0.2.1 (2026-01-25)
- Ny vyväljare för Magasin/Kompakt (sparar valet lokalt)
- Trending-kort med thumbnail, sammanfattning och källbadges
- Story-vy som modal eller egen sida (växlas i Drawer)
0.2.0 (2026-01-24)
- Ny tvånivå-header med filter-drawer och refresh-status
- Magasinlayout med hero + top stories och förbättrad trending
- Coverage-kluster med expanderbara källor
- Thumbnail-pipeline med OG-fallback + image proxy/cache
- Kontaktformulär uppgraderat och uppladdningar hårdare validerade
0.1.0 (2026-01-23)
- Added admin stats drilldown for unique IPs and new accounts
- Added admin announcements with one-to-one and broadcast messaging
- Added release notes page and version badge in the UI
- Security feeds panel is collapsed by default in admin