Projet

Général

Profil

Development #67085

Authentification DRF and co pour APIClient

Ajouté par Emmanuel Cazenave il y a presque 2 ans. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
06 juillet 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Pour exploiter #66985.


Fichiers


Demandes liées

Lié à Authentic 2 - Development #66985: gestion centralisée des accès aux API / Infrastructure minimale pour accès HTTP basicFermé05 juillet 2022

Actions
Lié à Hobo - Development #67087: Avoir un wrapper Request qui puisse être partagé par les applications Fermé06 juillet 2022

Actions

Révisions associées

Révision 57d85693 (diff)
Ajouté par Emmanuel Cazenave il y a plus d'un an

rest_authentication: add a requests wrapper (#67085)

Révision bc959e92 (diff)
Ajouté par Emmanuel Cazenave il y a plus d'un an

rest_authentication: add api client authentication (#67085)

Historique

#2

Mis à jour par Frédéric Péters il y a plus d'un an

  • Lié à Development #66985: gestion centralisée des accès aux API / Infrastructure minimale pour accès HTTP basic ajouté
#3

Mis à jour par Emmanuel Cazenave il y a plus d'un an

0001 pour un request wrapper.
0002 l'authent, rien se spécial à mon sens.

#4

Mis à jour par Benjamin Dauvergne il y a plus d'un an

  • Statut changé de Solution proposée à Information nécessaire

Je commence.


        response = Requests().post(url, json={'identifier': identifier, 'password': password})
        try:
            response.raise_for_status()
        except requests.exceptions.RequestException:
            return None

S'il y a une erreur réseau le problème ressortira dans le porteur du web service mais aussi sur le client (avec juste une 500 sans savoir vraiment le souci) mais pas du tout sur authentic, je me dis qu'on pourrait cacher ces erreurs coté web services et simplement renvoyer le souci dans des erreurs propres 500 avec err/err_desc/err_cls (via l'émission d'une exception APIException), on aura ainsi une trace que chez l'appelant, avec un code d'erreur explicite, ça me parait mieux.


Je ne connaissais pas responses, ça a l'air bien sympa, plus qu'httmock. Je découperai ton test en plusieurs cas via une class :

class TestApiClientAuthentication:
     @pytest.fixture(autouse=True)
     def setupt(self):
         settings.ROOT_URLCONF = 'hobo.test_urls'
         app.authorization = ('Basic', ('foo', 'bar'))
         settings.KNOWN_SERVICES = {
            'authentic': {
                'idp': {
                    'title': 'Foobar',
                    'url': 'https://idp.example.invalid/',
                    'orig': 'example.org',
                    'secret': 'xxx',
                 }
             }
         }

     def test_no_known_services(self, settings):
         del settings.KNOWN_SERVICES
         # No KNOWN_SERVICES : 403
         resp = app.get('/authenticated-testview/', status=403)

     def test_no_authentic_in_known_services(self, settings):
         # No authentic in  KNOWN_SERVICES : 403
         settings.KNOWN_SERVICES = {}
         resp = app.get('/authenticated-testview/', status=403)

     @responses.activate
     def test_error_404(self)
         # check-api-client returns an error : 403
         responses.add(
             responses.POST,
             'https://idp.example.invalid/api/check-api-client/',
             status=403,
         )
         resp = app.get('/authenticated-testview/', status=403)
...

Je trouve plus clair ce style avec des tests plus petits mais ciblés et structurés.

#5

Mis à jour par Emmanuel Cazenave il y a plus d'un an

Benjamin Dauvergne a écrit :

S'il y a une erreur réseau le problème ressortira

Voilà des 503 propres.

Je trouve plus clair ce style avec des tests plus petits mais ciblés et structurés.

Découpé mais sans classe, j'aime pas du tout dans les tests.

#6

Mis à jour par Benjamin Dauvergne il y a plus d'un an

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

Good.

#7

Mis à jour par Emmanuel Cazenave il y a plus d'un an

  • Statut changé de Solution validée à Résolu (à déployer)
commit bc959e928e6c9a0974e50102b31a50965d910ce1 
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Mon Aug 22 14:23:04 2022 +0200

    rest_authentication: add api client authentication (#67085)

commit 57d856937633c75dec33a7688ede02512bf59864
Author: Emmanuel Cazenave <ecazenave@entrouvert.com>
Date:   Mon Aug 22 14:22:02 2022 +0200

    rest_authentication: add a requests wrapper (#67085)
#8

Mis à jour par Transition automatique il y a plus d'un an

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

Mis à jour par Mikaël Ates (de retour le 29 avril) il y a plus d'un an

  • Lié à Development #67087: Avoir un wrapper Request qui puisse être partagé par les applications ajouté
#10

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF