Commit graph

8 commits

Author SHA1 Message Date
14bb9f97ab Lytt på alle adresser (IPv4 og IPv6) som standard
SOAPBOX_BIND er nå tom som standard = alle adresser, så Caddy på en
annen maskin når appen over Tailscale/MagicDNS uansett om navnet løses
til v4 eller v6. Waitress bandt bare 0.0.0.0 inne i containeren, så
IPv6-tilkoblinger via pasta ble avvist; nå brukes listen="*:8080"
(dual-stack). Verifisert mot maskinens Tailscale-IPv4 og -IPv6.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 15:13:32 +02:00
a0b48bc39a SOAPBOX_BIND: velg adresse containeren eksponeres på (Caddy på annen maskin)
Standard 127.0.0.1 (Caddy lokalt). Kjører Caddy på en annen maskin over
Tailscale, settes SOAPBOX_BIND til denne maskinens Tailscale-IP så appen
bare lytter på tailnettet. Brukes av run.sh og compose.yaml; nytt
Caddyfile-eksempel for oppsettet.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 15:09:39 +02:00
73d1e46467 Utled SOAPBOX_BASE_PATH fra stien i SOAPBOX_SITE_URL
https://domene.no/blog gir automatisk base-path /blog. SOAPBOX_BASE_PATH
beholdes kun som overstyring (tom verdi) for proxyer som stripper
prefikset. Dokumentasjon og Caddyfile-eksempel oppdatert; README hadde
også utdatert slug-eksempel og beskrivelse av SITE_URL.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 15:04:13 +02:00
4faeeeaf81 Forklar SOAPBOX_SITE_URL i .env.example (Open Graph, feed, sitemap)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 14:59:07 +02:00
4d9b6f9d90 run.sh: automatisk backup med rotasjon, og --restart=always
Før hver oppstart eksporteres datavolumet til
SOAPBOX_BACKUP_DIR/soapbox-data-<UTC-tidsstempel>.tar.gz; de
SOAPBOX_BACKUP_KEEP nyeste beholdes (standard 5, 0 = av). Bind-mounts
pakkes med tar, navngitte volum med podman volume export.

--restart unless-stopped byttet til --restart=always i run.sh og
compose.yaml: podman håndterer ikke unless-stopped som docker.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 14:41:16 +02:00
d47558c6c1 Sikkerhet: tett path traversal i post-id og herd innlogging/upload
Funn fra sikkerhetsgjennomgang:
- HØY: post_id ble ikke validert, så en gjest kunne nå andres innlegg
  via gjest/../../posts/<slug> (lese utkast, laste opp/slette bilder,
  publisere eierens utkast). Slug og gjestenavn valideres nå mot samme
  alfabet de lages med, og stien sjekkes etter oppslag.
- Bilder: pikselantall sjekkes før dekoding (maks 40 MP), og
  DecompressionBombError håndteres.
- Innlogging: CSRF-token kreves også på login (login-CSRF), og
  innloggingsbrems etter 5 feil per brukernavn.
- Passordbytte ugyldiggjør alle andre sesjoner (stempel i cookien).
- Content-Security-Policy og X-Frame-Options på alle sider; admin har
  ingen inline script lenger (admin.js).
- Gjestenavn og eier-slugs kan ikke lenger kollidere på /navn/.
- Healthcheck respekterer SOAPBOX_BASE_PATH; login-redirect beholder
  base path; run.sh dropper capabilities og setter minnegrense; uv
  pinnet til 0.11.

Rettet også en reell feil: existing_slugs() listet feil katalog
(Path /  er identitet), så slug-unikhet virket ikke.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 14:07:14 +02:00
9eb375e339 Egne temaer i innholdsrepoet, temavalg i innstillinger
Temaer slås opp i content/themes/<navn>/ før de innebygde, slik at et
eget tema følger med i git, backup og ved flytting – uten ny container.
Et tema kan være delvis: manglende maler/filer arves fra green (Jinja
ChoiceLoader, static kopieres lagvis). Valget lagres i site.toml;
SOAPBOX_THEME er bare standardverdi.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 13:45:04 +02:00
5f6fc252a7 Legg til build.sh, run.sh og .env.example
build.sh bygger imaget med build-dato og git-revisjon, run.sh starter
containeren idempotent (podman run --replace) med innstillinger fra .env.
compose.yaml leser nå samme .env. Alle variabler har standardverdier;
.env.example dokumenterer dem.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 12:36:12 +02:00