revlysJ / zipabox

Plugin for Jeedom
2 stars 1 forks source link

CallZipabox 302 redirect #3

Open Aplusbaigalix opened 4 years ago

Aplusbaigalix commented 4 years ago

Bonjour, Merci pour ce plugin vraiment génial !! J'ai eu un petit souci cependant, lors de l'appel de la fonction CallZipabox(), le serveur Zipato retourne, aléatoirement, un http 302 (redirect). https://github.com/revlysJ/zipabox/blob/f3fe0205d038c292e3bc1146f37a4e73581444cd/core/class/zipabox.class.php#L323-L338

J'ai commencé par chercher s'il y avait pas un problème sur la formation de la requête, pour ensuite chercher au niveau du retour.

Voici les logs que j'ai rajoutés pour essayer de résoudre le problème :

    public static function CallZipabox($zipaboxID, $endurl)
    {
        $jsessionid = config::byKey('jsessionid_' . $zipaboxID , 'zipabox', 0);
        $url = zipabox::GetZipaboxURL();

        zipabox::log( 'debug', 'aplus url=' . $url);
        zipabox::log( 'debug', 'aplus endurl=' . $endurl);
        $ch = curl_init($url . $endurl);
        curl_setopt($ch, CURLOPT_COOKIE, 'JSESSIONID=' . $jsessionid);
        //curl_setopt($ch, CURLOPT_HTTPHEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $output = curl_exec($ch);

        $info = curl_getinfo($ch);
        zipabox::log( 'debug', 'aplus url=' . $info['url']);
        zipabox::log( 'debug', 'aplus http_code=' . $info['http_code']  );
        zipabox::log( 'debug', 'aplus redirect=' . $info['redirect_url']  );

        zipabox::log( 'debug', 'CURL=' . curl_exec($ch));
        zipabox::log( 'debug', 'cmd JSESSIONID=' . $jsessionid);
        zipabox::log( 'debug', 'cmd output=' . $output);
        return $output;
    }

Retour correct

[2019-12-05 19:41:16][DEBUG] : aplus url=https://my.zipato.com/zipato-web/v2/
[2019-12-05 19:41:16][DEBUG] : aplus endurl=box
[2019-12-05 19:41:16][DEBUG] : aplus url=https://my.zipato.com/zipato-web/v2/box
[2019-12-05 19:41:16][DEBUG] : aplus http_code=200
[2019-12-05 19:41:16][DEBUG] : aplus redirect=
[2019-12-05 19:41:16][DEBUG] : CURL={ *correct_result* }
[2019-12-05 19:41:16][DEBUG] : aplus url=https://my.zipato.com/zipato-web/v2/
[2019-12-05 19:41:16][DEBUG] : aplus endurl=contacts/self
[2019-12-05 19:41:16][DEBUG] : aplus url=https://my.zipato.com/zipato-web/v2/contacts/self
[2019-12-05 19:41:16][DEBUG] : aplus http_code=200
[2019-12-05 19:41:16][DEBUG] : aplus redirect=
[2019-12-05 19:41:16][DEBUG] : CURL=
[2019-12-05 19:41:16][DEBUG] : cmd JSESSIONID=*jsessionid*-n1.frontend5
[2019-12-05 19:41:16][DEBUG] : cmd output={ *correct_result* }

Redirect

[2019-12-05 19:41:19][DEBUG] : aplus url=https://my.zipato.com/zipato-web/v2/
[2019-12-05 19:41:19][DEBUG] : aplus endurl=box
[2019-12-05 19:41:19][DEBUG] : aplus url=https://my.zipato.com/zipato-web/v2/box
[2019-12-05 19:41:19][DEBUG] : aplus http_code=200
[2019-12-05 19:41:19][DEBUG] : aplus redirect=
[2019-12-05 19:41:19][DEBUG] : CURL=
[2019-12-05 19:41:19][DEBUG] : cmd JSESSIONID=*jsessionid*-n1.frontend5
[2019-12-05 19:41:19][DEBUG] : cmd output={ *correct_result* }
[2019-12-05 19:41:19][DEBUG] : aplus url=https://my.zipato.com/zipato-web/v2/
[2019-12-05 19:41:19][DEBUG] : aplus endurl=contacts/self
[2019-12-05 19:41:19][DEBUG] : aplus url=https://my.zipato.com/zipato-web/v2/contacts/self
[2019-12-05 19:41:19][DEBUG] : aplus http_code=302
[2019-12-05 19:41:19][DEBUG] : aplus redirect=https://my.zipato.com/zipato-web/Index
[2019-12-05 19:41:19][DEBUG] : CURL=
[2019-12-05 19:41:19][DEBUG] : cmd JSESSIONID=*jsessionid*-n1.frontend5
[2019-12-05 19:41:19][DEBUG] : cmd output=

Pour résoudre le problème, j'ai donc essayé de rajouté l'option permettant du suivre la redirection.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

Avec une efficacité limité :(

Edit: Je viens de me rendre compte que ca ne marche que partiellement...

Aplusbaigalix commented 4 years ago

Bonjour,

En fait c'est un pb au niveau du JSESSIONID. J'ai remplacer le JSESSIONID par un générer par mon navigateur. Et j'ai remarqué en copiant, que les deux n'ont pas le même format :

Le plus surprenant, c'est que avant de copier le champ, le format est celui de jeedom:

image

Du coup j'ai récupéré le JSESSIONID du navigateur et ai remplacé celui présent en bdd jeedom (table config). J'ai désactivé la modification de cette config par la tache cron30. Ça fait maintenant ~19h que ça tourne sans soucis avec cette méthode.

Je n'ai toujours pas trouvé ce qu'il ce passe réellement, je me demande si le site ne remplace pas le cookie lors de certaine session (d'ou le redirect pour appliqué le changement cookie ?)

revlysJ commented 4 years ago

Bonjour,

Merci pour ce retour détaillé. Comme cela fait plus d'un an que je n'utilise plus ma zipabox, je n'ai rien remarqué.

Il me semble avoir vu passer une info comme quoi zipato avait eu des failles de sécurité sur leur serveur api. Du coup, ils ont peut-être mis en place des mesures qui posent soucis.

J'essaierai de trouver un moment pour regarder ça de plus prés.

Bonne journée.