Gérard-Vincent Posted June 22, 2021 Share Posted June 22, 2021 Bonjour, je souhaite protéger l'accès aux documents joints de la fiche produit (PDF) via un login. Quelqu'un pourrait me donner une astuce ? j'ai protégé le dossier Download et même le dossier controller/front/ Mais rien à faire, le clic sur le nom du PDF télécharge directement sans accès login. Ce qu'il me faudrait c'est que au clic sur le document PDF joint, une popup de login permette de télécharger. Sans login, pas de téléchargement possible. Merci pour toute aide Link to comment Share on other sites More sharing options...
Eolia Posted June 22, 2021 Share Posted June 22, 2021 Regardez donc ce que fait le controleur associé et ajoutez-y votre contrôle. Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 22, 2021 Author Share Posted June 22, 2021 Salut Eolia oui, j'ai fait ça (probablement pas super bien) j'ai mis un contrôle sur le répertoire controllers/front/ dans lequel se trouve le fichier AttachmentController.php qui gère il me semble les fichiers joints mais l'action n'est pas bloquée au clic. Le téléchargement se fait En revanche, l'accès direct au répertoire affiche bien le login (ce qui ne vaut que pour contrôler la bonne exécution de ma protection par login puisque le htaccess interdit déjà l'accès direct) je ne trouve pas, il doit bien y avoir un moyen... J'espère.. Link to comment Share on other sites More sharing options...
Eolia Posted June 22, 2021 Share Posted June 22, 2021 il doit y avoir un appel ajax sur votre bouton et c'est lui qui lance le download, regardez le code js exécuté. Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 23, 2021 Author Share Posted June 23, 2021 eh beeeeeh euh... je vois pas 🙄. j'ai regardé le code de AttachmentController.php et je ne vois pas d'appel JS ou Ajax j'ai aussi tenté d'inspecter la page sous Firefox mais ça n'indique que le lien <a href="//www.monsite.com/index.php?controller=attachment&id_attachment=2"> raison pour laquelle je pensais que protéger le répertoire controllers/front/ (où se situe AttachmentController.php) suffirait à bloquer le téléchargement direct Link to comment Share on other sites More sharing options...
Eolia Posted June 23, 2021 Share Posted June 23, 2021 quelle version Presta ? Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 23, 2021 Author Share Posted June 23, 2021 1.7.7.1 Link to comment Share on other sites More sharing options...
Eolia Posted June 23, 2021 Share Posted June 23, 2021 Ah... Toutes mes condoléances Link to comment Share on other sites More sharing options...
Eolia Posted June 23, 2021 Share Posted June 23, 2021 sur 1.6 ça fonctionne en mettant une ligne dans le controleur https://shop.devcustom.net/fr/index.php?controller=attachment&id_attachment=1 Link to comment Share on other sites More sharing options...
P i l o u Posted June 23, 2021 Share Posted June 23, 2021 Salut @Eolia il faut un login et un mot de passe pour accéder à ton lien 😉 Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 23, 2021 Author Share Posted June 23, 2021 1 hour ago, Eolia said: Ah... Toutes mes condoléances Merci, j'apprécie le soutien 🤣 je peux toujours essayer la même ligne sur fichier de la v. 1.7, mais comme le dit Pilou, c'est coincé. Link to comment Share on other sites More sharing options...
Eolia Posted June 23, 2021 Share Posted June 23, 2021 Il y a 2 heures, P i l o u a dit : Salut @Eolia il faut un login et un mot de passe pour accéder à ton lien 😉 Ben c'était le but de la demande, non ? Et si tu essaye 3 fois de manière incorrecte, tu es ban^^ Le lien de dl est en bas de la page de ce produit https://shop.devcustom.net/fr/ventes-privees/2-chemisier-2.html Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 23, 2021 Author Share Posted June 23, 2021 Ok ça fonctionne sur l'accès direct à l'URL (je sais faire en htaccess) il faut que ça fasse pareil sur le clic du téléchargement, et là à priori (sauf si je n'ai pas compris) je ne suis pas bloqué sur ton lien de la page du chemisier. J'ai pu DL le mp3 sans passer par une demande de login. Si j'ai faux et qu'effectivement en ajoutant la ligne de code dont tu parles dans le PHP du contrôleur, j'aimerais essayer sur 1.7. Mais il me faudrait cette ligne de code Merci Link to comment Share on other sites More sharing options...
Eolia Posted June 23, 2021 Share Posted June 23, 2021 Ben oui j'avais désactivé le code^^ Ré-essaye de cliquer sur le lien Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 23, 2021 Author Share Posted June 23, 2021 Ah ben voilà c'est exactement ça ! je veux bien tester sur le fichier alors ! en espérant que ça tourne idem sur ma version. Tu peux me passer la modif à faire ? Link to comment Share on other sites More sharing options...
Eolia Posted June 23, 2021 Share Posted June 23, 2021 <?php /* * 2007-2015 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/osl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2015 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class AttachmentControllerCore extends FrontController { public function postProcess() { $error = $error2 = ''; $ok = false; if(Tools::getValue('username') && Tools::getValue('password')) { session_start(); // Contrôler dans la bdd si le user existe et est autorisé /* if(....) { $ok = true; } else { */ $_SESSION['test'] = isset($_SESSION['test']) ? $_SESSION['test'] + 1 : 1; if($_SESSION['test'] <= 3) $error = '<p class="error">Erreur: Utilisateur ou mot de passe incorrect</p>'; else $error2 = '<p class="error">3 tentatives échouées, vous êtes banni.</p>'; //} } if(!$ok) { $html = ' <html> <head> <meta charset="utf-8"> <style> body{ background: #67BE4B; font-family: "arial"; } .error { text-align: center; color: white; background-color: #b61414; padding: 10px; } #container{ width:400px; margin:0 auto; margin-top:10%; } /* Bordered form */ form { width:100%; padding: 30px; border: 1px solid #f1f1f1; background: #fff; box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24); } #container h1 { width: 90%; margin: 0 auto; padding-bottom: 10px; text-align: center; font-size: 24px; } /* Full-width inputs */ input[type=text], input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box; } /* Set a style for all buttons */ input[type=submit] { background-color: #53af57; color: white; padding: 14px 20px; margin: 8px 0; border: none; cursor: pointer; width: 100%; } input[type=submit]:hover { background-color: white; color: #53af57; border: 1px solid #53af57; } </style> </head> <body> <div id="container">'; if(!$error2) $html .= ' <form method="POST"> <h1>L\'accès à ce fichier requiert un identifiant et un mot de passe</h1> '.$error.' <label><b>Nom d\'utilisateur</b></label> <input type="text" placeholder="Entrer le nom d\'utilisateur" name="username" required> <br /><br /> <label><b>Mot de passe</b></label> <input type="password" placeholder="Entrer le mot de passe" name="password" required> <br /><br /> <input type="submit" id="submit" value="LOGIN" > </form>'; else $html .= $error2; $html .= ' </div> </body> </html>'; die($html); } $a = new Attachment(Tools::getValue('id_attachment'), $this->context->language->id); if (!$a->id) { Tools::redirect('index.php'); } Hook::exec('actionDownloadAttachment', array('attachment' => &$a)); if (ob_get_level() && ob_get_length() > 0) { ob_end_clean(); } header('Content-Transfer-Encoding: binary'); header('Content-Type: '.$a->mime); header('Content-Length: '.filesize(_PS_DOWNLOAD_DIR_.$a->file)); header('Content-Disposition: attachment; filename="'.utf8_decode($a->file_name).'"'); @set_time_limit(0); readfile(_PS_DOWNLOAD_DIR_.$a->file); exit; } } Link to comment Share on other sites More sharing options...
Eolia Posted June 23, 2021 Share Posted June 23, 2021 pour info, le .htaccess ne doit contenir que Order deny,allow Deny from all ce qui empêche tout dl direct, il faut forcément passer par le contrôleur Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 23, 2021 Author Share Posted June 23, 2021 Top merci !! je regarde ça demain, je croise les doigts et les orteils ! merci Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 23, 2021 Author Share Posted June 23, 2021 Génial ! ça fonctionne ! il y avait juste une fermeture en trop à la fin du PHP apparemment, je l'ai viré et c'est OK. J'ai la page de login. Tu mets quoi et comment pour le login ? Je peux créer un id et mdp unique, il sera communiqué à la demande. Le but est simplement que le visiteur lambda ne puisse télécharger, qu'il passe par une prise de contact d'abord (où on lui donnera le Multipass) Link to comment Share on other sites More sharing options...
Eolia Posted June 23, 2021 Share Posted June 23, 2021 On est déjà demain ? Si vous désirez mettre le même login/pass pour tout le monde, comparez ce que le client saisit par rapport à ce que vous attendez Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 24, 2021 Author Share Posted June 24, 2021 Je ne comprends pas, désolé. 😬 il faut que je paramètre l'ID et le mot de passe en amont, peut-être en modifiant le fichier php ? identifiant : Toto pass : mdp-ok par exemple... Comment paramétrer ça pour que la page de login autorise le téléchargement ? Link to comment Share on other sites More sharing options...
Eolia Posted June 24, 2021 Share Posted June 24, 2021 Essayez^^ Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 24, 2021 Author Share Posted June 24, 2021 Oueeerk ! Banni ! comment je me débannis ? Du coup j'ai essayé aussi sur le lien du chemisier mais ça passe pas avec ce login. Link to comment Share on other sites More sharing options...
Eolia Posted June 24, 2021 Share Posted June 24, 2021 Si si, ça passe^^ if(($user == 'Kamoulox') && $pass == 'GrEEn') { $ok = true; $_SESSION['test'] = 'ok'; Tools::redirect('https://'.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI]); } Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 24, 2021 Author Share Posted June 24, 2021 Je dois faire confuze. 3 tentatives échouées, vous êtes banni. ça t'ennuie pas de me coller le code complet avec la partie 'Kamoulox' etc.. en place et me dire comment je lève le bannissement sur ma pauvre personne ? Merci encore !! Link to comment Share on other sites More sharing options...
Eolia Posted June 24, 2021 Share Posted June 24, 2021 Ben normalement, si le user et le pass sont ok tu dois être débanni^^ $error = $error2 = ''; $ok = false; $user = Tools::getValue('username'); $pass = Tools::getValue('password'); session_start(); if($_SESSION['test'] != 'ok') { if(!isset($_SESSION['referer'])) $_SESSION['referer'] = $_SERVER['HTTP_REFERER']; if($user && $pass) { if(($user == 'Kamoulox') && $pass == 'GrEEn') { $ok = true; $_SESSION['test'] = 'ok'; Tools::redirect('https://'.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI]); } else { $_SESSION['test'] = isset($_SESSION['test']) ? $_SESSION['test'] + 1 : 1; if($_SESSION['test'] <= 3) $error = '<p class="error">Erreur: Utilisateur ou mot de passe incorrect</p>'; else $error2 = '<p class="error">3 tentatives échouées, vous êtes banni.<br /><span style="font-size:small">Le login est <b>Kamoulox</b> et le pass <b>GrEEn</b></p>'; } } if(!$ok) { $html = ' <html> <head> <meta charset="utf-8"> <style> body{ background: #67BE4B; font-family: "arial"; } .error { text-align: center; color: white; background-color: #b61414; padding: 10px; } #container{ width:400px; margin:0 auto; margin-top:5%; } /* Bordered form */ form { width:100%; padding: 30px; border: 1px solid #f1f1f1; background: #fff; box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24); } #container h1 { width: 90%; margin: 0 auto; padding-bottom: 10px; text-align: center; font-size: 24px; } /* Full-width inputs */ input[type=text], input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box; } /* Set a style for all buttons */ input[type=submit] { background-color: #53af57; color: white; padding: 14px 20px; margin: 8px 0; border: none; cursor: pointer; width: 100%; border: 1px solid white; } input[type=submit]:hover { background-color: white; color: #53af57; border: 1px solid #53af57; } .link { margin: 10px auto; text-align: center; display: block; } .link a { text-decoration: none; padding: 7px 8px; border: 1px solid #ab9efc; border-radius: 3px; background: #92bcfe; color: white; transition: 0.8s; } .link a:hover { color: #1c56b0; background: #ebf0ff; border-color: #ebf0ff; } </style> </head> <body> <div id="container">'; if(!$error2) $html .= ' <form method="POST"> <h1>L\'accès à ce fichier requiert un identifiant et un mot de passe</h1> '.$error.' <label><b>Nom d\'utilisateur</b></label> <input type="text" placeholder="Entrer le nom d\'utilisateur" name="username" required> <br /><br /> <label><b>Mot de passe</b></label> <input type="password" placeholder="Entrer le mot de passe" name="password" required> <br /><br /> <input type="submit" id="submit" value="LOGIN" > <br/> <dip class="link" > <a href="'.$_SESSION['referer'].'">Revenir au produit</a> </div> </form>'; else $html .= $error2; $html .= ' </div> </body> </html>'; die($html); } } session_destroy(); Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 24, 2021 Author Share Posted June 24, 2021 Mais oui ça fonctionne !! le code est un peu différent de celui posté au départ, peut-être que ça venait de là (ou pas). C'est vraiment sympa de m'avoir aidé sur ce pb, ça me sort de la galère. On peut éventuellement ajouter des identifiants et password complémentaires ? genre Kamoulox 1, Kamoulox 2 (j'ai changé le nom sur mon site je précise) du style if(($user == 'Kamoulox') && $pass == 'GrEEn' OR (($user == 'Kamoulox1') && $pass == 'GrEEn1') OR (($user == 'Kamoulox2') && $pass == 'GrEEn2'){ (pas sûr de mon bout de code) Link to comment Share on other sites More sharing options...
Eolia Posted June 24, 2021 Share Posted June 24, 2021 c'est un peu la pagaille des parenthèses^^ if(($user == 'Kamoulox' && $pass == 'GrEEn') || ($user == 'Kamoulox1' && $pass == 'GrEEn1') || ($user == 'Kamoulox2' && $pass == 'GrEEn2')) { 1 Link to comment Share on other sites More sharing options...
Gérard-Vincent Posted June 24, 2021 Author Share Posted June 24, 2021 Mais oui !!! beaucoup plus propre avec le double vertical qui remplace OR et les parenthèses en place. C'est bien rangé comme dans mon salon 🤣 Excellent. Merci !! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now