Files
parenthese/.env.example
T
IliesAllaliandClaude Opus 5.5 65900a4372 feat(comptes): connexion par un fournisseur OIDC (#115)
OIDC_ISSUER, OIDC_CLIENT_ID, OIDC_CLIENT_SECRET et OIDC_REDIRECT_URI
ajoutent « Se connecter avec … » à l'écran de connexion. Tout le protocole
passe par openid-client 6 : découverte, PKCE S256, state et nonce, échange
du code, vérification de l'ID token (signature, émetteur, audience, dates).
State, nonce et vérificateur PKCE vivent dans un cookie signé, httpOnly,
SameSite=Lax, qui lie le retour au navigateur qui a commencé la connexion.

Le compte est trouvé par (émetteur, sub), sinon relié par email vérifié,
sinon créé sans mot de passe si ALLOW_REGISTRATION le permet (instance
vide comprise). Retour vers l'app par un jeton de passage de 60 s, à usage
unique, dans le fragment, échangé contre une session.

PASSWORD_LOGIN=false retire les mots de passe Parenthèse. Un compte sans
mot de passe se supprime en retapant son email, dans les 15 minutes qui
suivent une connexion. Code OIDC masqué dans les journaux.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 15:26:01 +02:00

76 lines
4.9 KiB
Bash

# Parenthèse, configuration de l'auto-hébergement (docker compose).
# Copiez ce fichier en .env et remplissez les deux valeurs marquées "à remplir".
# Le fichier .env est ignoré par git : vos secrets restent sur votre machine.
#
# NODE_ENV, PORT, DATABASE_URL et MEDIA_STORAGE_PATH sont fixés par docker-compose.yml,
# inutile de les définir ici.
# ── Base de données (conteneur db, non exposé hors du réseau Docker) ──────────
POSTGRES_USER=parenthese
POSTGRES_DB=parenthese
# À remplir. Lettres et chiffres uniquement : la valeur est insérée dans une URL de connexion.
# Fixé au premier démarrage : pour le changer ensuite il faut recréer le volume db-data.
POSTGRES_PASSWORD=
# ── API ───────────────────────────────────────────────────────────────────────
# À remplir, 32 caractères conseillés. Générer avec :
# openssl rand -base64 48
# ou : node -e "console.log(require('crypto').randomBytes(48).toString('base64'))"
# L'API refuse de démarrer en production avec la valeur de développement.
JWT_SECRET=
# Durée de vie des sessions (compte) et des accès par lien partagé.
JWT_EXPIRES_IN=7d
JWT_TREE_ACCESS_EXPIRES_IN=24h
# Adresse à laquelle vos proches ouvrent Parenthèse, sans slash final.
# En local : http://localhost (ou http://localhost:8080 si WEB_PORT=8080).
# Derrière un reverse proxy HTTPS : https://arbre.votre-domaine.fr
# Plusieurs adresses : séparées par des virgules.
CORS_ORIGIN=http://localhost
# Proxys dont l'API croit l'en-tête X-Forwarded-For (adresse des visiteurs, limites d'essais).
# Par défaut, le nginx du conteneur web (réseau Docker privé). Si vous ajoutez un reverse proxy
# devant, ajoutez son adresse, par exemple loopback,uniquelocal,203.0.113.10
# TRUST_PROXY=loopback,uniquelocal
# Place disque par arbre (Mo), et part réservée aux envois de la famille en attente de relecture.
# MEDIA_QUOTA_PER_TREE_MB=5120
# MEDIA_PENDING_QUOTA_PER_TREE_MB=500
# ── Comptes ───────────────────────────────────────────────────────────────────
# À false, plus personne ne peut créer de compte : les comptes existants se connectent et
# créent leurs arbres, la famille ouvre toujours les arbres partagés avec le lien et le mot
# de passe. Une instance sans aucun compte accepte quand même le premier (le vôtre) :
# créez-le juste après le premier démarrage, avant de donner l'adresse.
# ALLOW_REGISTRATION=true
# ── Connexion par un fournisseur d'identité (OIDC : Authentik, Authelia, Keycloak…) ──
# Éteinte sans OIDC_ISSUER. Chez le fournisseur, adresse de retour = adresse publique + /auth/oidc/callback.
# Détails dans le README, section « Connexion par votre fournisseur d'identité ».
# OIDC_ISSUER=https://auth.votre-domaine.fr/application/o/parenthese/
# OIDC_CLIENT_ID=parenthese
# OIDC_CLIENT_SECRET=
# OIDC_REDIRECT_URI=https://arbre.votre-domaine.fr/auth/oidc/callback
# OIDC_PROVIDER_NAME=Authentik
# Email accepté seulement s'il est vérifié chez le fournisseur (email_verified).
# OIDC_REQUIRE_VERIFIED_EMAIL=true
# À false, plus de mot de passe Parenthèse : connexion par le fournisseur seulement.
# PASSWORD_LOGIN=true
# ── Immich (reconnaissance des visages, désactivé par défaut) ────────────────
# Instances Immich autorisées sur ce serveur, séparées par des virgules. Chaque entrée
# peut recevoir un libellé, « Libellé=https://adresse » ; sans libellé, c'est le nom
# d'hôte qui sert (un même nom d'hôte ne peut pas servir à deux instances : donnez-leur
# un libellé). Les administrateurs de chaque arbre choisissent l'instance par son nom
# et donnent leur propre clé d'API (créée dans Immich, Paramètres > Clés d'API) ; la
# clé est chiffrée en base. L'adresse n'est jamais montrée aux administrateurs : seul
# le libellé l'est. Sans cette liste, la fonction reste éteinte, et une adresse retirée
# de la liste coupe aussitôt les arbres qui l'utilisent.
# IMMICH_ALLOWED_API_URLS=Maison=http://immich.maison.lan:2283,https://immich.example.org
# ── Images ────────────────────────────────────────────────────────────────────
# Version des images ghcr.io/iliesallali/parenthese-api et parenthese-web : latest (dernière
# version de main), ou une version figée, par exemple 1.0.
# PARENTHESE_VERSION=latest
# ── Web ───────────────────────────────────────────────────────────────────────
# Port publié sur la machine hôte (80 = http://localhost sans préciser de port).
WEB_PORT=80