From e954b38021b3029df7a708611866a220fb05bd08 Mon Sep 17 00:00:00 2001
From: "maieul@maieul.net" <>
Date: Fri, 23 Dec 2016 21:33:01 +0000
Subject: [PATCH] =?UTF-8?q?si=20on=20est=20un=20utilisateur=20non=20connec?=
 =?UTF-8?q?t=C3=A9,=20pouvoir=20r=C3=A9cup=C3=A9rer=20le=20fichier=20de=20?=
 =?UTF-8?q?la=20r=C3=A9ponse=20qu'on=20a=20soit=20m=C3=AAme=20post=C3=A9,?=
 =?UTF-8?q?=20via=20le=20cookie?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 action/formidable_recuperer_fichier.php | 18 ++++++++++++++++--
 formulaires/formidable.php              |  4 ++--
 inc/formidable_fichiers.php             |  8 ++++++++
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/action/formidable_recuperer_fichier.php b/action/formidable_recuperer_fichier.php
index a6882590..4385ba2f 100644
--- a/action/formidable_recuperer_fichier.php
+++ b/action/formidable_recuperer_fichier.php
@@ -1,6 +1,7 @@
 <?php
 if (!defined("_ECRIRE_INC_VERSION")) return;
 include_spip('inc/autoriser');
+include_spip('inc/formidable');
 include_spip('inc/formidable_fichiers');
 /**
  * Récupère, si on est autorisé à voir la réponse du formulaire, 
@@ -10,9 +11,22 @@ include_spip('inc/formidable_fichiers');
 function action_formidable_recuperer_fichier() {
 	$securiser_action = charger_fonction('securiser_action', 'inc');
 	$arg = $securiser_action();
-
 	$arg = unserialize($arg);
-	if (autoriser('voir', 'formulaires_reponse', $arg['formulaire'])) {
+	
+	// test si autorisation de voir la réponse par cookie
+	$cookie_ok = False;
+	if (isset($arg['cookie'])) {
+		$nom_cookie = formidable_generer_nom_cookie($arg['formulaire']);
+		if (isset($_COOKIE[$nom_cookie])) {
+			if ($arg['cookie'] == sha1($_COOKIE[$nom_cookie].secret_du_site())) {
+				$cookie_bdd = sql_getfetsel('cookie', 'spip_formulaires_reponses', 'id_formulaires_reponse='.sql_quote($arg['reponse']));
+				if ($cookie_bdd = $_COOKIE[$nom_cookie]) {
+					$cookie_ok = True;
+				}
+			}
+		}
+	}
+	if (autoriser('voir', 'formulaires_reponse', $arg['formulaire']) or $cookie_ok) {
 		$chemin_fichier = _DIR_FICHIERS_FORMIDABLE
 			."formulaire_".$arg['formulaire'] 
 			."/reponse_".$arg['reponse']
diff --git a/formulaires/formidable.php b/formulaires/formidable.php
index c00cd10f..d1ccc9eb 100644
--- a/formulaires/formidable.php
+++ b/formulaires/formidable.php
@@ -417,7 +417,7 @@ function formulaires_formidable_traiter($id, $valeurs = array(), $id_formulaires
  *
  * @return array
  *     Tableau des champs de type fichier
-**/
+ **/
 function formulaires_formidable_fichiers($id, $valeurs = array(), $id_formulaires_reponse = false) {
 	// On peut donner soit un id soit un identifiant
 	if (!$id_formulaire = formidable_id_formulaire($id)) {
@@ -452,7 +452,7 @@ function formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_rep
 	$saisies_fichiers = saisies_lister_avec_type($contexte['_saisies'], 'fichiers');// les saisies de type fichier
 	$fichiers = array();
 	$id_formulaire = $contexte['_formidable']['id_formulaire'];
-	
+
 	// On va chercher tous les champs
 	$champs = sql_allfetsel(
 		'nom, valeur',
diff --git a/inc/formidable_fichiers.php b/inc/formidable_fichiers.php
index 5ea09c81..9a3e7f32 100644
--- a/inc/formidable_fichiers.php
+++ b/inc/formidable_fichiers.php
@@ -270,6 +270,14 @@ function formidable_generer_url_action_recuperer_fichier($id_formulaire, $id_for
 		'saisie' => $saisie,
 		'fichier' => $fichier
 	);
+
+	// Pour les utilisateurs non authentifiés, on se base sur le cookier
+	$nom_cookie = formidable_generer_nom_cookie($id_formulaire);
+	if (isset($_COOKIE[$nom_cookie])) {
+		include_spip('inc/securiser_action');
+		$param['cookie'] = sha1($_COOKIE[$nom_cookie].secret_du_site());
+	}
+
 	$param = serialize($param);
 	$securiser_action = charger_fonction('securiser_action','inc');
 	return $securiser_action('formidable_recuperer_fichier',$param,'',      false);
-- 
GitLab