Vortex-Flux / src /modules /localisation_ui.py
jaimalklyde's picture
Claude Haiku 5.5
fix(signature): localisation facultative — le code email reste saisissable sans position
06df37a
Raw History Blame Contribute Delete
2.82 kB
"""
SECTION « LOCALISATION » DES ECRANS DE SIGNATURE
==================================================
Partagee par la page de signature des parties (sign_page) et la contresignature
du preteur (signatures_admin). La position GPS est demandee au navigateur par
core/audit_log.capturer_gps (a chaque rerun, tant qu'elle n'est pas resolue).
Regle : la localisation n'est PAS un obstacle. Le code recu par email peut toujours
etre saisi, avec ou sans position. Sans position, le document porte la mention
« refusée » ou « non reçue » a la place du lieu. La case permet seulement de
redemander la position au navigateur.
"""
import streamlit as st
from core import audit_log, geoloc_signature
def _relancer(cle: str):
"""Callback de la case : coche -> le navigateur est interroge de nouveau."""
if st.session_state.get(cle):
audit_log.redemander_gps()
def section_localisation(cle: str, contexte: str = "signer") -> dict:
"""Affiche l'etat de la localisation (information, jamais bloquante). Retourne toujours
{"ok": bool, "texte": str, "gps": str} : texte et gps prets a enregistrer, meme sans position."""
ss = st.session_state
etat = ss.get("_audit_gps_etat")
coords = ss.get("_audit_gps_coords")
if etat == geoloc_signature.ETAT_OK and coords:
texte, brut = geoloc_signature.construire_localisation(etat, coords)
st.success(f"[POSITION] Lieu de {contexte} détecté : **{texte}**. Il sera inscrit sur le document, "
"avec votre adresse IP.")
return {"ok": True, "texte": texte, "gps": brut}
if etat == geoloc_signature.ETAT_REFUS:
texte, brut = geoloc_signature.construire_localisation(etat)
else:
texte, brut = geoloc_signature.construire_localisation(geoloc_signature.ETAT_INDISPONIBLE)
if etat in (geoloc_signature.ETAT_REFUS, geoloc_signature.ETAT_INDISPONIBLE):
st.info(f"Localisation non partagée : le document portera « {texte} » à la place du lieu. "
"Vous pouvez quand même saisir le code reçu par email.")
st.checkbox("Je relance la demande de localisation au navigateur (facultatif).",
key=f"loc_relance_{cle}", on_change=_relancer, args=(f"loc_relance_{cle}",))
if ss.get("_audit_gps_essai", 0) >= 1:
st.caption("Si votre navigateur ne vous redemande rien, la localisation est bloquée pour ce site "
"(cadenas à gauche de l'adresse). Ce n'est pas bloquant.")
return {"ok": False, "texte": texte, "gps": brut}
st.info("[POSITION] Localisation en attente (facultative) : le lieu sera inscrit sur le document si votre "
"navigateur la partage. Vous pouvez signer sans.")
return {"ok": False, "texte": geoloc_signature.TEXTE_NON_RECU, "gps": "NON_RECU"}