# =====================================================
# Sillycone Village
# Configuration Apache sécurisée pour site statique Hugo
# =====================================================
#
# ⚠ SYNCHRONISATION : ce fichier gouverne en réalité TOUT le compte OVH
# (vitrine/, horairefacile/, api.php…) une fois déployé à la racine, pas
# seulement ce site Hugo — l'héritage .htaccess d'Apache descend dans tous
# les sous-dossiers. La copie de référence est désormais
# SiteEcoSlow/.htaccess (voir son en-tête pour le détail complet) : c'est
# là que vit le code PHP qui dépend de la règle Authorization ci-dessous,
# et c'est elle que build-output.sh génère automatiquement dans
# output/www/.htaccess. Si vous modifiez l'un des deux fichiers, reportez
# le changement dans l'autre.
# =====================================================


# -----------------------------------------------------
# 1. Forcer HTTPS
# -----------------------------------------------------

RewriteEngine On

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]


# -----------------------------------------------------
# 1bis. Transmettre l'en-tête Authorization à PHP
# -----------------------------------------------------
# Sur ce type d'hébergement mutualisé, PHP tourne en CGI/FastCGI : Apache
# ne transmet PAS l'en-tête HTTP Authorization à $_SERVER par défaut. Sans
# cette règle, requireBearer() (php/www/helpers.php) reçoit toujours un
# token vide, quel que soit le Bearer Token envoyé par le client — d'où un
# 401 "Token manquant ou invalide" même avec le bon token (vu sur
# api.php/auth/verify-token).

RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]


# -----------------------------------------------------
# 2. Protection contre accès fichiers sensibles
# -----------------------------------------------------

<FilesMatch "(^\.|\.git|\.env|\.bak|\.backup|\.old|\.sql|\.log|composer\.json|package\.json)">
    Require all denied
</FilesMatch>


# Bloquer l'accès au fichier .htaccess lui-même

<Files ".htaccess">
    Require all denied
</Files>


# -----------------------------------------------------
# 3. Headers de sécurité HTTP
# -----------------------------------------------------

<IfModule mod_headers.c>

    # Empêche le navigateur de deviner les types MIME
    Header always set X-Content-Type-Options "nosniff"


    # Protection contre certaines attaques XSS anciennes
    Header always set X-XSS-Protection "1; mode=block"


    # Contrôle des informations envoyées aux sites externes
    Header always set Referrer-Policy "strict-origin-when-cross-origin"


    # Désactive les fonctionnalités navigateur inutiles
    Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=()"


    # Protection contre l'intégration dans une iframe externe
    Header always set X-Frame-Options "SAMEORIGIN"


    # Politique de sécurité du contenu
    # - pas de JS
    # - pas de CDN
    # - pas de police externe
    # - CSS local uniquement

    Header always set Content-Security-Policy "default-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'; form-action 'self'; connect-src 'self' https://sillycone-village.be https://www.sillycone-village.be"

</IfModule>


# -----------------------------------------------------
# 4. Compression
# -----------------------------------------------------

<IfModule mod_deflate.c>

    AddOutputFilterByType DEFLATE \
        text/html \
        text/plain \
        text/css \
        text/javascript \
        application/javascript \
        application/json \
        application/xml \
        image/svg+xml

</IfModule>


# -----------------------------------------------------
# 5. Cache navigateur
# -----------------------------------------------------

<IfModule mod_expires.c>

    ExpiresActive On

    # HTML : court pour faciliter les mises à jour
    ExpiresByType text/html "access plus 1 hour"


    # CSS
    ExpiresByType text/css "access plus 1 month"


    # SVG
    ExpiresByType image/svg+xml "access plus 1 month"


    # Fichiers statiques
    ExpiresByType application/javascript "access plus 1 month"


</IfModule>


# -----------------------------------------------------
# 6. Désactiver le listing des répertoires
# -----------------------------------------------------

Options -Indexes


# -----------------------------------------------------
# 7. Bloquer certains robots agressifs
# -----------------------------------------------------

<IfModule mod_setenvif.c>

    SetEnvIfNoCase User-Agent "MJ12bot" bad_bot
    SetEnvIfNoCase User-Agent "AhrefsBot" bad_bot

    <RequireAll>
        Require all granted
        Require not env bad_bot
    </RequireAll>

</IfModule>