Ajout des fonctions de création auto d'un bateau avec timer toutes les 5min

This commit is contained in:
2026-10-06 07:06:49 +00:00
parent 019cd44f98
commit ce81084cdc
7 changed files with 245 additions and 3 deletions
+41 -1
View File
@@ -388,7 +388,9 @@ $requete .= ' TB_Bateaux.Date_derniere_maj AS Date_derniere_maj, ';
$requete = 'SELECT *, ';
$requete .= ' (SELECT Adresse_mac FROM TB_Affectations_bateaux WHERE ID_Bateau=TB_Bateaux.Cle_primaire AND Date_fin IS NULL) AS Adresse_mac, ';
$requete .= ' (SELECT Version_soft FROM TB_Generations_bateaux WHERE ID_Bateau=TB_Bateaux.Cle_primaire AND Date_fin IS NULL) AS version ';
$requete .= ' (SELECT Version_soft FROM TB_Generations_bateaux WHERE ID_Bateau=TB_Bateaux.Cle_primaire AND Date_fin IS NULL) AS version, ';
// Adresse NetBird du module affecté (Live distant possible seulement si elle est connue - synthèse §49) :
$requete .= ' (SELECT C.Adresse_netbird FROM TB_Affectations_bateaux A JOIN TB_Cartes C ON C.Adresse_mac=A.Adresse_mac WHERE A.ID_Bateau=TB_Bateaux.Cle_primaire AND A.Date_fin IS NULL) AS Adresse_netbird ';
$requete .= ' FROM TB_Bateaux WHERE Cle_primaire=? ';
//echo "Requête = [ ".$requete."; ]<br />";
$reponse = Requete_preparee_bdd($requete,
@@ -491,6 +493,31 @@ $requete .= ' TB_Bateaux.Date_derniere_maj AS Date_derniere_maj, ';
$est_administrateur = ($_SESSION['shipmember']['Niveau_acces'] >= NIVEAU_ACCES_MINI_ADMINISTRATEUR);
$peut_inviter = ($est_administrateur || $acces_profil['Creation_profils'] == 1);
//------------------------------------------------------------------------------------------------------------
// Live distant (synthèse §49) : création d'un ticket (aléatoire, 60 s, usage unique, lié à l'utilisateur et au
// bateau) puis redirection vers https://b<N>.ship2net.fr/_auth?ticket=... - le vérificateur du VPS l'échange
// contre une session (cookie propre au sous-domaine du bateau). Seule l'empreinte du ticket est enregistrée.
// Droit : arriver jusqu'ici suffit (administrateur, ou accès actif à CE bateau - contrôlé plus haut) ; le
// vérificateur revérifie de toute façon à l'ouverture de la session puis à chaque requête.
$live_possible = ($bateau['Adresse_netbird'] ?? '') != '';
if (isset($_POST['ouvrir_live']))
{
if (!$live_possible)
{
$_SESSION['Bateaux']['flash_erreur'] = t("Aucun module ShipBase joignable n'est affecté à ce bateau : le Live est indisponible.");
Fermeture_bdd();
header('Location: bateaux.php');
exit();
}
$ticket = bin2hex(random_bytes(32));
Requete_preparee_bdd("INSERT INTO TB_Tickets_live (Empreinte, ID_Shipmember, ID_Bateau, Expiration) VALUES (?, ?, ?, NOW() + INTERVAL 60 SECOND)",
array(array('s', hash('sha256', $ticket)), array('i', $_SESSION['shipmember']['Cle_primaire']), array('i', $bateau['Cle_primaire'])),
__FILE__, __LINE__);
Fermeture_bdd();
header('Location: https://b'.(int)$bateau['Cle_primaire'].'.'.URL_SITE.'/_auth?ticket='.$ticket, true, 303);
exit();
}
if (isset($_POST['creer_invitation']))
{
if (!$peut_inviter) $_SESSION['Bateaux']['flash_erreur'] = t("Vous n'avez pas le droit d'inviter sur ce bateau.");
@@ -768,6 +795,19 @@ $requete .= ' TB_Bateaux.Date_derniere_maj AS Date_derniere_maj, ';
echo '</div>';
}
//--------------------------------
// Bouton Live (synthèse §49) - formulaire POST avec jeton (un navigateur qui pré-charge les liens ne crée pas
// de tickets), ouvert dans un nouvel onglet :
echo '<div class="bouton_live">';
if ($live_possible)
{
echo '<form action="bateaux.php" method="post" target="_blank">'.Champ_jeton_csrf();
echo '<button type="submit" name="ouvrir_live" title="'.t("Ouvrir le bateau en temps réel (nouvel onglet)").'">'.t("Live").'</button>';
echo '</form>';
}
else echo '<span class="live_indisponible" title="'.t("Aucun module ShipBase joignable n'est affecté à ce bateau").'">'.t("Live indisponible").'</span>';
echo '</div>';
echo '<div class="derniere_maj">'.t("Dernières données reçues").' : <span class="gras">'.$bateau['Date_derniere_maj'].' [UTC]</span></div>';
echo '</div>';
//--------------------------------