#!/bin/sh
# Anade la proteccion de imagenes al bloque CMOX del .htaccess y comprueba en
# el acto que no ha roto nada. Si algo falla, restaura la copia y sale.
set -e

H=~/www/.htaccess
COPIA=~/www/.htaccess.antes-imagenes-20260824

[ -f "$COPIA" ] || cp "$H" "$COPIA"

# Solo se toca si no esta ya puesto.
if grep -q 'CMOX PROTECCION DE IMAGENES' "$H"; then
  echo "ya estaba puesto"
else
  python3 - "$H" <<'PY'
import io, sys
ruta = sys.argv[1]
s = io.open(ruta, encoding='utf-8').read()

bloque = """
# --- CMOX PROTECCION DE IMAGENES ---------------------------------------
# Las fotos de la V2 solo se sirven a paginas de cmox.es.
#
# Que hace y que NO hace: esto impide que OTRA web las enlace desde este
# servidor (y le cargue a CMOX el trafico y la propiedad de la foto), y que
# alguien se las descargue pegando la URL en la barra. Lo que NO puede hacer
# ninguna configuracion del mundo es evitar que quien ve la foto en la pagina
# la tenga ya en su ordenador: para verla, el navegador ha tenido que
# descargarla. Eso es la web.
#
# Se limita a /img/v2/ a proposito. El logotipo, los iconos y las imagenes de
# vista previa para redes sociales tienen que seguir siendo accesibles sin
# referente, o WhatsApp, LinkedIn y Google dejan de poder leerlas.
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_REFERER} !^https?://([a-z0-9-]+\\.)?cmox\\.es(/|$) [NC]
  RewriteRule ^img/v2/ - [F,L]
</IfModule>
# --- FIN CMOX PROTECCION DE IMAGENES ------------------------------------
"""

marca = 'DirectoryIndex index.html index.php\n'
assert marca in s, 'no encuentro el DirectoryIndex'
s = s.replace(marca, marca + bloque, 1)
io.open(ruta, 'w', encoding='utf-8').write(s)
print('bloque insertado')
PY
fi

echo
echo "COMPROBACIONES"
echo "--------------------------------------------------"
fallo=0
prueba() {
  codigo=$(curl -s -o /dev/null -w '%{http_code}' "$2" ${3:+-H "Referer: $3"})
  esperado="$4"
  if [ "$codigo" = "$esperado" ]; then
    printf '  ok    %-44s %s\n' "$1" "$codigo"
  else
    printf '  FALLA %-44s %s (esperaba %s)\n' "$1" "$codigo" "$esperado"
    fallo=1
  fi
}

IMG=$(ls ~/www/img/v2/ | head -1)
prueba "la portada"                 "https://cmox.es/"                    "" 200
prueba "una interior"               "https://cmox.es/sobre-nosotros/"     "" 200
prueba "el panel de WordPress"      "https://cmox.es/panelcmox"           "" 200
prueba "wp-login"                   "https://cmox.es/wp-login.php"        "" 200
prueba "el captcha"                 "https://cmox.es/api/captcha.php"     "" 200
prueba "el logotipo (debe seguir)"  "https://cmox.es/img/logo-cmox.png"   "" 200
prueba "foto V2 desde cmox.es"      "https://cmox.es/img/v2/$IMG" "https://cmox.es/" 200
prueba "foto V2 desde otra web"     "https://cmox.es/img/v2/$IMG" "https://otra.example/" 403
prueba "foto V2 sin referente"      "https://cmox.es/img/v2/$IMG" "" 403

echo
if [ "$fallo" = "1" ]; then
  echo "ALGO HA FALLADO: restaurando la copia"
  cp "$COPIA" "$H"
  echo "restaurado"
  exit 1
fi
echo "todo correcto"
