Projet

Général

Profil

Bug #31274

iparapheur: désactiver basic_authentication pour certaines url

Ajouté par Nicolas Roche il y a environ 5 ans. Mis à jour il y a environ 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
11 mars 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Au chargement du WSDL d'iParapheur:
- le wsdl est protégé par basic_authentication
- la ressource (incluses comme import dans le wsdl d'iParapheur) 'http://www.w3.org/2005/05/xmlmime' qui est accessible sur un serveur public, génère une erreur 401 si on y accède en proposant une basic_authentication.


Fichiers


Demandes liées

Lié à Passerelle - Support #31120: iparapheur: passer ce connecteur à zeepFermé06 mars 2019

Actions

Révisions associées

Révision 00211a4c (diff)
Ajouté par Nicolas Roche il y a environ 5 ans

iparapheur: resolv no basic_authentication on w3.org (#31274)

Historique

#1

Mis à jour par Nicolas Roche il y a environ 5 ans

  • Lié à Support #31120: iparapheur: passer ce connecteur à zeep ajouté
#2

Mis à jour par Nicolas Roche il y a environ 5 ans

Premier jet (merci Thomas).
Ce patch permet d'accéder au site w3.org sans basic_authentication.
Il généralise l'accès public à ce site pour l'ensemble des connecteurs utilisant SOAPClient.
Ce patch devra également reprendre les tests pour coller aux mieux aux tests directs sur une vraie instance (Rouen).

#3

Mis à jour par Thomas Noël il y a environ 5 ans

En parcourant le web mais aussi nos wsdl dans tests/data/, on voit aussi des imports depuis schemas.xmlsoap.org : j'ajouterais bien ce site en exception à côté de www.w3.org

Ensuite, c'est mon avis, peut-être d'autres diront autre chose, mais je préférerais que _load_remote_data appelle le super() par défaut, genre :

    def _load_remote_data(self, url):
        if urlparse(url).hostname in ['www.w3.org', 'schemas.xmlsoap.org']:
            response = self.session.get(url, timeout=self.load_timeout, auth=None, cert=None)
            response.raise_for_status()
            return response.content
        return super(SOAPTransport, self)._load_remote_data(url)
#4

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

à mon avis le problème est plus grave que cela, en vrai on distribue nos login/mots de passe à la terre entière sauf w3.org, c'est pas super mieux. On ne sait pas forcément si un connecteur ne va pas faire des appels à droite à gauche (d'autant plus les connecteurs SOAP qui font des appels basé sur des URLs venant de documents qu'on ne maîtrise pas). Ça fera un autre ticket pour plus tard.

#5

Mis à jour par Thomas Noël il y a environ 5 ans

Benjamin Dauvergne a écrit :

À mon avis le problème est plus grave que cela, en vrai on distribue nos login/mots de passe à la terre entière sauf w3.org, c'est pas super mieux.

Excellente remarque. Nicolas, voilà un bon nouvel exercice :)

#6

Mis à jour par Nicolas Roche il y a environ 5 ans

basic_authentication uniquement pour les services pointés par le WSDL.
(j'imagine que l'adresse basée sur l'url du WSDL ne suffira pas mais c'est pour avoir un premier avis sur cette solution).

#7

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

À mon avis il faudra penser à une solution au niveau de self.requests pour plus tard, mais comme ça c'est bien.

#8

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

  • Statut changé de Solution proposée à Solution validée

Ça mériterait un test pour valider qu'on ne reçoit pas login/mdp sur une URL quelconque.

#9

Mis à jour par Nicolas Roche il y a environ 5 ans

Je me suis trop avancé, c'est compliqué de récupérer les urls des services SOAP (je tourne en rond) :
pour faire du code propre (concis) il faudrait les récupérer après que le wsdl soit parsé,
or ces urls serviront justement pour récupérer le wsdl et ses imports.

Idem, en fait pas besoin de correction des tests, les messages retournés sont conformes avec ce que l'i-parapheur de Rouen renvoi.

Donc :
- filtrage des url basé sur l'host de l'url du wsdl fournie pour activer basic_authentication
- ajout d'un test sur ce filtrage
- ajout de certains tests manquants
- je n'ai pas corrigé les exception levées volontairement dans le code qui sortent en erreur 500 (autre ticket à venir)

Dites-moi...

#10

Mis à jour par Frédéric Péters il y a environ 5 ans

Il y a une erreur de build mais ça ne doit pas avoir de rapport.

from urlparse import urlparse, tire le plutôt de django.utils.six (from django.utils.six.moves.urllib import parse as urlparse).

À part ça, le filtrage fait ainsi, ça me semble bien suffisant.

#12

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

  • Statut changé de Solution proposée à Solution validée

Ack.

#13

Mis à jour par Nicolas Roche il y a environ 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 00211a4cc84101e0ed7b28c62e11942f9a0d49d1 (HEAD -> master)
Author: Nicolas ROCHE <nroche@entrouvert.com>
Date:   Fri Mar 8 12:08:19 2019 +0100

    iparapheur: resolv no basic_authentication on w3.org (#31274)
#14

Mis à jour par Frédéric Péters il y a environ 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée
#15

Mis à jour par Benjamin Dauvergne il y a environ 5 ans

  • Statut changé de Solution déployée à Fermé

Formats disponibles : Atom PDF