Problème script shell et Prestashop

Résolu/Fermé
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014 - Modifié par Domcallaghan le 30/11/2013 à 11:53
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014 - 9 mai 2014 à 15:21
Bonjour,

Je souhaite automatiser la mise à jour d'une BDD prestashop avec un fichier csv. J'ai donc trouvé un script shelle remplissant cette office pour la version 1.4 de PS or je suis sur la version 1.5 et le script doit sans doute être modifié pour fonctionner correctement. Notamment la partie la plus importante est celle de la récupération du token afin de pouvoir accéder au panneau d'administration.

#!/bin/bash

## Script de mise à jour automatique des quantités sur Prestashop

## Version 1.0.0

## Variables utiles & Paramètres Prestashop ##

email='XXX.XXX@XXXX.XXX'
passwd='XXXXXX'
tab='Import'
admintab='Admin'$tab
urladminsite='http://XXX.XXX.XXX/adminXXXXX/'
csvfile='essaiproduit.csv'
typevalue='&type_value[0]=id&type_value[1]=name&type_value[2]=no&type_value[3]=quantity'

## Identification, cookie & accès au BackOffice  ##

wget --save-cookies=cookie.txt --post-data='email='$email'&passwd='$passwd'&Submit=submit' --keep-session-cookies -q -O login.php $urladminsite'login.php'
if [ -n "$(grep 'error' login.php)" ]
then
  error=$(grep '<li>.*</li>' login.php | sed 's/.*<li>\(.*\)<\/li>/\1/g')
  echo 'ERREUR : '$error
else
  # Si pas d'erreur premier accès à la partie administration
  wget --load-cookies=cookie.txt --keep-session-cookies -q -O index.php $urladminsite'index.php' # Accès à la partie administration
  token=$(grep 'index.php?tab='$admintab'\&token=' index.php | sed 's/.*token=\(.*\)\">'$tab'.*/\1/g') # Extraction du token de la page index.php pour l'onglet qui nous intéresse
fi

##Importation du fichier csv présent dans /Import  ##
if [ -n "$(echo $token | grep ^[a-z0-9]*)" ]
then
  echo 'TOKEN : '$token # Affichage du token récupéré
  wget --load-cookies=cookie.txt --keep-session-cookies --post-data='tab='$admintab'&token='$token'&skip=0&csv='$csvfile'&entity=1&iso_lang=fr&separator=;&multiple_value_separator=,'$typevalue'&import=Import CSV data' -q -O maj.php $urladminsite'index.php'
else
  echo 'ERREUR : Pas de token'
fi



Le problème c'est lors de l'exécution du script qui génére effectivement un cookie avec les informations mais qui ne récupère aucun token. Je cherche ce qui as changé entre les deux versions de PS mais il semblerait que le token soit gérer autrement. Si vous pouviez m'aider à trouver un moyen de récupérer ce token, je pourrai finaliser mon dévellopement de script. Je sais qu'il y a d'autres modifications à faire mais j'aimerais les résoudre dans l'ordre à commencer par le token. D'avance merci pour vos réponses.

J'ai cherché sur ce lien là https://forums.commentcamarche.net/forum/affich-25492070-probleme-fonction-sed-bash

Mais je n'arrive pas du tout à obtenir la longue liste de token.

A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
30 nov. 2013 à 11:30
Salut,

Pour pouvoir t'aider il nous faudrait un exemple de ton fichier
index.php
, afin de savoir ce qu'est censé récupérer la commande
grep
et pourquoi ça foire ;-\
0
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014
Modifié par Domcallaghan le 30/11/2013 à 12:11
En vérité, après plusieurs recherches, il semblerait que le token recherché soit dans le fichier login.php, je vais continuer de faire des test pour obtenir le token

Je vais vous montrer dans le fichier login il y a au bout d'un moment cette ligne là

<input type="hidden" name="redirect" id="redirect" value="&token=10a09d54eb8e696ddf4a83c7543d9894"/>


On trovue donc la ligne avec le grep et puis on récupére le token avec un sed mais c'est là que je n'arrive pas à récupérer ma chaine, j'ai du mal avec l'utilisation de sed. Si quelqu'un peut m'aider à trouverla bonne syntaxe pour récupérer la chaine sachant qu'elle changera à chaque nouvelle connexion.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
30 nov. 2013 à 12:09
Tu dois récupérer quoi en fait ?
Juste la valeur du
token (10a09d54eb8e696ddf4a83c7543d9894)
?
0
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014
Modifié par Domcallaghan le 30/11/2013 à 12:12
Oui le but est de récupérer la chaine comprise après &token=, pour pouvoir s'en servir dans le script un peu plus tard avec le wget.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
30 nov. 2013 à 12:13
$ cat plop 
<input type=hidden name=redirect id=redirect value=&token=10a09d54eb8e696ddf4a83c7543d9894/>

$ grep -P -o 'token=\K[^/]*' plop 
10a09d54eb8e696ddf4a83c7543d9894
0
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014
Modifié par Domcallaghan le 30/11/2013 à 12:21
Cela fonctionne presque il me reste une guillemet à la fin de ma chaine qui est indésirable. En tout cas, merci beaucoup j'avance grandement grâce à toi.

10a09d54eb8e696ddf4a83c7543d9894"
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
30 nov. 2013 à 12:23
Ah oui, pardon, j'ai mal recopié ton exemple ;-((

Essaie comme ça
grep -P -o 'token="\K[^"]*'
;,-))
0
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014
Modifié par Domcallaghan le 4/12/2013 à 15:06
Je reviens à ce topic car j'ai enfin trouvé mon problème dans le script de mise à jour, la connexion au Back-Office ne marche pas. Je rappelle que j'utilise la version 1.5 de Prestashop. Normalement la première ligne doit permettre l'identification puis la seconde l'accès au backoffice or dès la première ligne WGET, la connexion ne fonctionne pas, je récupère bien un cookie mais je n'arrive pas à la page index du Back-Office, page qui me permettrait d'avancer dans mon script. Si vous avez un peu de temps pour m'aider à trouver ce qui ne va pas.

urladminsite=http://XXXX.XXXX.XXXX/adminXXX/

 wget --save-cookies=cookie.txt --post-data='email='$email'&passwd='$passwd'&submitLogin=submit' --keep-session-cookies -q -O login.php $urladminsite'login.php'

#accès à la partie administration
 wget --load-cookies=cookie.txt --keep-session-cookies -q -O index.php $urladminsite'index.php'
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
4 déc. 2013 à 15:40
Difficile de se faire une idée juste avec la syntaxe ;-(

Il faudrait déterminer visuellement à l'écran que l'authentification s'est bien passée en filtrant la sortie via w3m (par exemple) et si c'est bon faire de même avec l'autre commande.

Normalement c'est ce que tu devrais pouvoir vérifier via les 2 fichiers que tu récupères (login.php et index.php), non ?

Sont-ils conformes à ce que tu peux visualiser via un navigateur lorsque tu te logues ?
0
Domcallaghan Messages postés 13 Date d'inscription samedi 30 novembre 2013 Statut Membre Dernière intervention 9 mai 2014
4 déc. 2013 à 16:08
Je viens de finir mes essais et je pouvais voir que le log n'avais pas marché. Mais j'ai réussi à trouver le problème et je l'ai résolu, il fallait juste changer l'URL du WGET pour que cela fonctionne correctement, je viens juste de m'en apercevoir donc c'est résolu.

Pour la version 1.5, il faut utiliser cela
$urladminsite'index.php?controller=AdminLogin'

au lieu de cela

$urladminsite'index.php'
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
7 mai 2014 à 14:07
Bonjour aussi !

Ben à un email et à un mot de passe, pourquoi ?
0
Bonjour ! Désolé, pas l'habitude des forums. Oui à un email certes, mais pourquoi renseigner un mdp ? Et est-ce que je peux mettre mon adresse perso ?
0
En tout cas, bravo et merci pour ce script !
0