# htaccess_verif
# A RENOMMER ".htaccess" une fois depose dans ~/www/verif/ (OVH).
# Decision CEO 2026-07-19 : la grille de recette (Basic Auth) est retiree
# du parcours telephone (pages publiques + espace praticien, qui garde son
# propre login) et ne protege plus QUE import_lot.php (qui a aussi son
# jeton). R1 : donnees fictives uniquement. R2 : prototype, pas une mise
# en production.

# URL courte de verification (decision CEO 2026-07-18) : le QR imprime sur
# chaque feuille A5 encode /verif/v/<token> (32 caracteres hex).
RewriteEngine On

# F7 (audit 2026-07-21) : forcer HTTPS. Redirection permanente HTTP -> HTTPS.
# Double condition : %{HTTPS} pour un acces direct, X-Forwarded-Proto pour le
# cas OVH mutualise ou le SSL est termine en amont par un proxy.
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^v/([0-9a-f]{32})$ v.php?t=$1 [L,QSA]

# Grille de recette limitee a l'import de lots.
<FilesMatch "^import_lot\.php$">
    AuthType Basic
    AuthName "Import de lots FAENIX Print"
    AuthUserFile /home/VOTRE_LOGIN_OVH/www/verif/.htpasswd-import
    Require valid-user
</FilesMatch>

# F6 admin (audit 2026-07-21) : administration pole (admin_pole.php,
# demande CEO 2026-07-19 : creation structures/praticiens) -- comptes
# NOMMES (un par admin, genere via deploiement/generer_admin.php,
# ajoutes/retires du meme fichier .htpasswd). AuthName distinct pour
# separer visuellement la grille "Administration" de la grille
# "Recette" (fenetre d'authentification du navigateur differente).
<FilesMatch "^admin_pole\.php$">
    AuthType Basic
    AuthName "Administration FAENIX Print"
    AuthUserFile /home/VOTRE_LOGIN_OVH/www/verif/.htpasswd-admin
    Require valid-user
</FilesMatch>

# Pages non indexables par les moteurs de recherche.
Header set X-Robots-Tag "noindex, nofollow"

# Interdiction d'acces direct a tout fichier .sqlite (defense en
# profondeur - la base ne doit normalement jamais se trouver ici).
<FilesMatch "\.sqlite$">
    Require all denied
</FilesMatch>

# Grilles d'authentification et magasin de secrets : jamais servis en HTTP.
<FilesMatch "^\.?htpasswd">
    Require all denied
</FilesMatch>
<FilesMatch "secrets\.local\.php$">
    Require all denied
</FilesMatch>
