Changeset 9e27d64 in Klonkt for .env.example


Ignore:
Timestamp:
06/14/2026 07:31:23 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
6351545
Parents:
32cc601
Message:

auth: password admin + per-instance Google for listeners (no broker)

Robin's choice: every self-hoster has their own password admin account,
and can optionally let listeners log in to comment using their OWN Google
client. No central broker (that would tie every customer site to Robin's
Google Cloud -> systemic risk on abuse).

  • Admin = username/password (bcrypt). First-time setup via /auth/register (only when there are 0 users); closed afterwards. No public registration.
  • Forgot password: /auth/reset-request -> email (if SMTP configured) with reset link; CLI break-glass npm run reset-admin always works (no email needed).
  • Change password (logged in) restored in /account.
  • Google = per-instance own credentials, OPTIONAL, listeners only -> always role member, never admin (god/admin email is rejected; google_sub mismatch too).
  • config/google.js back to direct Google OAuth; config/mailer.js new (nodemailer).
  • jose removed from deps; nodemailer added.

Security review (workflow) incorporated:

  • Reset token no longer in production logs (dev only).
  • Reset link from PUBLIC_BASE_URL instead of X-Forwarded-Host (host poisoning).
  • Reset tokens stored SHA-256-hashed in the DB.
  • Same-origin check on all state-modifying POSTs (CSRF layer on top of sameSite-lax).
  • Login always runs one bcrypt comparison (no timing enumeration).

Co-Authored-By: Claude <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • .env.example

    r32cc601 r9e27d64  
    55MEDIA_PATH=./storage/media
    66
    7 # ── Google login via de Klonkt-broker ──────────────────────────────
    8 # Inloggen gaat via Google, maar gerouteerd door de centrale Klonkt-broker —
    9 # deze app maakt dus GEEN eigen Google-client aan. Je hoeft hier alleen de
    10 # broker-URL en het eigen publieke origin te zetten. Zonder deze waarden boot
    11 # de app gewoon en toont de loginpagina "nog niet geconfigureerd".
    12 KLONKT_BROKER_URL=https://license.klonkt.com
    13 # Het eigen publieke origin (scheme + host, geen pad/slash). Bepaalt de callback
    14 # (<SITE_ORIGIN>/auth/google/callback) en de audience die we eisen. Dit origin
    15 # moet in de KLONKT_ALLOWED_ORIGINS van de broker staan.
    16 SITE_ORIGIN=https://example.com
     7# Canonieke publieke URL van deze site (scheme + host, geen pad/slash). Gebruikt
     8# voor links in e-mails (wachtwoord-reset) i.p.v. request-headers — voorkomt
     9# host-header-spoofing. Niet gezet? Dan valt het terug op de request-host (dev).
     10PUBLIC_BASE_URL=https://example.com
    1711
    18 # Het Google-e-mailadres dat owner/admin (god) is op deze instance.
    19 # De eerste gebruiker die inlogt wordt sowieso god als de DB nog leeg is.
    20 ADMIN_EMAIL=
     12# ── Beheerder ───────────────────────────────────────────────────────
     13# De beheerder logt in met gebruikersnaam + wachtwoord. Bij de eerste keer
     14# opstarten maak je via /auth/register je beheerdersaccount aan; daarna is
     15# registratie gesloten. Wachtwoord vergeten? -> "Wachtwoord vergeten" (mail,
     16# zie SMTP hieronder) of altijd: `npm run reset-admin` op de server.
     17
     18# ── Google login voor LUISTERAARS (optioneel) ───────────────────────
     19# Wil je dat luisteraars met Google kunnen inloggen om te reageren? Maak dan
     20# een EIGEN Google OAuth-client aan (Google Cloud Console -> Credentials ->
     21# OAuth client ID -> "Web application") en vul hieronder in. Eigen client =
     22# eigen Google Cloud project; deze site hangt nergens centraal aan vast.
     23# Niet ingesteld? Dan is er simpelweg geen Google-knop. Google-login geeft
     24# NOOIT beheerrechten (alleen reageren).
     25# GOOGLE_REDIRECT_URI = <jouw domein>/auth/google/callback (exact in de client zetten)
     26GOOGLE_CLIENT_ID=
     27GOOGLE_CLIENT_SECRET=
     28GOOGLE_REDIRECT_URI=https://example.com/auth/google/callback
     29
     30# ── E-mail (optioneel) — voor "wachtwoord vergeten" reset-links ─────
     31# Niet ingesteld? Dan werkt reset alleen via `npm run reset-admin` op de server.
     32SMTP_HOST=
     33SMTP_PORT=587
     34SMTP_USER=
     35SMTP_PASS=
     36SMTP_FROM=
Note: See TracChangeset for help on using the changeset viewer.