Centrer la carte sur le GPS du téléphone (HTTPS terminé par le proxy)
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.
This commit is contained in:
53
make-tls-cert.sh
Executable file
53
make-tls-cert.sh
Executable file
@ -0,0 +1,53 @@
|
||||
#!/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."
|
||||
Reference in New Issue
Block a user