Le bouton ⌖ recentre la carte sur la position GPS du téléphone. L'API Geolocation exige un contexte sécurisé : la webapp sert désormais du HTTP et le TLS est porté par le reverse proxy (Traefik, labels dans l'override local) ; le webapp est transparent au proxy (URLs relatives, X-Forwarded-For pour la restriction LIDAR_REGEN_CIDR). Ajoute le modèle d'override docker-compose.webapp.override.yml.example, un rebuild d'index à la demande et met à jour doc/déploiement ; les tuiles sont servies à la demande.
54 lines
2.4 KiB
Bash
Executable File
54 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Génère un certificat auto-signé pour servir la webapp en HTTPS.
|
|
#
|
|
# Pourquoi : l'API Geolocation des navigateurs (bouton ⌖ « centrer sur la
|
|
# position GPS du téléphone ») n'est disponible qu'en contexte sécurisé
|
|
# (HTTPS). Servir la carte en https://<hôte>:PORT débloque le GPS sur
|
|
# téléphone ; le certificat auto-signé affiche un avertissement « non fiable »
|
|
# que l'on accepte une fois (l'usage est sur le LAN, pas exposé).
|
|
#
|
|
# Usage :
|
|
# ./make-tls-cert.sh # crée tls/webapp.crt + tls/webapp.key
|
|
# ./make-tls-cert.sh --force # régénère même si le certificat existe
|
|
#
|
|
# Le certificat est monté dans le conteneur (./tls → /app/tls) et activé par
|
|
# les variables LIDAR_SSL_CERTFILE / LIDAR_SSL_KEYFILE (cf. serve-webapp.sh
|
|
# et docs/DEPLOY_WEBAPP.md).
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
FORCE=0
|
|
[ "${1:-}" = "--force" ] && FORCE=1
|
|
|
|
mkdir -p tls
|
|
# Garde-fou : si docker compose a déjà monté ./tls, Docker l'a créé root:root.
|
|
# En tant qu'utilisateur (non root), on ne peut pas écrire dedans.
|
|
if [ ! -w tls ]; then
|
|
echo "Erreur : tls/ n'est pas writable par $(id -un) (souvent créé root par Docker)." >&2
|
|
echo "Corriger : sudo chown \"$(id -un)\" tls puis relancer $0" >&2
|
|
exit 1
|
|
fi
|
|
if [ "$FORCE" -eq 0 ] && [ -f tls/webapp.crt ] && [ -f tls/webapp.key ]; then
|
|
echo "Certificat auto-signé déjà présent : tls/webapp.crt + tls/webapp.key"
|
|
echo "Régénérer : $0 --force"
|
|
else
|
|
CN="${LIDAR_CERT_CN:-lidar-webapp}"
|
|
# SAN : nom local du conteneur + IP générique. Le téléphone se connecte
|
|
# par l'IP du Pi ; le SAN IP ne couvre pas cette IP dynamique d'où
|
|
# l'avertissement de nom, mais le certificat reste valable (10 ans).
|
|
openssl req -x509 -newkey rsa:2048 -nodes -days 3650 \
|
|
-keyout tls/webapp.key -out tls/webapp.crt \
|
|
-subj "/CN=${CN}" \
|
|
-addext "subjectAltName=DNS:${CN},DNS:lidar-webapp,DNS:*.local,IP:0.0.0.0" \
|
|
> /dev/null
|
|
chmod 600 tls/webapp.key
|
|
echo "Certificat auto-signé créé : tls/webapp.crt + tls/webapp.key (valable 10 ans, CN=${CN})"
|
|
fi
|
|
|
|
echo
|
|
echo "Activation (webapp.env) :"
|
|
echo " LIDAR_SSL_CERTFILE=/app/tls/webapp.crt"
|
|
echo " LIDAR_SSL_KEYFILE=/app/tls/webapp.key"
|
|
echo "serve-webapp.sh monte ./tls → /app/tls et passe ces variables automatiquement."
|
|
echo "Puis : ./serve-webapp.sh restart — la carte répond sur https://<hôte>:PORT."
|