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