# SPDX-FileCopyrightText: 2026 FTW.group Sàrl
# SPDX-License-Identifier: AGPL-3.0-or-later
#
# Site de Second Brain (secondbrain.victorkalix.com) : la présentation, à la racine. L'application est dans app/,
# avec son propre .htaccess, qui remplace ces en-têtes pour son dossier (Apache applique le plus profond en dernier).
#
# La présentation n'exécute aucun script : sa politique de sécurité n'en autorise aucun (script-src absent,
# default-src 'none'). Ainsi, l'origine de la version en ligne, où vit la clé d'un coffre, ne partage rien
# d'exécutable avec d'autres pages.
Options -Indexes
AddDefaultCharset utf-8
DirectoryIndex index.html
ErrorDocument 404 /404.html

# HTTPS obligatoire, à l'adresse officielle. Ouverte en http://, l'application n'aurait ni chiffrement (crypto.subtle)
# ni copie hors ligne, ses données vivraient sous une autre origine, et ses appels au relais, réécrits en https par le
# navigateur (HSTS), seraient refusés. Deux conditions : l'hébergement reçoit le https lui-même (HTTPS) ou derrière un
# relais qui l'annonce (X-Forwarded-Proto) ; jamais de boucle. Elle vaut aussi pour app/, dont le .htaccess ne contient
# aucune directive de réécriture (en ajouter une demanderait « RewriteOptions Inherit »).
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP:X-Forwarded-Proto} !=https
  RewriteRule ^ https://secondbrain.victorkalix.com%{REQUEST_URI} [R=301,L]
</IfModule>

AddType image/svg+xml .svg
AddType image/webp .webp
AddType application/gzip .gz

<IfModule mod_headers.c>
  Header always set Content-Security-Policy "default-src 'none'; style-src 'self'; img-src 'self' data:; font-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'; object-src 'none'"
  Header always set X-Content-Type-Options "nosniff"
  Header always set Referrer-Policy "no-referrer"
  Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), browsing-topics=()"
  Header always set X-Frame-Options "DENY"
  # HTTPS : à garder seulement si le certificat est actif (Manager Infomaniak)
  Header always set Strict-Transport-Security "max-age=31536000"

  # Pages : toujours revalidées ; feuille de style et images : une semaine (la page cite la feuille avec son empreinte)
  <FilesMatch "\.html$">
    Header set Cache-Control "no-cache"
  </FilesMatch>
  <FilesMatch "\.(css|svg|png|webp)$">
    Header set Cache-Control "max-age=604800"
  </FilesMatch>
</IfModule>
