Création Connecteur Vente-privee


#1

Bonjour,

Je suis en train de créer un connecteur “vente privée”. J’arrive bien à récupérer les documents de la page 1. Le problème que je rencontre, c’est que pour accéder aux autres pages, vente privée à l’air de se baser sur des paramètres passés via des cookies.

Plusieurs questions :

  • Est il possible via la lib proposée par cozy, de déclecher des actions du type click() sur des items du dom qui activeraient les scripts js de la page (Changement des valeurs des cookies par exemple).
  • Si cela n’est pas possible, est il possible de récupérer le cookie et le modifier afin de récupérer les factures des pages suivantes. Type de valeur que je souhaite modifier : {“NumberItemPerPage”:“15”,“PageNumbers”:1}

Merci d’avance pour vos réponses. Je continue à regarder la doc en parallèle en espérant trouver une solution.


#2

Hello @glelostec,

:tada:

Non, les bibliothèques que nous utilisons permettent de faire des requêtes sur un site distant, mais pas d’interpréter le JS de la page, nous n’embarquons pas un navigateur complet capables d’exécuter je JS du site distant.

Oui ! Pour faire les requêtes, nous utilisons la bibliothèque Request qui est capable de gérer les cookies. Il suffit pour cela de passer jar: true lorsque tu instancies une instance de request (il me semble que c’est le comportement par défaut donc que tu n’as en fait rien à faire).

Je n’ai pas d’exemple sous la main de modification de cookies dans un connecteur, mais tu peux peut-être t’inspirer de https://github.com/request/request/blob/536f0e76b249e4545c3ba2ac75e643146ebf3824/tests/test-cookies.js (par contre je pense que ça ne fonctionnera qu’avec les cookies envoyés par le serveur. Si le code JS dans la page que tu analyse modifie les cookies, tu ne pourras pas avoir accès à ces cookies, puisque tu ne peux pas modifier le code de la page. Mais, en analysant les requêtes envoyées par le site, tu peux probablement forger des cookies avec les bonnes valeurs).


#3

Merci @Clochix pour ta réponse.

j’ai bien regardé les test unitaires pour comprendre la lib. J’ai donc fait le code suivant :

var jar = request.jar()
jar.setCookie(
request.cookie(‘PaginationOrderCookie={“NumberItemPerPage”:100,“PageNumbers”:1}’),
${baseUrl}/memberaccount/order/
)
const $ = await request(${baseUrl}/memberaccount/order/)

Pour le moment ça ne fonctionne pas. Je continue à chercher.


#4

Bonjour @Clochix,

je n’ai pour le moment pas réussi à faire ce que je souhaitais, mais mon connecteur fonctionne pour les 15 dernières factures (Ce qui est déjà pas mal somme toute :slight_smile: )

Comment puis je le tester sur mon cozy auto-hébergé afin de le tester avant de le proposer dans le store?

Voici le lien github https://github.com/gllsoft/cozy-konnector-vente-privee


#5

Merci @glelostec :partying_face:

Si tu cherches un exemple de connecteur manipulant les cookies, mes recherche sur les connecteurs existant n’ont rien donné non-plus. Le connecteur digiposte https://github.com/konnectors/cozy-konnector-digiposte lit dans les cookies de la page. Reste que pour l’exemple du connecteur digiposte, rien ne t’empêche de modifier la variable j qui sera réutilisée dans les requêtes suivantes. J’espère que cela peut t’aider.

En fait, dans ton exemple, tu dois pouvoir faire :

var jar = request.jar()
jar.setCookie(request.cookie(‘PaginationOrderCookie={“NumberItemPerPage”:100,“PageNumbers”:1}’), ${baseUrl}/memberaccount/order/)
const $ = await request(${baseUrl}/memberaccount/order/, {
  jar: jar
}) 

Sinon, rien ne t’empêche de déjà sortir une version de ton connecteur qui ne lit que la première page. Je trouve que c’est déjà pas mal.


#6

Merci @doubleface je vais regarder, pour le moment dès que je mets un cookie, je retourne systématiquement sur la page de login, donc pas de factures récupérables.

Sinon j’ai commit la version “Récupération de la première page” (cf lien github sur mon précédent post). Je voudrais le tester en amont sur mon auto-hébergé (Comment dois-je m’y prendre), mais si vous le jugez fonctionnel alors y a plus qu’à faut qu’on le mettre sur le store :slight_smile:


#7

Je vais aussi tester ton connecteur de mon côté mais si tu veux le tester sur ton cozy auto-hébergé, tu dois bien remplir le fichier manifest.konnector et en particulier les champs slug (ex : venteprivee) et fields et ensuite, tu peux lancer les commandes :

yarn build
cozy-stack konnectors install venteprivee file:///$PWD/build/ 

Si tout se passe bien, le connecteur devrait apparaitre dans ta home (ou collect en fonction de la version de ton cozy)


#8

Super @doubleface,

Je vais tester cela ce soir. Autre question, est il nécessaire de commit le build afin de le rendre le connecteur disponible à terme sur le store ou bien cozy-store ce charge t’il de cette étape là?


#9

Non, pas besoin de commit le build. On pourra voir dans un deuxième temps la partie déploiement sur le store une fois qu’on aura fini nos tests.


#10

Et une petite PR pour détecter correctement si le login a réussi ou non : https://github.com/gllsoft/cozy-konnector-vente-privee/pull/1


#11

Et une autre pour mettre le bon attribut vendor dans les bills : https://github.com/gllsoft/cozy-konnector-vente-privee/pull/2


#12

Merci @doubleface pour ces améliorations.

J’essaie de l’installer sur mon cozy auto-hébergé mais j’ai un problème de droit pourtant je suis en root (pas bien je sais :slight_smile: )

Je suppose que les fichiers doivent avoir les droits en lecture pour le user cozy-stack, portant même en attribuant ces fichiers au user cozy-stack j’ai toujours le message suivant :

Error: open /root/testKonnector/cozy-konnector-vente-privee/build/manifest.konnector: permission denied

Voici ma commande : cozy-stack konnectors install --domain cozy.mondomaine.fr venteprivee file:///root/testKonnector/cozy-konnector-vente-privee/build/

Merci d’avance.


#13

Est-ce que tous les dossiers des niveaux supérieurs sont accessibles en lecture à cozy-stack ?


#14

Oui c’est bon j’ai corrigé le problème, maintenant j’ai le message Error: Application manifest is not reachable. Je continue à chercher :slight_smile:


#15

Est-ce que le fichier manifestation.konnector se retrouve bien dans ton répertoire de build?


#16

Bonjour @doubleface

Voici le contenu du dossier build sur mon serveur :

.travis.yml
LICENSE
README.md
icon.png
index.js
logo_vp.svg
manifest.konnector
package.json


#17

Ça a l’air normal. Du coup, ça risque plus d’être un problème de droit


#18

En effet c’était un problème de droit,

j’ai fini par installer mon konnector, je l’ai lancé et ça fonctionne, j’ai bien les 15 dernières factures.

I’m so happy :slight_smile:

Je vous laisse tester de votre côté.


#19

Hello @glelostec le connecteur vente privée est maintenant disponible sur le store pour tous les utilisateurs de cozy :

image

Si tu as des évolutions à faire, n’hésite pas à faire des PR sur https://github.com/konnectors/venteprivee . J’ai fait quelques modifications de packaging mais ça ne change pas grand chose.

Merci pour cette contribution :clap:


#20

Good news @doubleface

Mon objectif, réussir à jouer avec les cookies pour récupérer toutes les factures