From 789ce4947d4ad122147e16c01fd451403cd0300a Mon Sep 17 00:00:00 2001 From: stephan Date: Thu, 28 May 2026 11:31:57 -0400 Subject: [PATCH] code qr vehicule --- ms1_kc_set.php | 115 ++++++++++++++++++++++++++++++++++--------- php/inc_settings.php | 2 + 2 files changed, 94 insertions(+), 23 deletions(-) diff --git a/ms1_kc_set.php b/ms1_kc_set.php index 2891469..1feb623 100644 --- a/ms1_kc_set.php +++ b/ms1_kc_set.php @@ -1,8 +1,8 @@ - * Numéro affiché : saisie + KEYCHAIN_HTTP_EDIT_SHIFT (ex. 8 → pk 108). + * Accès 1 : /ms1_kc_set.php?k= + * Accès 2 : compte connecté dont com_id est dans KEYCHAIN_HTTP_EDIT_ALLOWED_COM_IDS */ $blnNoMaintenance = true; session_start(); @@ -12,14 +12,46 @@ require_once __DIR__ . '/php/inc_fonctions.php'; header('X-Robots-Tag: noindex, nofollow'); header('Cache-Control: no-store, no-cache, must-revalidate'); -global $objDatabase; +global $objDatabase, $vDomaine; + +function kc_set_allowed_com_ids() +{ + if (!defined('KEYCHAIN_HTTP_EDIT_ALLOWED_COM_IDS') || KEYCHAIN_HTTP_EDIT_ALLOWED_COM_IDS === '') { + return []; + } + $arr = array_map('intval', explode(',', KEYCHAIN_HTTP_EDIT_ALLOWED_COM_IDS)); + return array_values(array_filter($arr, function ($id) { + return $id > 0; + })); +} + +function kc_set_com_id_authorized() +{ + if (!isset($_SESSION['com_id']) || (int) $_SESSION['com_id'] <= 0) { + return false; + } + return in_array((int) $_SESSION['com_id'], kc_set_allowed_com_ids(), true); +} $strSecret = isset($_GET['k']) ? (string) $_GET['k'] : ''; -$blnAuth = ($strSecret !== '' && hash_equals(KEYCHAIN_HTTP_EDIT_SECRET, $strSecret)); +$blnAuthSecret = ($strSecret !== '' && hash_equals(KEYCHAIN_HTTP_EDIT_SECRET, $strSecret)); +$blnAuthUser = kc_set_com_id_authorized(); +$blnAuth = $blnAuthSecret || $blnAuthUser; +$blnUserMode = $blnAuthUser; if (!$blnAuth) { + if (!isset($_SESSION['com_id']) && kc_set_allowed_com_ids() !== []) { + $_SESSION['redirect_after_login'] = $_SERVER['REQUEST_URI']; + header('Location: ' . $vDomaine . '/compte'); + exit; + } http_response_code(403); - echo '403

Accès refusé.

'; + echo '403'; + echo '

Accès refusé.

'; + if (kc_set_allowed_com_ids() !== []) { + echo '

Connexion compte

'; + } + echo ''; exit; } @@ -27,7 +59,18 @@ if (empty($_SESSION['kc_edit_csrf'])) { $_SESSION['kc_edit_csrf'] = bin2hex(random_bytes(16)); } $strCsrf = $_SESSION['kc_edit_csrf']; -$strBaseUrl = htmlspecialchars($_SERVER['PHP_SELF'] . '?k=' . rawurlencode($strSecret), ENT_QUOTES, 'UTF-8'); +$strBaseUrl = $_SERVER['PHP_SELF']; +if ($blnAuthSecret) { + $strBaseUrl .= '?k=' . rawurlencode($strSecret); +} +$strBaseUrl = htmlspecialchars($strBaseUrl, ENT_QUOTES, 'UTF-8'); + +$strUserName = ''; +if ($blnUserMode && !empty($_SESSION['com_prenom'])) { + $strUserName = trim((string) $_SESSION['com_prenom']); +} elseif ($blnUserMode && !empty($_SESSION['com_info']['com_prenom'])) { + $strUserName = trim((string) $_SESSION['com_info']['com_prenom']); +} $strMessage = ''; $strMessageClass = ''; @@ -59,7 +102,7 @@ function kc_set_validate_url($url) if ($_SERVER['REQUEST_METHOD'] === 'POST') { $strPostedCsrf = isset($_POST['csrf']) ? (string) $_POST['csrf'] : ''; if (!hash_equals($strCsrf, $strPostedCsrf)) { - $strMessage = 'Jeton invalide. Rechargez la page.'; + $strMessage = 'Session expirée. Rechargez la page.'; $strMessageClass = 'err'; } else { $strAction = isset($_POST['action']) ? (string) $_POST['action'] : ''; @@ -67,13 +110,17 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if ($strAction === 'load') { $intPk = kc_set_resolve_pk(isset($_POST['pk_input']) ? $_POST['pk_input'] : 0); if ($intPk <= 0) { - $strMessage = 'Numéro invalide.'; + $strMessage = $blnUserMode ? 'Numéro invalide.' : 'Numéro invalide.'; $strMessageClass = 'err'; } else { $sql = 'SELECT key_chain_http FROM key_chain WHERE pk_key_chain = ' . $intPk; $row = $objDatabase->fxGetRow($sql); if ($row === null) { - $strMessage = 'Aucune ligne pour pk ' . $intPk . ' (saisie + ' . KEYCHAIN_HTTP_EDIT_SHIFT . ').'; + if ($blnUserMode) { + $strMessage = 'Aucun lien trouvé pour ce numéro.'; + } else { + $strMessage = 'Aucune ligne pour pk ' . $intPk . ' (saisie + ' . KEYCHAIN_HTTP_EDIT_SHIFT . ').'; + } $strMessageClass = 'err'; } else { $strCurrentHttp = $row['key_chain_http']; @@ -84,23 +131,27 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $intPk = intval(isset($_POST['pk']) ? $_POST['pk'] : 0); $strNewHttp = kc_set_validate_url(isset($_POST['key_chain_http']) ? $_POST['key_chain_http'] : ''); if ($intPk <= 0) { - $strMessage = 'PK invalide.'; + $strMessage = 'Référence invalide.'; $strMessageClass = 'err'; } elseif ($strNewHttp === false) { - $strMessage = 'URL invalide (http ou https requis).'; + $strMessage = 'Adresse Web invalide (http ou https requis).'; $strMessageClass = 'err'; } else { $sqlCheck = 'SELECT pk_key_chain FROM key_chain WHERE pk_key_chain = ' . $intPk; if ($objDatabase->fxGetRow($sqlCheck) === null) { - $strMessage = 'Ligne introuvable (pk ' . $intPk . ').'; + $strMessage = $blnUserMode ? 'Lien introuvable.' : 'Ligne introuvable (pk ' . $intPk . ').'; $strMessageClass = 'err'; } else { $sqlUpdate = "UPDATE key_chain SET key_chain_http = '" . $objDatabase->fxEscape($strNewHttp) . "' WHERE pk_key_chain = " . $intPk; if ($objDatabase->fxQuery($sqlUpdate) === false) { - $strMessage = 'Erreur lors de la mise à jour.'; + $strMessage = 'Erreur lors de l’enregistrement.'; $strMessageClass = 'err'; } else { - $strMessage = 'Enregistré — pk ' . $intPk . ' → ' . htmlspecialchars($strNewHttp, ENT_QUOTES, 'UTF-8'); + if ($blnUserMode) { + $strMessage = 'Adresse enregistrée.'; + } else { + $strMessage = 'Enregistré — pk ' . $intPk . ' → ' . htmlspecialchars($strNewHttp, ENT_QUOTES, 'UTF-8'); + } $strMessageClass = 'ok'; $strCurrentHttp = $strNewHttp; $blnShowUrlForm = true; @@ -118,10 +169,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { - Key chain HTTP + <?php echo $blnUserMode ? 'Modifier le lien de redirection' : 'Key chain HTTP'; ?> + +

Modifier le lien de redirection

+ +

Bonjour .

+ +
+ Comment faire +
    +
  • Entrez le numéro indiqué sur le QR (sans ajouter — le système s’en charge).
  • +
  • Appuyez sur Entrée pour voir l’adresse actuelle, modifiez-la, puis Entrée pour enregistrer.
  • +
+
+

Key chain — URL de destination

Indications
    -
  • Numéro affiché + = pk_key_chain en base (ex. : vous tapez 8 → enregistrement sur 108).
  • +
  • Numéro affiché + = pk_key_chain en base (ex. : vous tapez 8108).
  • Entrée : charger l’URL actuelle, puis enregistrer la nouvelle.
  • Seule la colonne key_chain_http est modifiée (outil temporaire MS1).
+
" id="frm_load"> - + -

Entrée pour charger l’URL actuelle.

+

-

pk_key_chain en base :

+ +

pk_key_chain en base :

+
- - + +

Entrée pour enregistrer.

-

← Autre numéro

+